sql_exporter报错:查询结果缺失serviceRequest1等列,请求协助解决
排查sql_exporter配置错误及实现需求的解决方案
错误原因分析
根据错误日志column(s) ["serviceRequest1" "serviceResponseCode1"] missing from query result,核心问题如下:
- 列名不匹配:采集器配置的
key_labels中指定的serviceRequest1、serviceResponseCode1,在SQL查询返回的结果中不存在——实际查询返回的列是serviceRequest和serviceResponseCode,名称不一致导致无法映射。 - 未过滤目标记录:当前SQL查询返回了所有
serviceDisplayName = 'UploadDoc'的记录,不符合“仅当HTTP状态码不为200时生成指标”的需求。 - Metrics配置逻辑错误:
values字段指定了两个列,但gauge类型指标需要单一数值作为值,value_label的设置也不符合指标生成逻辑。
解决方法
1. 修正采集器配置(YYY.collector.yml)
调整配置匹配查询列名,同时加入过滤逻辑,修正指标生成规则:
collector_name: YYY metrics: - metric_name: upload_document_http_status type: gauge help: 'Upload Document REST API non-200 HTTP status codes' key_labels: - serviceRequest - serviceResponseCode values: - serviceResponseCode query: | SELECT [serviceRequest], [serviceResponseCode] FROM [ccc].[bbb].[aaa] WHERE [serviceDisplayName] = 'UploadDoc' AND [serviceResponseCode] != 200
2. 配置逻辑说明
AND [serviceResponseCode] != 200:仅筛选非200状态的记录,避免生成大量无意义的正常状态指标。key_labels使用查询返回的真实列名,彻底解决“列缺失”的错误。values指定serviceResponseCode作为gauge指标的数值,符合Prometheus对指标数值类型的要求。
3. 生效步骤
修改配置后重启sql_exporter服务,重新触发指标采集,即可得到格式类似以下的异常状态指标:
upload_document_http_status{serviceRequest="http://example.org/OTCS/llisapi.dll",serviceResponseCode="500"} 500
内容的提问来源于stack exchange,提问作者Sybil
相关产品推荐
相关产品推荐

