轻量级日志收集工具Filebeat

引言

日志对于程序非常重要,日志对于定位问题,数据分析有着十分强大的作用,是程序员和运维人员重要的工具。线上90%以上Bug都是依靠程序日志输出定位到。

日志存储选择

日志数据是一种时序数据,是一种记录当前时刻的状态的数据,只是做数据的追加,不做修改,定期删除,日志数据互相之间没有直接依赖关系,同时数据量巨大,根据这些特点logs要能被快速低成本存储,快速查询分析。

如果采用关系型数据库存储查询,成本会非常高,并且关系数据库对于巨额数据查询分析显得不那么给力,所以如果没有非常特殊的要求,不会选择用关系型数据库。

目前市面上的时序数据库对文本类型的数据处理不够给力,虽然在存储成本和效率方面有优势,但是对于查询尤其对文本类数据进行aggregation数据分析显得乏力。

ES作为一种文档数据库,提供高效低成本存储能力和对于巨量数据的分析查询的优秀能力,当仁不让的成为日志存存储的优秀选择。

日志收集工具选择

Logstatsh提供了logs对es的接口功能,将logs转换成结构数据存储到es中,提供日志收集,日志转换,数据缓存等功能。Logstatsh是用jruby 和java开发的需要预先安装jdk,同时本身的性能一值受诟病,放在客户端做为日志收集传输工具显得太笨重了,于是就出现了Logstash-Forwarder这个项目(Filebeat的前身),采用golang编写,高效轻量级同时也易于扩展。

Filebeat开始的设计目的是作为data shippers完成采集传输功能,es 5.x 把 Ingest Node processor 集成到了es本身,filebeat就可以借助ES完成原先需要logstatsh完成的数据转换功能,独立完成和ES对接。

Filebeat 重要概念

Registry文件

Filebeat会将自己处理日志文件的进度信息写入到registry文件中,以保证filebeat在重启之后能够接着处理未处理过的数据,而无需从头开始。

Ingest node pipeline

elastic-search 5.x之后引入一个名为ingest node的功能(将Logstatsh
的预处理相关功能迁移到了Elasticsearch核心功能中)来通过预定义pipeline实现文档预处理,功能类似于函数式编程中的each对每一个es doc进行统一的处理。

pipeline 是由一个预定义的有序的processors构成,这些processors包括gsub,grok,转换,删除,重命名等功能,并且还有ingest attachment、ingest geo-ip、ingest user-agent等强大的插件功能,利用pipeline可以方便的完成logs 数据的解析(利用grok文本文件到结构化的json格式)、转换、过滤等。

filebeat基本执行流程和模式:

1.input: 在配置路径(或者路径globs)中找到要获取的文件,并启动harvester。
2.harvester:读取文件,向spooler发送事件
3.spooler: 缓冲events(将日志行封装成event),适时的flush events 数据到publisher。
4.publisher: 将数据写入网络接口进行发送,同时通知registrar。
5.registrar: 通过registrar文件记录log文件读取位置。
当重启时,input 通过registrar文件,获取上次读取的文件的位置,重启harvester继续完成相关流程.

Filebeat 配置使用

Filebeat内置预定义modules,如需对Apache mysql 日志监控可以直接插拔使用,同时Filebeat提供方便的内置工具来自定义modules。

在Filebeat discovery 自动发现机制,可以利用服务发现等相关机制方便获取docker k8s logs。

Filebeat支持多种input(log数据来源) Log(日志文件)、Stdin、Container、Kafka、Redis、UDP、Docker、TCP、Syslog 等,同时支持多种output如Kafka Redis ES logstatsh等。

简单情况配置的output到es,如果追求高可用性,可以用 Filebeat -> Kafka(Redis) -> logstatsh 的模型。

Logs 格式化技巧

logs要最终序列化到ES,为了方便es的分析查询需要进行数据格式化,格式化有两种方式,一种是采用白盒方式直接在程序开发中将logs直接定义成json格式,适合程序开发阶段定义使用,优点是可控简单不需要配置复杂的glob,可以避免一些数据编码和解码错误,缺点是对程序有一定的侵入性。
另一种采用glob piplie 方式通过配置解析规则来解析固定格式的logs data, 适合采集第三方软件服务(redis db 等)日志,优缺点和第一种相反。

公众号:王司技术谈
轻量级日志收集工具Filebeat

免费星球号:
轻量级日志收集工具Filebeat