@student2018
2019-01-17T06:10:18.000000Z
字数 1905
阅读 1226
ELK
filebeat是基于go语言开发的项目,基于logstash-forward项目。
可以监控捕获日志文件的内容直接发送到logstash和ES,kafka等组件。
也可以直接输出到console用于测试,具体可以参考配置文件内容。
curl -L -O https://github.com/student2028/docker/raw/master/filebeat.yml
curl -L -O https://github.com/student2028/docker/raw/master/filebeat
chmod +x filebeat
chmod 644 filebeat.yml
更多的配置信息可以参考
https://github.com/student2028/docker/blob/master/filebeat.reference.yml
开启filebeat,以下任一方法均可。
./filebeat #默认使用filebeat.yml 配置文件
#如果需要使用其他配置文件可以
./filebeat -c path2conf.yml
./filebeat -e #在console输出日志信息
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
#include_lines: ['error']
# multiline:
# pattern: '^[A-Za-z]{3}\s+\d{2}'
# negate: true
# match: after
fields_under_root: true
output.kafka:
hosts: ["192.168.152.1:9092"]
topic: 'filebeat_test'
version: 0.10.1.0
processors:
- rename:
fields:
- from: "agent.hostname"
to: "@hostname"
- drop_fields:
fields: ["log","agent","service","ecs","event","input","host"]
示例配置文件的含义是:
监控/var/log/下的后缀名为log的文件内容输出到kafka.
我们需要改动的点就是paths,即监控文件的路径,支持通配符。如 /var/log/*.log。
可以支持多行的事件,示例中是用于处理linux系统日志信息的,
日志格式前面是日期 Mon day的格式,所以写了这样的正则表达式。
表示的意思是如果不按正则表达式开头的行追加到前面的内容后面。
这个多行的配置也比较灵活,可以根据日志的特点进行调整。
filebeat的工作原理
filebeat保证捕获的数据至少一次发送到配置的输出组件。
因为它在注册表文件中保存了事件发送的状态。
filebeat启动后,会在启动目录创建两个目录,data,logs.
分别用于保存注册表文件和日志信息。
注册表文件内容示例如下:
[{"source":"/var/log/test.log","offset":12775,"timestamp":"2019-01-17T11:14:40.275202146+08:00","ttl":-1,"type":"log","meta":null,"FileStateOS":{"inode":70886757,"device":64768}}]
如果输出端如kafka不可用,为了保证至少一次可达的特性,这个offset的值就不会更新,直到发送成功。
但如果没有得到反馈的时候filebeat失败了,则再次重启的时候,可能会有数据再次被发送,这样会造成数据的重复。