在 Ubuntu 上配置 Filebeat 使用证书,通常出现在以下两种场景:
下面以 最常见场景:Filebeat 向 Elasticsearch / Logstash 发送数据并使用 TLS 证书 为例说明。
通常需要以下文件:
ca.crt:CA 证书(用于验证服务端)client.crt:Filebeat 客户端证书(可选,双向认证时必需)client.key:客户端私钥示例目录:
/etc/filebeat/certs/
├── ca.crt
├── client.crt
└── client.key
设置权限:
sudo chown -R root:root /etc/filebeat/certs
sudo chmod 600 /etc/filebeat/certs/*
/etc/filebeat/filebeat.ymloutput.elasticsearch:
hosts: ["https://es-node1:9200"]
username: "filebeat_writer"
password: "your_password"
ssl:
enabled: true
certificate_authorities: ["/etc/filebeat/certs/ca.crt"]
certificate: "/etc/filebeat/certs/client.crt"
key: "/etc/filebeat/certs/client.key"
如果 Elasticsearch 只验证服务端(单向 TLS),可以只配置
certificate_authorities
output.logstash:
hosts: ["logs.example.com:5044"]
ssl:
enabled: true
certificate_authorities: ["/etc/filebeat/certs/ca.crt"]
certificate: "/etc/filebeat/certs/client.crt"
key: "/etc/filebeat/certs/client.key"
input {
beats {
port => 5044
ssl => true
ssl_certificate => "/etc/logstash/certs/server.crt"
ssl_key => "/etc/logstash/certs/server.key"
ssl_certificate_authorities => ["/etc/logstash/certs/ca.crt"]
ssl_verify_mode => "force_peer"
}
}
Elasticsearch / Logstash 的主机名必须出现在:
Common Name (CN)Subject Alternative Name (SAN)否则会报:
x509: certificate is valid for xxx, not yyy
证书对时间敏感,确保:
timedatectl status
sudo filebeat test config
sudo filebeat test output
sudo systemctl restart filebeat
sudo systemctl status filebeat
journalctl -u filebeat -f
| 错误 | 原因 |
|---|---|
x509: unknown authority |
没配 ca.crt |
tls: failed to verify certificate |
CN/SAN 不匹配 |
permission denied |
证书权限不对 |
no such file |
路径写错 |
如果你能告诉我:
我可以给你一份 完全可直接用的配置示例。