日志管理
查看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;'

浙公网安备 33010602011771号