Logstash无法连接启用SSL的Elasticsearch集群问题求助
让我帮你排查下这个Logstash连接Elasticsearch的问题,看了你的配置和日志,发现几个关键问题:
核心问题分析
从Logstash日志里能看到,它一直在尝试用http://localhost:9200连接Elasticsearch,但你的ES已经启用了HTTPS(X-Pack SSL),所以HTTP请求会被直接拒绝,这是最主要的原因。另外还有几处配置细节错误需要修正。
具体修复步骤
1. 修正Elasticsearch输出的协议和地址
你的Logstash output配置里,hosts用的是http://localhost:9200,必须改成HTTPS协议,因为ES只监听SSL连接了:
output { elasticsearch { hosts => ["https://localhost:9200"] # 把http改成https user => elastic password => password manage_template => false ssl => true cacert => '/opt/elasticsearch/ca/ca.crt' # 修正证书路径和文件名 index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}" } }
2. 修正CA证书的路径和文件名
你当前配置的cacert => '/etc/elasticsearch/ca/key.pem'有两个问题:
- 路径和Elasticsearch配置里的
/opt/elasticsearch/ca/不一致,要确保指向正确的CA证书文件位置 - 指向的是key文件(key.pem),应该用CA的证书文件(ca.crt)
3. 调整X-Pack Monitoring配置的位置
xpack.monitoring.enabled: true和xpack.monitoring.elasticsearch.url: https://localhost:9200这两行是Logstash的全局配置,不能放在管道配置文件(input/filter/output所在的.conf)里,需要移到Logstash的主配置文件logstash.yml中,并且补充完整的SSL配置:
xpack.monitoring.enabled: true xpack.monitoring.elasticsearch.url: https://localhost:9200 xpack.monitoring.elasticsearch.user: elastic xpack.monitoring.elasticsearch.password: password xpack.monitoring.elasticsearch.ssl.certificate_authority: /opt/elasticsearch/ca/ca.crt
4. 确保Logstash有权限读取CA证书
执行以下命令给Logstash用户赋予证书文件的读取权限(假设Logstash用户是logstash):
chown logstash:logstash /opt/elasticsearch/ca/ca.crt chmod 644 /opt/elasticsearch/ca/ca.crt
5. 验证配置并重启Logstash
修改完配置后,先用Logstash的配置检查工具验证管道配置:
bin/logstash -f /path/to/your/config.conf --config.test_and_exit
如果没有报错,就重启Logstash服务:
systemctl restart logstash
额外验证
你可以用curl模拟Logstash的请求,验证证书和连接是否正常:
curl --cacert /opt/elasticsearch/ca/ca.crt -u elastic:password https://localhost:9200
如果能返回ES的集群信息,说明证书和连接路径是正确的。
内容的提问来源于stack exchange,提问作者Ashok Reddy

