配置Filebeat到Graylog的TLS连接(遇连接重置问题)
Graylog + Filebeat TLS配置连接重置问题解决
问题现象
Docker部署的Graylog原本可正常接收另一台机器Filebeat的日志,启用TLS后出现连接重置错误:
{"log.level":"error","@timestamp":"2023-01-04T15:08:57.746+0100","log.logger":"publisher_pipeline_output","log.origin":{"file.name":"pipeline/client_worker.go","file.line":150},"message":"Failed to connect to backoff(async(tcp://<graylog_ip>:5044)): read tcp 192.168.178.99:54372-><graylog_ip>:5044: read: connection reset by peer","service.name":"filebeat","ecs.version":"1.6.0"}
未启用TLS时连接正常。
配置回顾
- 证书生成命令:
openssl genrsa -out filebeat.key 2048 openssl req -new -x509 -key filebeat.key -out filebeat.crt -days 3650
- Graylog Beats输入配置(启用TLS):
bind_address: 0.0.0.0 charset_name: UTF-8 no_beats_prefix: false number_worker_threads: 12 override_source: <empty> port: 5044 recv_buffer_size: 1048576 tcp_keepalive: false tls_cert_file: /etc/graylog/server/filebeat.crt tls_client_auth: disabled tls_client_auth_cert_file: <empty> tls_enable: true tls_key_file: /etc/graylog/server/filebeat.key tls_key_password: ********
- Filebeat输出配置:
output.logstash: hosts: ["<graylog_ip>:5044"] ssl.certificate: '/etc/pki/tls/certs/filebeat.crt' ssl.key: '/etc/pki/tls/private/filebeat.key'
排查与解决步骤
1. 修正证书认知误区
你之前的理解有误:Filebeat连接Graylog(Beats输入)时,客户端(Filebeat)需要验证服务器(Graylog)的证书合法性,而非双方互用同一份密钥对。正确逻辑是:
- Graylog使用自身的公钥证书+私钥对外提供TLS服务
- Filebeat需要信任Graylog的公钥证书,确保连接的是合法服务器
2. 检查Graylog容器内证书权限
Docker挂载证书后,容器内Graylog进程可能没有读取权限:
- 进入Graylog容器:
docker exec -it <graylog_container_name> /bin/bash - 检查证书文件权限:
ls -l /etc/graylog/server/filebeat.crt /etc/graylog/server/filebeat.key - 若权限不足,设置正确权限(Graylog进程通常以
graylog用户运行):
chown graylog:graylog /etc/graylog/server/filebeat.crt /etc/graylog/server/filebeat.key chmod 600 /etc/graylog/server/filebeat.key chmod 644 /etc/graylog/server/filebeat.crt
- 重启Graylog容器
3. 修正Filebeat配置
Filebeat连接Graylog Beats输入时,不需要配置ssl.certificate和ssl.key(这两个用于客户端证书认证,但你设置了tls_client_auth: disabled,无需启用)。正确配置应为:
output.logstash: hosts: ["<graylog_ip>:5044"] ssl.enabled: true ssl.certificate_authorities: ['/etc/pki/tls/certs/filebeat.crt'] # 信任Graylog的公钥证书
- 确保
filebeat.crt在Filebeat机器上的路径正确,且进程可读取 - 重启Filebeat服务
4. 验证证书有效性
- 检查证书的主机名是否与Graylog服务器的FQDN或IP匹配:
openssl x509 -in filebeat.crt -text -noout | grep Subject
- 若用IP访问Graylog,生成证书时Common Name(CN)需填写Graylog的IP;若用域名,填写对应域名
- 若不匹配,重新生成证书
5. 测试TLS连接
在Filebeat机器上用openssl s_client测试Graylog的TLS端口:
openssl s_client -connect <graylog_ip>:5044 -CAfile /etc/pki/tls/certs/filebeat.crt
- 连接成功会显示证书信息及
Verify return code: 0 (ok) - 失败则根据错误提示排查(如证书不匹配、权限问题、端口未开放等)
6. 检查Graylog日志
查看Graylog容器日志,获取更详细的TLS错误信息:
docker logs <graylog_container_name> | grep -i tls
常见错误如密钥密码错误、证书格式错误等,可从日志中定位
内容的提问来源于stack exchange,提问作者Damian Games
相关产品推荐
相关产品推荐

