docker-composeでsyslogを使ってログを保存する

Logrotate Linux
Logrotate

目的

以下が行えるログ機構を作成する

  • /var/log/docker/sample-app.log
    上記のようにログファイルに以下が格納される
    Sep 6 04:39:37 ip-10-0-2-215 sample-app/{docker_container_id}: {ip address} – – [06/Sep/2020:04:39:37 +0000] “GET / HTTP/1.1” 200 62 “-” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36”
  • ローテーションすると、sample-app.log-20200906.gzのようにgzipかされる
  • 365世代分のログファイルがgzip化され、366世代以降は削除される

詳細

・docker-compose loging part

    logging:
      driver: syslog
      options:
        syslog-facility: daemon
        tag: sample-app/{{.Name}}/{{.ID}}

・/etc/rsyslog.d/10-docker.conf

$template DockerLogs, "/var/log/docker/%programname%.log"

if $syslogfacility-text == 'daemon' and $programname contains 'sample-app' then -?DockerLogs
& stop

・/etc/logrotate.d/docker

/var/log/docker/*.log {
 rotate 365
 compress
 daily
 dateext
 missingok
}

以下で反映を忘れないようにする

$ systemctl restart rsyslog

また以下コマンドでのチェックも行う

$ logrotate -dv /etc/logrotate.conf

実際にローテーションさせたい場合は以下(他のログに関してもローテーションしてしまうので注意する)

$ logrotate -f /etc/logrotate.conf

すでにdocker-composeにて起動している場合は、docker-compose restartではログ機構が反映されないので、docker-compose up で反映させる必要あり。(原因は調査中)

参考

Dockerのログをrsyslogで出力する - Qiita
概要 Dockerのログをrsyslogで出力する方法。 関連 任意のログをlogrotateを使って管理する 環境 CentOS 7.7 rsyslog 8.24.0-41.el7_7.2 Docker...

上記が参考になった

あとがき

地味にできていない部分だったので、まとめることができてよかった

最低限のログ設定かなとも思うので、どんどん設定を加えていく。

コメント

タイトルとURLをコピーしました