使用Prometheus sql_exporter连接SAP ASE数据库超时问题排查
问题描述
我尝试使用Prometheus sql_exporter连接SAP ASE数据库,已按照说明添加Go驱动、重新编译二进制文件,并将连接字符串设置为:
data_source_name: 'tds://SAPSR3:mypassword@myHostname:4901/DBName
执行curl localhost:9399/metrics查看采集指标时,出现错误日志:
ts=2023-04-17T16:47:17.947Z caller=klog.go:84 level=debug func=Infof msg="Error gathering metrics: [from Gatherer #1] context deadlineexceeded"
疑似数据库连接超时,但使用相同凭据通过isql可正常登录数据库。我尝试修改数据源名称格式(移除数据库名、修改端口、将主机名改为localhost等),修改后出现登录失败错误:
ts=2023-04-17T17:33:02.764Z caller=klog.go:84 level=debug func=Infof msg="Error gathering metrics: [from Gatherer #1] Msg: 4002, Level: 14, State: 1
Server: DBName, Line: 0:
Login failed.
"
我认为原数据源名称可建立数据库连接(否则会直接登录失败),请问是否有其他SAP ASE配置项会影响该问题?
排查方案
可能影响的SAP ASE配置项
- 连接超时参数:检查ASE的
login timeout和connection timeout配置,这两个参数分别控制连接建立阶段和空闲连接的超时阈值。执行以下命令查看当前值:
若值过小,会导致sql_exporter在建立连接或执行指标查询时触发超时。sp_configure 'login timeout' sp_configure 'connection timeout' - 最大连接数限制:查看ASE的
number of user connections配置,确认当前是否已达到连接上限,新请求会被阻塞导致超时。执行命令:
必要时调整该参数的上限值。sp_configure 'number of user connections' - TDS协议版本兼容性:SAP ASE对不同TDS版本的支持存在差异,sql_exporter使用的tds驱动默认版本可能与ASE不匹配。尝试在连接字符串中指定TDS版本,例如:
(ASE 16版本通常适配7.3或7.4版本,可根据实际环境调整)data_source_name: 'tds://SAPSR3:mypassword@myHostname:4901/DBName?tds_version=7.3' - 用户资源限制:检查
SAPSR3用户是否存在连接时间、CPU使用率等资源限制,这些限制可能导致查询执行超时。执行命令查看用户配置:sp_displaylogin SAPSR3 - 防火墙与网络规则:虽然isql可以连接,但sql_exporter的连接可能受到ASE端防火墙、本地SELinux或端口转发规则的限制,比如ASE仅允许特定IP段的连接请求,或者网络设备存在连接超时设置。
其他排查方向
- sql_exporter超时配置:检查sql_exporter配置文件中的
query_timeout参数,若该值设置过短,复杂的指标查询会触发超时。 - 连接字符串语法:原连接字符串末尾缺少闭合单引号,确认实际配置中是否存在语法错误,正确格式应为:
data_source_name: 'tds://SAPSR3:mypassword@myHostname:4901/DBName' - 驱动编译验证:用简单的Go测试程序连接SAP ASE,验证tds驱动是否能正常工作,排除编译过程中引入的兼容性问题。
内容的提问来源于stack exchange,提问作者user21665780
相关产品推荐
相关产品推荐

