女主宣言
最近因为云原生日志收集的需要,我们打算使用Filebeat作为容器日志收集工具,并对其进行二次开发,因此笔者将谈谈 Filebeat 收集日志的那些事儿。本文不涉及过具体的源码分析,希望通过阅读您可以了解filebeat的基本使用方法和原理,姑且算是filebeat的入门吧。
PS:丰富的一线技术、多元化的表现形式,尽在“360云计算”,点关注哦!
1
前言
开源日志收集组件众多,之所以选择Filebeat,主要基于以下几点:
功能上能满足我们的需求:收集磁盘日志文件,发送到Kafka集群;支持多行收集和自定义字段等;
性能上相比运行于jvm上的logstash和flume优势明显;
Filebeat基于golang 技术栈,二次开发对于我们来说有一定的技术积累;
部署方便,没有第三方依赖;
2
Filebeat 能做什么
简单来说Filebeat就是数据的搬运工,只不过除了搬运还可以对数据作一些深加工,为业务增加一些附加值。
Filebeat可以从多种不同的上游input 中接受需要收集的数据,其中我们最常用的就是 log input,即从日志中收集数据;
Filebeat对收集来的数据进行加工,比如:多行合并,增加业务自定义字段,json等格式的encode;
Filebeat将加工好的数据发送到被称为output的下游,其中我们最常用的就是 Elasticsearch 和 Kafka;
Filebeat具有ACK反馈确认机制,即成功发送到output后,会将当前进度反馈给input, 这样在进程重启后可以断点续传;
Filebeat在发送output失败后,会启动retry机制,和上一次ACK反馈确认机制一起,保证了每次消息至少发送一次的语义;
Filebeat在发送output时,由于网络等原因发生阻塞,则在input上游端会减慢收集,自适应匹配下游output的状态。
一图以蔽之。
3
Filebeat 背后的“老大”
说到Filebeat,它其实只是 beats 家族众多成员中的一个。除了Filebea