dockerのログをPapertrailへ出力する
久方ぶりにunbound on docker でとっとと広告ブロックでdocker運用を始めたので、logをちゃんと出力しておきたいなと考えました。
わたしは普段からログ運用はPapertrailを利用していますので、そこへ出力できるのが望ましいと探してみました。
ふつーに公式からDocker - Papertrailが出ていました。やるじゃん。
わが家の場合は次のようにしました。?
のところがユーザごとの契約で固有になる部分ですね。
sudo docker run -d --restart=always --name logspout \
-v=/var/run/docker.sock:/var/run/docker.sock \
-e SYSLOG_HOSTNAME=`hostname -s` gliderlabs/logspout \
syslog+tls://logs?.papertrailapp.com:?????
せっかくなので雑な日本語訳を置いておきますね。
Logspout
logspout
コンテナを使って、次のように実行しましょう。
$ docker run --restart=always -d \
-v=/var/run/docker.sock:/var/run/docker.sock gliderlabs/logspout \
syslog+tls://logsN.papertrailapp.com:XXXXX
logsN
とXXXXX
部分をlog destinationsから、あなた固有の設定内容で置き換えます。
--restart
によってホスト起動時に自動的に再実行します。Docker runの振る舞いは引数の順序に影響されるので、引数を変えて実行する場合には注意してください。
Customizing logspout’s messages
Logspoutの環境変数を利用して、DockerのログをPapertrailへ出力する内容をカスタマイズできます。例えば、ログメッセージに出力元のホスト名を設定できます。
Dockerシステムのホスト名
をlogspout
コンテナを使って出力するような場合には、次のようにします。
$ docker run --restart=always -d \
-v=/var/run/docker.sock:/var/run/docker.sock \
-e SYSLOG_HOSTNAME=`hostname -s` gliderlabs/logspout \
syslog+tls://logsN.papertrailapp.com:XXXXX
また、SYSLOG_HOSTNAME
名を "{{.ContainerName}}"
とすることで、ホスト名ではなくDockerコンテナ名として出力できます。
logspout経由で出力されるログのフィールド(タグ、タイムスタンプ、データなど)の変更もできます。使用するsyslogフォーマットも、標準ではRFC5424
にしたがって変更できます。 documentation に詳しく書かれています。
Discussion