在 CentOS 上把 Filebeat 的日志输出到 Kafka,核心就是修改 filebeat.yml,把 output.elasticsearch 换成 output.kafka。下面是一个完整、可直接用的配置示例和步骤说明。
filebeat version
如果未安装:
sudo yum install filebeat -y
确保 Kafka 可访问,例如:
kafka1:9092
kafka2:9092
kafka3:9092
sudo vi /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
- /opt/app/logs/*.log
# ===================== Kafka Output =====================
output.kafka:
hosts: ["kafka1:9092", "kafka2:9092", "kafka3:9092"]
topic: "filebeat-logs"
partition.round_robin:
reachable_only: true
required_acks: 1
compression: gzip
max_message_bytes: 1048576
# ===================== 可选 =====================
logging.level: info
logging.to_files: true
| 参数 | 说明 |
|---|---|
hosts |
Kafka broker 地址 |
topic |
发送到哪个 topic(可动态) |
partition.round_robin |
轮询分区 |
required_acks |
1 = leader 确认 |
compression |
压缩方式(gzip / snappy) |
max_message_bytes |
单条消息最大 |
fields.log_topic 发送到不同 topicfilebeat.inputs:
- type: log
paths: ["/var/log/app.log"]
fields:
log_topic: app-log
fields_under_root: false
output.kafka:
hosts: ["kafka1:9092"]
topic: '%{[fields.log_topic]}'
filebeat test config
filebeat test output
sudo systemctl restart filebeat
sudo systemctl enable filebeat
kafka-console-consumer.sh \
--bootstrap-server kafka1:9092 \
--topic filebeat-logs \
--from-beginning
如果看到 JSON 日志,说明成功 ✅
listeners / advertised.listenersoutput.elasticsearch 和 output.kafkaFilebeat 默认 UTF-8,Kafka 消费者也需 UTF-8
Filebeat → Kafka → Logstash / Flink → ES / ClickHouse
如果你愿意,我可以帮你:
直接告诉我你的 Kafka 版本和日志来源即可。