上篇博客介绍关于elk的原理和搭建:elk日志分析系统(一)
但这种架构只适合数据量不大且可靠性不强的业务使用,当大并发情况下,由于日志传输峰值比较大,没有消息队列来做缓冲,就会导致 Elasticsearch 集群丢失数,所以需要对架构做进一步的扩展,引入kafka集群。
架构图
filebeat收集日志数据投递到 Kafka 集群中,这样当遇到 Logstash 接收数据的能力超过 Elasticsearch 集群处理能力的时候,就可以通过队列就能起到削峰填谷的作用, Elasticsearch 集群就不存在丢失数据的问题。
环境部署
版本说明:
Kafka:kafka_2.12-1.1.0
Zookeeper:zookeeper-3.4.12
ELK组件版本为6.0.0
Kafka集群环境的搭建可以参考:
zookeeper学习与部署
kafka学习和部署
1.配置filebeat输出到kafka集群
修改filebeat配置文件,配置输出到kafka
output.kafka:
enabled: true
hosts: ["192.168.10.1:9092", "192.168.10.2:9092", "192.168.10.3:9092"]
topic: 'test-log'
重启filebeat服务,并尝试向/tmp/test.log
文件中追加一些测试数据,在kafka集群任意节点查看主题,并消费这些数据
2.Logstsh从kafka读取数据
修改logstsh配置文件
input {
kafka {
bootstrap_servers => "192.168.10.1:9092,192.168.10.2:9092,192.168.10.3:9092"
topics => "test-log"
consumer_threads => 2
}
}
重启logstash
配置完成,可以访问kibana测试一下。