如何为Metricbeat配置AWS RDS MySQL连接的SSL证书参数
AWS RDS参数组已开启require_secure_transport=ON,使用Metricbeat MySQL模块采集指标时,即使添加SSL配置仍报错:
ERROR: {"log.level":"error","@timestamp":"2023-12-28T10:58:23.514Z",
"log.origin":{"file.name":"module/wrapper.go","file.line":256},"message":"Error fetching data for metricset mysql.status:Error 3159: Connections using insecure transport are prohibited while --require_secure_transport=ON.","service.name":"metricbeat","ecs.version":"1.6.0"}
初始配置(路径:/etc/metricbeat/modules.d/mysql.yml):
- module: mysql metricsets: - status period: 10s hosts: ["tcp(my_rds_endpoint:3306)/"] username: my_username password: my_password
修改后的配置(仍报错):
- module: mysql metricsets: - status period: 10s hosts: ["tcp(my_rds_endpoint:3306)/"] username: my_username password: my_password ssl.enabled: true ssl.verification_mode: full ssl.certificate_authorities: ["/opt/ssl/global-bundle.pem"] logging.level: debug
注:关闭require_secure_transport后模块可正常工作,仅SSL配置存在问题。
按以下步骤排查修正:
确保CA证书权限正确
检查/opt/ssl/global-bundle.pem的权限,Metricbeat进程需要具备读取该文件的权限:chmod 644 /opt/ssl/global-bundle.pem chown metricbeat:metricbeat /opt/ssl/global-bundle.pem显式指定连接字符串的SSL参数
在hosts连接字符串中添加?tls=true,强制启用SSL连接,避免Metricbeat忽略配置的SSL参数:hosts: ["tcp(my_rds_endpoint:3306)/?tls=true"]添加TLS版本限制(可选但推荐)
AWS RDS要求使用TLS 1.2及以上版本,在配置中添加ssl.min_version确保兼容性:ssl.min_version: TLS1.2验证证书有效性
先用MySQL客户端测试SSL连接是否正常,排除证书或网络层面的问题:mysql -h my_rds_endpoint -P 3306 -u my_username -p --ssl-ca=/opt/ssl/global-bundle.pem如果能成功连接,说明证书和RDS侧配置无问题,问题出在Metricbeat配置。
检查Metricbeat版本
旧版本Metricbeat对MySQL SSL配置的支持可能存在bug,建议升级到7.17.x或8.x系列的稳定版本。
最终修正后的完整配置示例:
- module: mysql metricsets: - status period: 10s hosts: ["tcp(my_rds_endpoint:3306)/?tls=true"] username: my_username password: my_password ssl.enabled: true ssl.verification_mode: full ssl.certificate_authorities: ["/opt/ssl/global-bundle.pem"] ssl.min_version: TLS1.2 logging.level: debug
配置修改后,重启Metricbeat服务:
systemctl restart metricbeat
内容的提问来源于stack exchange,提问作者Chandu

