日志管理

查看Docker的logging driver:docker info | grep 'Logging driver'  //默认是json-file

默认的json-file在host中的路径:/var/lib/docker/containers/<container ID>/<container ID>-json.log

logging driver:

none:disable日志功能

syslog和journald:Linux上的日志管理服务

awslogs、splunk、gcplogs:第三方日志托管服务

gelf、fluentd:两种开源的日志管理方案

设置Docker默认的driver:ExecStart=/usr/bin/dockerd -H fd:// --log-driver=syslog --log-opt ...

ELK

Logstash:从各个Docker容器中提取日志,将日志转发到Elasticsearch进行索引和存储

Elasticsearch:全文搜索

Kibana:分析和可视化

搭建ELK:docker run -it -p 5601:5601 -p 9200:9200 -p 5044:5044 --name elk sebp/elk  //5601 Kibana 9200 Elasticsearch 5044 Logstash

安装Filebeat监控日志文件:

curl -L -0 https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.4.0-amd64.deb

sudo dpkg -i filebeat-5.4.0-amd64.deb

配置Filebeat:/etc/filebeat/filebeat.yml

- input_type: log

paths:

  - /var/lib/docker/containers/*/*.log  //所有容器的日志文件

  - /var/log/syslog  //Host的syslog

output.elasticsearch:

  hosts: ["localhost:9200"]  //直接发送给Elasticsearch

启动Filebeat:systemctl start filebeat.service

在Kibana中配置index pattern:filebeat-*,Time-field选择@timestamp,Create,Discover

模拟日志输出:docker run busybox sh -c 'while true; do echo "This is a log message from container busybox!"; sleep 10; done;'

Fluentd

日志收集

安装:docker run -d -p 24224:24224 -p 24224:24224/udp -v /data:/fluentd/log fluent/fluentd

重新配置Filebeat:/etc/filebeat/filebeat.yml

- input_type: log

paths:

  - /data/*.log  //所有Fluentd收集到的日志文件

重新启动Filebeat:systemctl restart filebeat.service

启动测试容器:

docker run -d \

  --log-driver=fluentd \

  --log-opt fluend-address=localhost:24224 \

  --log-opt tag="log-test-container-A" \

  busybox sh -c 'while true; do echo "This is a log message from container A"; sleep 10; done;'

docker run -d \

  --log-driver=fluentd \

  --log-opt fluentd-address=localhost:24224 \

  --log-opt tag="log-test-container-B" \

  busybox sh -c 'while true; do echo "This is a log message from container B"; sleep 10; done;'

Graylog

Graylog接收来自设备和应用的日志,并提供Web访问接口

Elasticsearch索引和存储Graylog接收到的日志

MongoDB保存Graylog配置

启动mongodb:docker run --name graylog-mongo -d mongo:3

启动Elasticsearch:docker run --name graylog-elasticsearch -d elasticsearch:2 elasticsearch -Des.cluster.name="graylog"

启动Graylog:

docker run --link graylog-mongo:mongo \

  --link graylog-elasticsearch:elasticsearch \

  -p 9000:9000 \  //graylog的Web服务端口

  -p 12201:12201/udp \  //graylog接收日志数据的UDP端口

  -e GRAYLOG_WEB_ENDPOINT_URI="http://192.168.56.101:9000/api" \  //graylog的Web访问URI,需要使用Host IP

  -e GRAYLOG_PASSWORD_SECRET=somepasswordpepper \

  -e GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 \  //graylog管理员用户密码的哈希,生成方式:echo -n password | shasum -a 256

  -d graylog2/server

Web访问地址:http://<Host IP>:9000 用户名/密码admin/admin

配置Inputs:GELF UDP

启动容器:

docker run -d \

  --log-driver=gelf \

  --log-opt gelf-address=udp://localhost:12201 \

  --log-opt tag="log-test-container-A" \

  busybox sh -c 'while true; do echo "This is a log message from container A"; sleep 10; done;'

docker run -d \

  --log-driver=gelf \

  --log-opt gelf-address=udp://localhost:12201 \

  --log-opt tag="log-test-container-B" \

  busybox sh -c 'while true; do echo "This is a log message from container B"; sleep 10; done;'

 

posted @ 2018-04-18 17:45  AaronCnblogs  阅读(434)  评论(0)    收藏  举报