Dockerロギング・ドライバでコンテナログ管理

Dockerで複数コンテナを運用する際にログをどう扱うかが課題でした。Docker logs コマンドでホストのコンソールにログを出力できますが実運用には耐えられません。Docker1.6から導入されたロギング・ドライバを使用すれば解決できそうです。

1.ロギング・ドライバ

Dockerコンテナでは、コンテナ作成後にコンテナ内のファイルシステムに書き込まれたデータはコンテナの削除時に一緒に破棄されてしまう。そのため、各種ログやエラーメッセージ出力などの保存しておきたい情報はコンテナ外に出力して保存しておく必要がある。Dockerではこれを支援する機能の1つとして、ログを外部のログ記録ソフトウェアに転送する機構が用意されている。(さくらナレッジより引用)これがロギングドライバと呼ばれる機能でDocker Runでコンテナ起動時には –log-driver=Valueで設定します。何も指定しないとデフォルトではjson-fileになります。docker logsコマンドでログが参照できるのはjson-fileに保存されているからです。Valueで指定できるのは以下の値です。

none コンテナ用のロギング・ドライバを無効化します。このドライバを指定したら docker logs は無効化されます。
json-file Docker 用のデフォルト・ロギング・ドライバです。JSON メッセージをファイルに記録します。
syslog Docker 用の syslog ロギング・ドライバです。ログ・メッセージを syslog に記録します。
journald Docker 用の journald ロギング・ドライバです。ログ・メッセージを journald に記録します。
gelf Docker 用の Graylog Extendef ログ・フォーマット(GELF)ロギング・ドライバです。ログ・メッセージを Graylog のエンドポイントや Logstash に記録します。
fluentd Docker 用の fluentd ロギング・ドライバです。ログ・メッセージを fluentd に記録します(forward input)。
awslogs Docker 用の Amazon CloudWatch Logs ロギング・ドライバです。ログ・メッセージを Amazon CloudWatch Logs に記録します。
splunk Docker 用の Splunk ロギング・ドライバです。HTTP イベント・コレクタを使いログを splunk に書き込みます。
etwlogs Docker 用の ETW ロギング・ドライバです。ログメッセージを ETW イベントとして書き込みます。
gcplogs Docker 用の Google Cloud ロギング・ドライバです。ログメッセージを Google Cloud Logging に書き込みます。

Docker マニュアルより)

2.syslogドライバ

今回設定したのはSyslogドライバです。文字通り指定するとコンテナ内のログがホストのsyslogファイに出力されます。Docker-Composeのymlファイル内では以下のように設定します。

optionsでsyslog-addressを指定すると外部syslogサーバに送ることも可能です。今回はホストのsyslogファイルに出力するのでOptionsの設定はしていません。

上記設定を追加しコンテナを再起動します。

syslogに出力されているか確認します。

出力されています。成功です。

3.CentOS7のsyslog出力設定変更

今回、Dockerでsyslog出力するに際して/var/log/messageを覗いたところなにやら不明なログが大量に出力されています。以下のように1時間に1回6行も出力されてます。

ちょっと調べたところ、Centos7ではデフォルトのログレベルがinfoになっていてcron等が実行されるごとに出力されるようです。これだとDockerログが埋もれてしまうのでログレベルを変更して出力を抑止します。/etc/systemd/system.confのログレベルを変更します。

このあと、

# reboot
または
# shutdown -r now

にて上記ログレベルの変更が有効になります。

スポンサーリンク
レクタングル大広告




レクタングル大広告




シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
レクタングル大広告