🪵

dockerのログをPapertrailへ出力する

2023/03/26に公開

久方ぶりに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

logsNXXXXX部分を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