SSMエージェントは、logrotateなどの仕組みを利用しなくても、自力で自分の出力するログファイルをローテーションすることができるのですが、設定方法が結構謎だったのでメモ。
設定ファイル
/etc/amazon/ssm/seelog.xml.template
というファイルがあるので、これを/etc/amazon/ssm/seelog.xml
と.templateを外してここに設定をします(XMLです)
中を覗いてみると、ファイルの先頭に
<!--amazon-ssm-agent uses seelog logging -->
<!--Seelog has github wiki pages, which contain detailed how-tos references: https://github.com/cihub/seelog/wiki -->
<!--Seelog examples can be found here: https://github.com/cihub/seelog-examples -->
と、https://github.com/cihub/seelog/wiki に説明があるよと書いてあります。
wikiを見てみると、seelogはGo言語用のログ管理フレームワークで、SSM Agentはこの機能を使用してログを出力しているようです。
ローテーションの仕方は、Rolling file writer (or “Rotation file writer”)にあります。
seelog.xml
のデフォルト設定では、
<outputs formatid="fmtinfo">
<console formatid="fmtinfo"/>
<rollingfile type="size" filename="/var/log/amazon/ssm/amazon-ssm-agent.log" maxsize="30000000" maxrolls="5"/>
<filter levels="error,critical" formatid="fmterror">
<rollingfile type="size" filename="/var/log/amazon/ssm/errors.log" maxsize="10000000" maxrolls="5"/>
</filter>
</outputs>
のようになっていて、
ログ | ファイル名 | ローテーションのきっかけ | ローテーションする最大サイズ | 保持ファイル数 |
---|---|---|---|---|
infoログ | /var/log/amazon/ssm/amazon-ssm-agent.log | サイズがオーバーしたら | 30000000byte | 5世代 |
errorログ | /var/log/amazon/ssm/errors.log | サイズがオーバーしたら | 10000000byte | 5世代 |
こんな感じになっています。これを以下のように変更しようと思います。
ログ | ファイル名 | ローテーションのきっかけ | 保持ファイル数 |
---|---|---|---|
infoログ | /var/log/amazon/ssm/amazon-ssm-agent.log | 日次で | 7世代 |
errorログ | /var/log/amazon/ssm/errors.log | 日次で | 7世代 |
あと、ローテーションされたファイルのファイル名の後ろに日付を付けたい。これを適用すると以下のようになります。
<outputs formatid="fmtinfo">
<console formatid="fmtinfo"/>
<rollingfile type="date" filename="/var/log/amazon/ssm/amazon-ssm-agent.log" datepattern="20060102" maxrolls="7"/>
<filter levels="error,critical" formatid="fmterror">
<rollingfile type="date" filename="/var/log/amazon/ssm/errors.log" datepattern="20060102" maxrolls="7"/>
</filter>
</outputs>
datepattern="20060102"
がかなり謎なのですが、Golangで簡単にログを吐くことを考えるによると、GolangのTimeフォーマットがこうなっているとのこと。yyyymmdd
とかならわかるのですがなぜ2006年1月2日なのかよくわかりませんが、そういうもののようです。
まとめ
SSMエージェントはデフォルトで「SSM エージェント ログファイルの Amazon CloudWatch Logs への送信」のように、awslogsエージェントに頼ること無く自力でログをCloudWatch Logsへ転送することができます。
ですので、ローカルにログファイルをきっちり保持する必要はあまりないのかもしれませんが、これでローテーションを制御することができました。