docker容器日志收集方案(方案一 filebeat+本地日志收集)

时间:2023-12-28 21:38:02

filebeat不用多说就是扫描本地磁盘日志文件,读取文件内容然后远程传输。

docker容器日志默认记录方式为 json-file 就是将日志以json格式记录在磁盘上

格式如下:

{
 "log": "2018-11-16 01:24:30.372  INFO [demo1,786a42d3b893168f,786a42d3b893168f,false] 1 --- [hystrix-test1-2] demo1.demo1.TestRest                     : 我收到了其他服务调用\n",
 "stream": "stdout",
 "time": "2018-11-16T01:24:30.37454385Z"
}

docker容器日志收集方案(方案一 filebeat+本地日志收集)

docker日志记录位置默认(centos7)为:

/var/lib/docker/containers

docker容器日志收集方案(方案一 filebeat+本地日志收集)

这个目录下面就是以各个容器命名的文件夹,文件夹下面就是日志如下图:

docker容器日志收集方案(方案一 filebeat+本地日志收集)​​​docker容器日志收集方案(方案一 filebeat+本地日志收集)

那这个时候我们针对每个容器进行参数设置就可以了,设置参数如下示例(这里只给出docker swarm集群的一个语句,单机可以看docker官网):

sudo docker service update --log-driver json-file --log-opt max-size=1m --log-opt max-file=3 pbblyrmsof5t

docker容器日志收集方案(方案一 filebeat+本地日志收集)

--log-driver 为日志驱动类型

--log-opt 为日志驱动参数,可以是多个具体可以查看docker官方文档(https://docs.docker-cn.com/engine/admin/logging/json-file/#usage

 --log-opt max-size=1m  设置日志文件每个大小
 --log-opt max-file=3 设置日志文件最多几个

这样我们就可以设置filebeat进行目录扫描然后传输到ES(elasticsearch)搜索因引擎中。

不过很遗憾有个潜在的问题,这个参数里面没有按时间进行滚动删除日志文件的策略,所以上面的数字要设计好,以免还没有吧日志传输出去就被删掉的情况。

下面是所有配置参数(也可官方查看):

docker容器日志收集方案(方案一 filebeat+本地日志收集)docker容器日志收集方案(方案一 filebeat+本地日志收集)

这个方案有一个麻烦的问题,每个文件夹代表一个容器,如果要区分索引的话就需要设置,或解析日志,多个容器副本在多个宿主机上运行,需要拿到对应的服务名称等关键字段。

如果大锅烩或一起全部收集可能会造成日志混乱,搜索排除条件增多,性能不佳等(ES服务器配置牛逼除外)