在 CentOS 上 Filebeat 无法连接(通常是连接 Elasticsearch、Logstash 或 Kafka 失败),原因一般集中在网络、配置、权限、防火墙、证书这几类。下面按常见排查顺序说明。
先明确 Filebeat 配置里连的是哪个目标:
# filebeat.yml 常见输出
output.elasticsearch:
hosts: ["http://192.168.1.10:9200"]
output.logstash:
hosts: ["192.168.1.11:5044"]
output.kafka:
hosts: ["192.168.1.12:9092"]
不同目标,排查方式略有不同,但思路一致。
CentOS 默认有 firewalld 和 SELinux。
检查防火墙
systemctl status firewalld
firewall-cmd --list-all
临时放通端口(示例 9200):
firewall-cmd --add-port=9200/tcp --permanent
firewall-cmd --reload
SELinux(非常常见)
getenforce
如果是 Enforcing,可临时验证:
setenforce 0
如确认是 SELinux 问题,再配置策略,而不是长期关闭。
在 Filebeat 机器上测试:
ping 目标IP
telnet 目标IP 端口
# 或
curl http://目标IP:9200
如果连不上:
在 目标服务器 上检查:
ss -lntp | grep 9200
ss -lntp | grep 5044
如果是:
127.0.0.1:9200
那远程肯定连不上。
常见错误:
检查配置:
filebeat test config
测试输出连接:
filebeat test output
如果 ES 开了 TLS:
output.elasticsearch:
hosts: ["https://es:9200"]
ssl.certificate_authorities: ["/etc/filebeat/ca.crt"]
常见问题:
查看错误日志通常会有:
x509: certificate signed by unknown authority
如果 ES 开了安全:
output.elasticsearch:
username: "filebeat"
password: "xxx"
错误示例:
401 Unauthorized
403 Forbidden
需要:
write 权限filebeat_writer)systemctl status filebeat
journalctl -u filebeat -f
重点看日志中的:
# 1. 看日志
journalctl -u filebeat -n 100
# 2. 测试配置
filebeat test config
filebeat test output
# 3. 测试网络
telnet 目标IP 端口
# 4. 防火墙
firewall-cmd --list-all
# 5. SELinux
getenforce
你可以直接贴出:
filebeat.yml 的 output 部分journalctl -u filebeat 报错日志我可以直接告诉你是哪一步导致连不上。