在 CentOS 上把 Filebeat 的日志输出到 Kafka,核心就是修改 filebeat.yml,把 output.elasticsearch 改成 output.kafka。下面给你一个完整可用的配置示例 + 步骤说明。
# 下载
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.11.3-x86_64.rpm
# 安装
rpm -ivh filebeat-8.11.3-x86_64.rpm
版本可按需调整,建议 Filebeat 和 Kafka 版本兼容即可(Filebeat 对 Kafka 兼容性很好)
vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
- /data/logs/app/*.log
# ========== 输出到 Kafka ==========
output.kafka:
enabled: true
hosts: ["192.168.1.10:9092", "192.168.1.11:9092"]
topic: "filebeat-logs"
version: "2.8.1" # Kafka 版本
required_acks: 1
compression: gzip
max_message_bytes: 1000000
# 可选:不带 ES,关闭 ES 输出
# setup.template.enabled: false
# setup.ilm.enabled: false
| 参数 | 说明 |
|---|---|
hosts |
Kafka broker 地址 |
topic |
Kafka topic(不存在会自动创建,取决于 Kafka 配置) |
version |
Kafka 版本(建议和 Kafka 实际版本一致) |
required_acks |
0 / 1 / -1(all) |
compression |
none / gzip / snappy / lz4 |
max_message_bytes |
单条消息最大大小 |
如果 Kafka 开启:
auto.create.topics.enable=true
Filebeat 会自动创建 topic。
kafka-topics.sh \
--create \
--bootstrap-server localhost:9092 \
--partitions 3 \
--replication-factor 2 \
--topic filebeat-logs
systemctl enable filebeat
systemctl start filebeat
查看状态:
systemctl status filebeat
kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--topic filebeat-logs \
--from-beginning
journalctl -u filebeat -f
# 或
tail -f /var/log/filebeat/filebeat
output.kafka:
topic: '%{[fields.log_topic]}'
filebeat.inputs:
- type: log
paths:
- /var/log/nginx/access.log
fields:
log_topic: nginx-logs
processors:
- decode_json_fields:
fields: ["message"]
target: ""
listeners 配置(不要用 localhost)advertised.listenersoutput.kafka.enabled: true如果你愿意,可以把你的 Kafka 版本 / Filebeat 版本 / 日志路径发我,我可以帮你写一份完全贴合你环境的配置。