5

root 以外のユーザー (td-agent) とホスト サーバーで docker コンテナーのログを監視したいのですが、

sudo chmod o+rx /var/lib/docker
sudo find /var/lib/docker/containers/ -type d -exec chmod o+rx {} \;
sudo find /var/lib/docker/containers/ -type f -exec chmod o+r {} \;

ただし、コンテナ ディレクトリのロールバックは 600 で、各コンテナ ディレクトリは 600 のままです。

# find /var/lib/docker/containers -ls
143142    4 drwx------   4 root     root         4096 Aug 14 12:01 /var/lib/docker/containers
146027    4 drwx------   2 root     root         4096 Aug 14 12:00 /var/lib/docker/containers/145efa73652aad14e1706e8fcd1597ccbbb49fd756047f3931270b46fe01945d
146031    4 -rw-r--r--   1 root     root          190 Aug 14 12:00 /var/lib/docker/containers/145efa73652aad14e1706e8fcd1597ccbbb49fd756047f3931270b46fe01945d/hostconfig.json
146046    4 -rw-r--r--   1 root     root           13 Aug 14 12:00 /var/lib/docker/containers/145efa73652aad14e1706e8fcd1597ccbbb49fd756047f3931270b46fe01945d/hostname
146047    4 -rw-r--r--   1 root     root          174 Aug 14 12:00 /var/lib/docker/containers/145efa73652aad14e1706e8fcd1597ccbbb49fd756047f3931270b46fe01945d/hosts
146030    4 -rw-r--r--   1 root     root         3305 Aug 14 12:00 /var/lib/docker/containers/145efa73652aad14e1706e8fcd1597ccbbb49fd756047f3931270b46fe01945d/config.json
146049    4 -rw-------   1 root     root         1853 Aug 14 12:00 /var/lib/docker/containers/145efa73652aad14e1706e8fcd1597ccbbb49fd756047f3931270b46fe01945d/145efa73652aad14e1706e8fcd1597ccbbb49fd756047f3931270b46fe01945d-json.log
146050    4 drwx------   2 root     root         4096 Aug 14 12:01 /var/lib/docker/containers/f09796f978ef5bab1449d2d10d400228eb76376579e7e33c615313eeed53f370
146054    4 -rw-r--r--   1 root     root          190 Aug 14 12:01 /var/lib/docker/containers/f09796f978ef5bab1449d2d10d400228eb76376579e7e33c615313eeed53f370/hostconfig.json
146056    4 -rw-r--r--   1 root     root           13 Aug 14 12:01 /var/lib/docker/containers/f09796f978ef5bab1449d2d10d400228eb76376579e7e33c615313eeed53f370/hostname
146057    4 -rw-r--r--   1 root     root          174 Aug 14 12:01 /var/lib/docker/containers/f09796f978ef5bab1449d2d10d400228eb76376579e7e33c615313eeed53f370/hosts
146053    4 -rw-r--r--   1 root     root         3286 Aug 14 12:01 /var/lib/docker/containers/f09796f978ef5bab1449d2d10d400228eb76376579e7e33c615313eeed53f370/config.json
146058    4 -rw-------   1 root     root         1843 Aug 14 12:01 /var/lib/docker/containers/f09796f978ef5bab1449d2d10d400228eb76376579e7e33c615313eeed53f370/f09796f978ef5bab1449d2d10d400228eb76376579e7e33c615313eeed53f370-json.log

これをそれぞれ監視する方法はjson.log?または他の良い監視方法はありますか?

4

4 に答える 4

7

logspoutlogs. I'm not sure this is the best solution, but it is very interesting and consistent way to collect containersは、コンテナーのログを収集するもう 1 つの方法です。

logspoutコンテナを実行するだけです。このコンテナーには、docker コンテナーのログを他の syslog サーバーに送信する機能があります。(または、HTTP API も使用できます。リポジトリを参照してください)

# (172.17.42.1 is host ip address)
$ docker run -v=/var/run/docker.sock:/tmp/docker.sock progrium/logspout syslog://172.17.42.1:5140

また、ホスト上で実行されている fluentd は、syslog プロトコルを介してこれらのログを処理できます。以下は td-agent.conf の例です。syslog protocal からログを受信し、elasticsearch サーバーに送信します。(このサンプルプロジェクトを確認してください)

<source>
  type syslog
  port 5140
  bind 0.0.0.0
  tag syslog.udp
  format /^(?<time>.*?) (?<container_id>.*?) (?<container_name>.*?): (?<message>.*?)$/
  time_format %Y-%m-%dT%H:%M:%S%z
</source>

<match syslog.**>
  index_name <ES_INDEX_NAME>
  type_name <ES_TYPE_NAME>
  type elasticsearch
  host <ES_HOST>
  port <ES_PORT>
  flush_interval 3s
</match>
于 2014-08-14T18:14:37.343 に答える
1

この問題に対処する簡単な方法の 1 つは、/sys/fs/cgroupin_docker_metrics を実行している Docker コンテナーにホストをマウントすることです。https://github.com/bdehamer/docker-libratoを参照してください

于 2014-09-03T00:21:27.150 に答える
1

この回答で詳しく説明したように、OP はまったく認めていません。コンテナ内で実行されているアプリケーションを構成してメッセージを syslog に記録し、ホストの syslog ソケットをコンテナにマウントするのが最善の方法であることがわかりました。

docker run -v /dev/log:/dev/log ...

このアプローチの欠点は、ホスト上の syslog デーモンが再起動された場合、再起動時にデーモンがソケットを再作成するため、コンテナーがソケットを失うことです。

これを修正するには、別のソケットを追加します (rsyslog では、imuxsockモジュールを使用してこれを行うことができます)。既知のディレクトリに追加のソケットを作成し、直接ではなくディレクトリをバインドマウントし/dev/logます。rsyslog が再起動すると、追加のソケットも削除されますが、再起動後に再作成され、ディレクトリ内のアプリケーションで使用できるようになります。

于 2014-08-14T21:52:30.200 に答える
0

Sematext Docker エージェント (オープンソース、github) は、これを行うことができます。td-agent は必要ありません。SDA はログだけでなく、イベントとメトリックも収集します。https://github.com/sematext/sematext-agent-dockerおよび https://sematext.com/dockerを参照してください。

于 2016-08-05T04:34:43.460 に答える