docker logstash_ELK收集Docker容器日志的解决方案介绍

概述

之前一篇文章介绍了如何搭建ELK日志平台,这一篇文章将介绍如何收集Docker的容器日志。

日志

假定我们需要在Docker中运行一个Java微服务应用,必然会产生日志,但是这个日志就有讲究了。

通常情况下,不出意外,Java程序员会使用Slf4j以及Logback来收集日志并在标准输出流里输出日志内容,还会保存成文件(通常情况下,看配置)。

通常后者就是我们经常看到且熟悉的日志文件。

而前者则是悄悄地输出到Docker的容器日志中,通常不做配置的话也会保存在日志文件中。

收集日志

接下来看看,如何收集这些日志,并传送到Logstash呢。

FileBeat

FileBeat是Elastic开发的轻量级日志传送插件,可以将日志传送至各种各样的目标,比如直接传送至Elasticsearch,或者传给Logstash。

FileBeat的安装和配置也是非常简单的,参照官网教程可以轻松搞定。

利用FileBeat收集日志有很多方式:

在宿主机上直接运行FileBeat收集Docker容器日志

dca6598294c579152bdf97ffb89ae765.png

在宿主机上直接运行FileBeat收集Docker容器日志

391492727d9bd742a77ee577946f5fca.png

容器挂在日志目录并写入Java日志,宿主机运行FileBeat收集Java日志

上面两种还可以把FileBeat当作容器运行,毕竟Docker还是很方便的

0e79599f8680217eceb0dcaa9819d555.png

把FileBeat当作容器运行

如果是K8S,还可以一个Pod内配一个Java容器和FileBeat容器,共用存储

Docker LoggingDriver SysLog

这是最简单的方式,直接通过SysLog,将容器日志输出到Logstash,非常方便。

5e66c18b96225a91a22e32f1a7055ee4.png

直接通过SysLog,将容器日志输出到Logstash

通过Docker命令启动容器时指定下面两个参数就可以了

--log-driver syslog--log-opt syslog-address=tcp://logstash-host:port

例如

docker run -d -p 6379:6379 --name redis --log-driver syslog --log-opt syslog-address=tcp://localhost:9601 redis

如果是通过Docker-Compose或者Swarm启动容器,那么在compose文件中添加相应的设置,此外还可以指定Tag来帮助输出容器信息等等。

 redis-service: image: redis ports: - 6379:6379 networks: - redis-network privileged: true logging: driver: syslog options: syslog-address: "tcp://localhost:9601" tag: "{{.Name}}/{{.ID}}" deploy: replicas: 2 update_config: parallelism: 1 delay: 10s restart_policy: condition: on-failure

使用SysLog这种方式有利也有弊端,如果docker命令行启动容器时logstash不可用就会报错,而且docker logs命令无法查看容器日志。

最后

欢迎点赞,收藏,转发,关注以及访问我的个人博客站点www.soaringroad.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值