公司原本架构是filebeat–>logstash–>elasticsearch的,然后通过查询es获取数据。
但有客户原本环境存在filebeat->kafka的架构,因此,决定由filebeat统一将所需日志推到kafka,再由kafka推到logstash,这样不会影响客户原来的架构,也不会因为要满足两个推送而运行两个filebeat导致负载增加,因此,就对filebeat->kafka->logstash架构进行了调研,废话不多说,直接上配置。
filebeat:
- type: log
paths:
- /*.log
encoding: utf-8
fields:
type: imap
...#日志采集的配置
output.kafka:
hosts: ["ip:9092"] #kafka的ip:9092端口
topic: test #由kafka创建的topic
required_acks: 1
改完直接重启即可,如果要推送到多个topic,加个判断,
output.kafka:
hosts: ["ip:9092"]
topic: "test"
topics:
- topic : "test1"
when.equals :
fields.type: "imap" #即当type为imap的时候推到test1的topic
required_acks: 1
这时候的调试过程中,可以在kafka创建对应topic的一个消费者,看看是否能收到推送过来的日志,有推送过来的日志代表filebeat->kafka这个流程通了。
剩下的就是由kafka推送到logstash,上logstash.conf:
input{
kafka{
bootstrap_servers=>"ip:9092" #依然是kafka的ip和端口
topics=>["test"] #同filebeat推送出来的topic一致即可完成接收
group_id=>"logstash_kafka_test"
codec => "json"
}
}
调试的时候可以把output设置成直接输出,可以看数据是否有推送过来:
output {
stdout {
codec => rubydebug {
metadata => true
}
}
}
要看下是否有定好的日志格式输出,有则表示调通,不通的话要检查一下三方是否有报错,重新调试。