随着Docker容器广泛应用,,大规模运行的容器集群来说,日志不能集中管理是一件很痛苦的事情。不能合理的收集,管理检索应用日志,在应用发生了故障的时候将无法很好的追溯问题发生的原因。本文主要介绍Docker配置Fluentd进行日志管理
1、快速启动Fluentd
# docker run -d -p 24224:24224 -p 24224:24224/udp -v /data:/fluentd/log fluent/fluentd
此时会在宿主机/data目录下生成data.<fluentd容器id>.log,所有收集到的日志文件将存储至此。
2、启动一个测试容器查看日志是否存储到fluentd
# docker run -d --log-driver fluentd --log-opt fluentd-address=localhost:24224 --log-opt tag="nginx-test" --log-opt fluentd-async-connect --name nginx-test -p 8080:80 nginx
--log-driver: 配置log驱动
--log-opt: 配置log相关的参数
fluentd-address: fluentd服务地址
fluentd-async-connect:fluentd-docker异步设置,避免fluentd挂掉之后导致Docker容器也挂了
配置好之后访问nginx页面,每次刷新会出现如下日志
2018-05-03T07:21:55+00:00 nginx-test {
"container_name": "/nginx-test",
"source": "stdout",
"log": "172.96.247.193 - - [03/May/2018:07:21:55 +0000] \"GET / HTTP/1.1\" 304 0 \"-\" \"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36\" \"-\"",
"container_id": "0cd8d7d68fe233238679b31327d53ad0fffe5b419f1847ad9140db063dded7f3"
}
3、Docker全局日志配置
# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://zcg96r7h.mirror.aliyuncs.com"],
"log-driver": "fluentd",
"log-opts": {
"fluentd-address": "127.0.0.1:24224"
}
}
#注意:
a、使用了fluentd之后,将无法使用docker logs 查看;
b、在配置fluentd之前创建的容器日志不会写入到Fluentd,如果想要存储进去需要重建容器;
c、全局配置fluentd之后,如果fluentd服务异常,将无法启动容器;
# docker run --rm nginx
docker: Error response from daemon: failed to initialize logging driver: dial tcp 127.0.0.1:24224: getsockopt: connection refused.
再启动一个测试容器,可以查看到日志同样存储到Fluentd
参考文档:
1、https://www.fluentd.org/guides/recipes/docker-logging
2、安装文档:
3、Docker配置Fluentd:https://docs.docker.com/config/containers/logging/fluentd/