Docker 容器日志管理Fluentd

随着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,所有收集到的日志文件将存储至此。

Docker 容器日志管理Fluentd

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页面,每次刷新会出现如下日志

Docker 容器日志管理Fluentd

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

Docker 容器日志管理Fluentd

Docker 容器日志管理Fluentd

参考文档:

1、https://www.fluentd.org/guides/recipes/docker-logging
2、安装文档:https://docs.fluentd.org/v1.0/articles/quickstart#step-1:-installing-fluentd
3、Docker配置Fluentd:https://docs.docker.com/config/containers/logging/fluentd/

相关推荐