从日志中收集数据,集中到离线的数据仓库提供给业务方html
离线日志中心化场景,入库频次1次/天,每日生成日志(即filebeat须要收集的数据)量级为?,kafka接收到的数据量级为?,从kafka读取数据的程序吞吐量为?并发
需求比较明确,就是要搭建一条日志中心化(收集)链路,只须要知足日频次的分析需求,因此场景能够是实时也能够是离线ide
目前业界对于日志中心化的解决方案通常是elk或者flume+kafka这样的实时链路。考虑filebeat的轻量级和具体的业务场景,采用filebeat -> kafka测试
装以前先看了官方refrence的Getting Started和how filebeat works以及kafka output,大体了解一下filebeat的原理、使用方法和filebeat output to kafka的在我组业务场景下的可行性。
按照Getting Started的步骤下载包并配置了filebeat.yml,因为有对不一样的log输出到不一样的kafka topic的需求,因此又在网上找了一下output to multiple kafka topic的配置,最终的配置文件以下(是错滴):ui
filebeat.prospectors: - input_type: log paths: - /log/1.log* include_lines: [‘\[LOG\].+?_MATCH'] fields: topic: topic_1 - input_type: log paths: - /log/2.log.* include_lines: [‘\[LOG\].+?_MATCH'] fields: topic: topic_2 output.kafka: hosts: [“broker1:9092", “broker2:9092", “broker3:9092"] topic: ‘%{[fields.topic]}' required_acks: 1
执行./filebeat启动后遇到了一些问题日志
Q1:执行启动filebeat的命令无日志
A:加上-e选项(意思是把stderr的内容重定向到stdout),或者在filebeat.yml中配置logging选项)
Q2:从filebeat执行后的console打印来看,配置的log文件时而能够正常注册到harvester并收集到spooler发送到kafka,时而一点反应都🈚️。
A:一开始考虑到filebeat会在registry文件中记录注册到prospector的文件的status,因此在reference里面翻翻拣拣找到了两个配置项(clean_xx),然而并无效果【多是我配错了】;又试着把文件用mv命令重命名了一下,但仍是不能稳定地读到我配置的两个input path(只能读到其中一个)。
再次翻了一下官方refrence中关于propectors的部分,其中关于fields的解释是“在最终输出的文档中添加一个fields字段”,冥思苦想这个配置:code
再次在网上搜了一下output to multiple kafka topic,找到了document_vtype这个配置项,在官方refrence里面能够搜索到,含义是“The event type to use for published lines read by harvesters. ”(filebeat里面的event指的是harvester从log文件中收集并发送新内容给spooler,见https://www.elastic.co/guide/... 第二段第三行),因此它的值应该能够用在output上。在prospector的官方refrence也能够看到关于document_type的示例。参考refrence + 这篇blog修改后的配置文件以下:htm
filebeat.prospectors: - input_type: log paths: - /log/1.log* include_lines: [‘\[LOG\].+?_MATCH'] document_type: topic1 - input_type: log paths: - /log/2.log.* include_lines: [‘\[LOG\].+?_MATCH'] document_type: topic2 output.kafka: hosts: [“broker1:9092", “broker2:9092", “broker3:9092"] topic: ‘%{[type]}’ required_acks: 1
删掉fielbeats安装目录的data目录下的registry文件,再执行./filebeat -e -c filebeat.yml能够正常收集blog
关于为何要删掉registry文件,能够参考 how filebeat works。这里的缘由是我拿来测试的文件一直是同一个,懒得改它的名字。和registry文件中记录的status相关的prospector配置项还有两个clean_xx,由于目前尚未找到它的正确配置方法,因此就先直接删掉registry文件让filebeat本身从新生成。