在 CentOS 上让 Filebeat 把日志发送到 Kafka,一般步骤如下(以常见 CentOS 7/8 + Filebeat 7.x/8.x 为例):
# 以 8.13.0 为例,按版本替换
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.13.0-x86_64.rpm
rpm -ivh filebeat-8.13.0-x86_64.rpm
或启用官方 YUM 源:
cat > /etc/yum.repos.d/elastic.repo <<EOF
[elastic]
name=Elastic repository
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
EOF
yum install filebeat -y
编辑配置文件:
vi /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
- /data/logs/app/*.log
# 可选:多行日志(如 Java 堆栈)
# multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
# multiline.negate: true
# multiline.match: after
output.kafka:
hosts: ["192.168.1.10:9092", "192.168.1.11:9092"]
topic: "filebeat-logs"
partition.round_robin:
reachable_only: false
required_acks: 1
compression: gzip
max_message_bytes: 1000000
logging.level: info
hosts:Kafka broker 地址topic:日志写入的 topic(可静态或动态)required_acks:
0:不等确认1:leader 确认-1:全部副本确认compression:gzip / snappy / lz4output.kafka:
hosts: ["kafka:9092"]
topic: '%{[fields.log_type]}'
codec.format:
string: '%{[message]}'
并在 input 中加:
fields:
log_type: app_log
systemctl enable filebeat
systemctl start filebeat
查看状态:
systemctl status filebeat
journalctl -u filebeat -f
kafka-topics.sh --create \
--topic filebeat-logs \
--bootstrap-server localhost:9092 \
--partitions 3 \
--replication-factor 1
kafka-console-consumer.sh \
--topic filebeat-logs \
--bootstrap-server localhost:9092 \
--from-beginning
firewall-cmd --add-port=9092/tcp --permanentlisteners 和 advertised.listenersfilebeat test config
filebeat test output
在 server.properties 中:
auto.create.topics.enable=true
如果你愿意,可以告诉我:
我可以给你一份可直接用的生产级配置。