测试logstash:docker run -it mylogstash:0.1.0 logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'
===========================
Docker处理日志的方法是通过docker engine捕捉每一个容器进程的STDOUT和STDERR,通过为contrainer制定不同log driver 来实现容器日志的收集,
缺省json-file log driver是将容器的STDOUT/STDERR 输出保存在磁盘上,然后用户就能使用docker logs
https://www.cnrancher.com/collect-container-log/
============
纵览当前容器日志收集的场景,无非就是两种方式:一是直接采集Docker标准输出,容器内的服务将日志信息写到标准输出,这样通过Docker的log driver可以发送到相应的收集程序中;二是延续传统的日志写入方式,容器内的服务将日志直接写到普通文件中,通过Docker volume将日志文件映射到Host上,日志采集程序就可以收集它。
第一种方式足够简单,直接配置相关的Log Driver就可以,但是这种方式也有些劣势:
- 当主机的容器密度比较高的时候,对Docker Engine的压力比较大,毕竟容器标准输出都要通过Docker Engine来处理。
- 尽管原则上,我们希望遵循一容器部署一个服务的原则,但是有时候特殊情况不可避免容器内有多个业务服务,这时候很难做到所有服务都向标准输出写日志,这就需要用到前面所说的第二种场景模式。
- 虽然我们可以先选择很多种Log Driver,但是有些Log Driver会破坏Docker原生的体验,比如docker logs无法直接看到容器日志。
https://www.cnrancher.com/rancher-logging/
===================
1)日志客户端(Logstash,Fluentd, Logtail)横评
https://yq.aliyun.com/articles/3228?spm=5176.team4.teamshow1.37.faH93Z
2)Logstash 与它的五种替代方案(Filebeat、Fluentd、rsyslog、syslog-ng 以及 Logagent)的比较
3)Fluentd是很通用的日志采集程序,拥有优异的性能,相对Logstash来说同等压力下,其内存消耗要少很多。Logging Helper是可以理解微Fluentd的助手,它可以识别容器内的日志卷文件,通知Fluentd进行采集
通过Fluentd我们可以对接很多第三方日志存储体系,但是Fluentd自身并不能完成日志采集的所有场景,所以非常需要Logging Helper的帮助。通过Logging Helper可以定制出一些额外采集规则,比如可以过滤某些容器日志等等
https://www.cnrancher.com/rancher-logging/
=============
https://yq.aliyun.com/articles/3228
ogstash支持所有主流日志类型,插件支持最丰富,可以灵活DIY,但性能较差,JVM容易导致内存使用量高。
fluentd支持所有主流日志类型,插件支持较多,性能表现较好。
logtail占用机器cpu、内存资源最少,结合阿里云日志服务的E2E体验良好,但目前对特定日志类型解析的支持较弱,后续需要把这一块补起来