
したがって、Docker コンテナをデーモンとして実行できます。
docker run -d --name foo foo
そしてログを読んでください:
docker logs -f foo
しかし、ログを splunk や cloudwatch などに送信できるように、stdout/stderr にのみ書き込む方法を知りたいです。次のようなものです:
(
docker run --name foo foo &| capture_logs
) & disown
これを公式に行う方法は何ですか?
答え1
@Michaelが指摘したように、以下の説明にあるように、ログオプションを使用することができます。ドキュメント
一般的に言えば、これを行うには少なくとも 2 つの方法があり、以下で簡単に説明します。
- ドライバーの使用
splunk
例ここ。
まず、イベントコレクタートークンを作成します。ドキュメントトークンは Splunk ドライバー構成内で使用されます。
docker cli の例
docker run -d \
--log-driver=splunk \
--log-opt splunk-token=176FCEBF-4CF5-4EDF-91BC-703796522D20 \
--log-opt splunk-url=https://splunkhost:8088 \
--log-opt tag=foo-logs \
--name foo foo
docker-compose の例
version: '3.7'
services:
foo_app:
...
logging:
driver: splunk
options:
tag: foo-logs
splunk-token: 176FCEBF-4CF5-4EDF-91BC-703796522D20
splunk-url: https://splunkhost:8088
...
- ドライバーの使用
syslog
例ここ。
docker cli の例:
docker run \
-–log-driver syslog –-log-opt tag=foo-logs \
--name foo foo
docker-compose の例:
version: '3.7'
services:
foo_app:
...
logging:
driver: syslog
options:
tag: foo-logs
...
これにより、すべてのコンテナ ログがローカル syslog に送信され、そこからログを取得して、Splunk がログを受信できる外部 UDP ポートに転送できます。
Splunkサーバーがポートでログを受信する場合は、これを構成に追加してrsyslogdサービスを再起動する514
必要があります。rsyslogd
# /etc/rsyslog.d/20-splunk.conf
:syslogtag, contains, "foo-logs" @splunk_url:514;RSYSLOG_SyslogProtocol23Format
あるいは、すべてのコンテナに対してグローバルにする場合は、/etc/docker/daemon.json
以下のようにファイル自体でログ記録を設定できます (docker サービスを再起動することを忘れないでください)。
の場合にはsyslog
{
"log-driver": "syslog"
}
の場合にはsplunk
{
"log-driver": "splunk",
"log-opts": {
"splunk-token": "176FCEBF-4CF5-4EDF-91BC-703796522D20",
"splunk-url": "https://splunkhost:8088",
...
}
}
リストをチェックしてくださいサポートされているログドライバ