将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を通して確認できます
コンテナ自体のログは取れませんので,別途,稼働状況を確認する仕組みが必要です

docker-es.jpg

容器启动

预先准备

    • 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)

undefined

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]に戻ると,データが集まってきていることを確認できます

elastic0.jpg

请以简单的中国汉语表达:参考

    dockerコンテナのログをfluentdに集める方法
广告
将在 10 秒后关闭
bannerAds