参考地址:https://www.cnblogs.com/cjsblog/p/9459781.html
通过filebeat来实现日志的收集。日志采集的工具有fluentd,flume,logstash,beats。使用filebeat的原因。因为logstash是jvm运行,资源消耗比较大,启动一个logstash需要消耗500M左右的内存,而filebeat只需要10多M内存资源。常用的ELK日志采集方案中,大部分的做法就是将所有节点的日志内容通过filebeat送到kafka消息队列,然后使用logstash集群读取消息队列内容,根据配置文件进行过滤。然后将过滤之后的文件输送到elasticsearch中,通过kibana去展示。
参考:https://www.cnblogs.com/wangzhuxing/p/9678578.html
linux下载解压后的filebeat和logstash后,进行配置
配置filebeat.yml的基本配置如下:
- type: log
enabled: true
paths:
- /data/public/filebeat/testDataLogs/logstash-tutorial.log
output.logstash:
hosts: ["localhost:5044"]
默认的output.logstash是elasticsearch,切换到测试输出到logstash
logstash的配置,在当前目录新增一个first-pipeline.conf文件,内容如下:
input {
beats {
port => "5044"
}
}
#filter {
# grok {
# match => { "message" => "%{COMBINEDAPACHELOG}"}
# }
#}
output {
stdout { codec => rubydebug }
}
input 指日志数据传输到logstash中,beats 为filebeat方式,port 定义监听端口
output 输出配置,如上配置是打印在控制台
先启动Logstash
bin/logstash -f first-pipeline.conf --config.test_and_exit
--config.test_and_exit选项的意思是解析配置文件并报告任何错误
bin/logstash -f first-pipeline.conf --config.reload.automatic
--config.reload.automatic选项的意思是启用自动配置加载,以至于每次你修改完配置文件以后无需停止然后重启Logstash
再启动filebeat
./filebeat -e -c filebeat.yml -d"publish"
此时logstash 控制台会输出日志
知识点:
filebeat目录的data/registry 是filebeat感知文件有没有被收集过,通过registry记录的状态。每条event发送到output后都要等待ack.只有收到ack了才会认为数据发送成功。然后状态记录到registry(如果数据采集阶段没有丢失,后面的传输可以保证不丢失,因为有ack的确认和重传机制)
Filebeat处理文件时会维护一个状态,这个状态里面记录了收集过的每一个带绝对路径的文件名,文件的inode值,文件内容上次收集的位置(即offset)以及其它一些信息。这个状态维护在内存里面,过一段时间会刷新到磁盘上,默认刷到registry这个文件里面。程序如果重启,就从这个文件重新加载,恢复之前的状态。可以认为这个文件就是Filebeat能正常工作的核心
参考:http://niyanchun.com/filebeat-truncate-bug.html