oranie's blog

旧:iをgに変えると・・・なんだっけ・・・

fluentd(td-agent)で、td-agent.logのローテートをとりあえずする方法

追記:
やっぱこれをみんな悩むよね・・・と思って改めて色々ググり直したら思いっきり既知の問題かつ同じ手法(logrotateを使用する方法)でISSUEにも上がっていました。RHEL系でのtd-agent.specに既に書かれているのでリリース待ちですね。
https://github.com/treasure-data/td-agent/blob/master/redhat/td-agent.spec

https://github.com/treasure-data/td-agent/commit/ad7885ff4956c420a37d9a87c783ed81c422c53d

                                                                                                                                                                                                • -

表題のままです。まあ、そんな大量にエラーログとか出ている状態で運用する事無いんですけどね。ただ、一定サイズとか一定日次とかでローテートしておきたいじゃないですか。
で、今のfluentdの挙動を見る為にlibの中にあるsupervisor.rbをチラチラと読むとUSR1シグナルを受け取った時はログのreopenするけど、HUPの所では実装していないの何か意図があるのかな。nginxとかと同じ振る舞いにする意図なのかな?で、/etc/init.d/td-agentのreload処理の所で今HUPシグナルを投げるようになっているんだけど、これをUSR1シグナルにするのとHUP時でもとりあえずUSR1と同じ振る舞いをしちゃうのとどっちのpull reqがいいんだろう。

で、話しはそれましたがこんな訳なので普通に/etc/logrotate.d/にtd-agentって名前のファイル作って中身に

/var/log/td-agent/td-agent.log {
    daily
    rotate 5
    missingok
    notifempty
    compress
    sharedscripts
    postrotate
        /bin/kill -USR1 $(cat /var/run/td-agent.pid 2>/dev/null) 2>/dev/null || :
    endscript
}

を置いてあげればとりあえず出来るかな。で、この内容が合っているかは、まだログ送信中とかの動作テストしていないので未確認。ログローテート自体のテストは問題なく出来たけど。問題なければpull reqを送ってみたいと思います。