Docker日志管理工具Fluentd及elasticsearch插件
随着Docker容器广泛应用,对大规模运行的容器集群来说,日志不能集中管理是一件很痛苦的事情。不能合理的收集,管理检索应用日志,在应用发生了故障的时候将无法很好的追溯问题发生的原因。
通常我们会将docker日志挂载到宿主机目录,但是查看时十分不方便。如果用flunted统一管理日志,可以方便做统一管理。基于Elasticsearch+Fluentd+Kibana,可以方便的搭建日志分析平台,通过Kibana面板,可以在浏览器上方便查看。
启动Fluentd
1 | docker run -d \ |
将log挂载在宿主机的/data/logs/fluented
, 注意对应的权限
此时会在宿主机目录下生成data.<fluentd容器id>.log,所有收集到的日志文件将存储至此。
测试
启动一个测试容器,写入日志。这里我们使用nginx服务。
1 | # docker run -d \ |
1 | -log-driver: 配置log驱动 |
配置好之后访问nginx页面http://localhost:8080/
,查看日志文件,我这次是data.b597c850ce7a3ce7d444766b9d2450540.log
。
1 | tail -f data.b597c850ce7a3ce7d444766b9d2450540.log |
每次刷新会出现日志。
1 | nginx-test {"container_id":"c7a79971103e4ca5f793ec83b7da1e98648e65765cd82a8c3c1a3f4f4e5584db","container_name":"/nginx-test","source":"stdout","log":"172.17.0.1 - - [20/Nov/2019:14:51:28 +0000] \"GET / HTTP/1.1\" 304 0 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:70.0) Gecko/20100101 Firefox/70.0\" \"-\""} |
注意
使用了fluentd之后,将无法使用docker logs 查看;
在配置fluentd之前创建的容器日志不会写入到Fluentd,如果想要存储进去需要重建容器;
全局配置fluentd之后,如果fluentd服务异常,将无法启动容器;
1
Error response from daemon: Cannot restart container c7a79971103e: failed to initialize logging driver: dial tcp 127.0.0.1:24224: connect: connection refused
错误
[warn]: 'type' is deprecated parameter name. use '@type' instead.
提示配置文件错误
type forward
配置项需要修改为@type forward
配置@type elasticsearch
时错误,需要安装插件
1 | config error file="/fluentd/etc/fluent.conf" error_class=Fluent::ConfigError error="Unknown output plugin 'elasticsearch'. Run 'gem search -rd fluent-plugin' to find plugins" |
制作含fluent-plugin-elasticsearch插件的镜像
1 | #编辑Dockerfile |
参考文档https://github.com/uken/fluent-plugin-elasticsearch
参考文档
https://www.fluentd.org/guides/recipes/docker-logging
安装文档:https://docs.fluentd.org/v1.0/articles/quickstart#step-1:-installing-fluentd
Docker配置Fluentd:https://docs.docker.com/config/containers/logging/fluentd/
fluent plugin elasticsearch: https://github.com/uken/fluent-plugin-elasticsearch