将docker容器的日志收集和分析方法,通过elasticsearch进行
总结来说
这是关于如何将Docker容器的日志收集到fluentd的续篇。您也可以从这篇文章开始阅读。
-
- Docker logdriverの機能を利用して,コンテナのログをelasticsearchに蓄積する仕組みを作ります
https://github.com/myoshimi/es-docker-logging にdocker-compose.ymlがあります
dockerコンテナのログをfluentd形式で送信します(logdriverの設定)
fluentdコンテナでログを受け取り,elasticsearchに蓄積します
kibanaで蓄積された情報を可視化,解析できます
容器配置示例
-
- 下記のLogsパッケージ部分を作ります.
3つのコンテナから成ります
データ転送サーバ Fluentd (fluentd)
全文検索エンジン Elasticsearch (es)
可視化サーバ Kibana
同じホストで稼働させたDockerコンテナのログを,Fluentdで受けて,Elasticsearchに蓄積します
蓄積されたデータは,(管理者が)Kibanaを通して確認できます
コンテナ自体のログは取れませんので,別途,稼働状況を確認する仕組みが必要です
容器启动
预先准备
-
- elasticsearchコンテナを稼働させるために, vm.max_map_countを変更する必要があるかもしれません
vm.max_map_count = 262144 に設定してください
$ sudo vi /etc/sysctl.conf
#以下の行を追加
vm.max_map_count = 262144
# 設定変更を反映
$ sudo sysctl --system
使用docker-compose.yml文件启动容器
git cloneしてdocker-compose.ymlをビルドして立ち上げます
前掲の図の, Logsのコンテナが立ち上がります
受信用fluentdコンテナにuken/fluent-plugin-elasticsearchプラグインをインストールする必要があるので, docker-compose build を実行します
$ git clone https://github.com/myoshimi/es-docker-logging
$ cd es-docker-logging
$ docker-compose build
...<snip>....
Building fluentd
Step 1/2 : FROM fluent/fluentd:v1.3.2
---> 9406ff63f205
Step 2/2 : RUN gem install fluent-plugin-elasticsearch
---> Running in c75df6c30c9a
Successfully installed excon-0.62.0
...<snip>....
Successfully tagged es-docker-logging_fluentd:latest
$ docker-compose up -d
以下是容器的三个选项
es:Elasticsearch
-
- oss版コンテナを使用しています
-
- 9200/tcp, 9300/tcpがexposeされています
コンテナのログ確認,集約だけであれば,kibana経由で見て,直接見ることはないのでので,portsにはしていません
${PWD}/esが,elasticsearchのデータの不揮発ボリュームとしてマウントされます
注意: es/{data,config}のディレクトリは,uid=1000, gid=1000である必要があります
不安な場合は sudo chown -R 1000:1000 es してください
Kibana(发音:Kibana)
Fluentd:Fluentd
dockerコンテナのログをfluentdに集める方法のfluentdコンテナとほぼ同じです
ローカルディレクトリの log ディレクトリが不揮発ボリュームとして使用されます
24224/tcp, 24224/udpがportsされており,別のコンテナからのfluentd出力を受け付けます
読み込むfluent.confのみ,違いがあります(次節で説明)
流畅.conf的配置
-
- 受け付けた docker.*** タグでマッチしたログを, ローカルディレクトリの log に蓄積し,その後,elasticsearchへ転送しています
実行ログは, es-docker-logging/log にファイルとして保存されます
同じログが,elasticsearchに投入されます
<match docker.**>
@type copy
<store>
@type file
@id output_docker1
path /fluentd/log/docker.*.log
symlink_path /fluentd/log/docker.log
append true
time_slice_format %Y%m%d
time_slice_wait 1m
time_format %Y%m%dT%H%M%S%z
</store>
<store>
@type elasticsearch
host es
port 9200
logstash_format true
</store>
</match>
发送日志的一方
-
- dockerコンテナのログをfluentdに集める方法の送信側コンテナの設定と同じ方法で,ログがelasticsearchに蓄積されます
- Docker runでnginxを立ち上げ,ログを受信側のfluentdに流してesに溜める例
docker run -d \
--log-driver=fluentd \
--log-opt fluentd-address=localhost:24224 \
--log-opt tag=docker.{{.Name}} \
nginx:latest
确认动作
-
- コンテナのログがfluentd経由でesに蓄積された情報を,kibanaで確認
http://:5601/で確認できます
kibanaの[Discover]をクリックし,[Index Pattern]としてlogstash-*を入力
[Time filter field]に@timestampを選択
[Create Index Pattern]をクリック
[Discover]に戻ると,データが集まってきていることを確認できます
请以简单的中国汉语表达:参考
- dockerコンテナのログをfluentdに集める方法