使用Grafana v9.1.6告警配置API创建的告警异常:数据源未找到/无数据
Grafana告警API创建后健康状态异常及Bad Request问题解决
问题概述
使用Grafana 9.1.6的POST /api/v1/provisioning/alert-rules接口创建包含查询、reduce、math表达式的告警规则后:
- 规则可在UI中查看,但健康列显示
failed to execute conditions: data source not found或nodata错误 - 复用UI创建告警时的请求体或参照修改后,接口返回
Bad Request
核心问题与修复方案
1. 表达式数据源UID不统一
Grafana 9.x中内置的表达式数据源UID为__expr__,而非-100。请求体中B、C项的datasourceUid及model内的数据源UID存在不匹配:
- 将B项的
datasourceUid: '-100'改为"datasourceUid": "__expr__" - 将B项model内的
uid: '-100'改为"uid": "__expr__"
2. Math类型表达式冗余配置
Math类型的表达式(C项)不需要conditions字段,该字段属于告警条件配置,会导致规则解析异常,直接删除C项model内的conditions数组。
3. JSON格式不合法
原始请求体存在未加双引号的键(如orgID: 1),JSON规范要求所有键必须用双引号包裹,这是导致Bad Request的直接原因,需修正所有键的格式。
4. 时间间隔与查询范围不匹配
A项的intervalMs: 1000(1秒)可能与数据源的scrape interval不匹配,导致无法获取数据,建议调整为数据源实际的采集间隔(如15秒则设为15000)。
修正后的请求体示例
{ "orgID": 1, "folderUID": "<folder_uid>", "ruleGroup": "<rule_group>", "title": "<alert_name>/de6835e3-148f-4cef-9b53-9fcf0afa1f65", "condition": "C", "noDataState": "NoData", "execErrState": "Error", "data": [ { "refId": "A", "queryType": "", "relativeTimeRange": { "from": 300, "to": 0 }, "datasourceUid": "<datasource_id>", "model": { "expr": "sum by(instance) (<metric_name>{job=\"<environment_name>\"})", "hide": false, "intervalMs": 15000, "maxDataPoints": 43200, "refId": "A" } }, { "refId": "B", "queryType": "", "relativeTimeRange": { "from": 0, "to": 0 }, "datasourceUid": "__expr__", "model": { "datasource": { "type": "__expr__", "uid": "__expr__" }, "expression": "A", "hide": false, "intervalMs": 15000, "maxDataPoints": 43200, "reducer": "last", "refId": "B", "type": "reduce" } }, { "refId": "C", "queryType": "", "relativeTimeRange": { "from": 0, "to": 0 }, "datasourceUid": "__expr__", "model": { "datasource": { "name": "Expression", "type": "__expr__", "uid": "__expr__" }, "expression": "$B > 100", "intervalMs": 15000, "maxDataPoints": 43200, "refId": "C", "type": "math" } } ], "for": "1m", "annotations": {}, "labels": {} }
额外排查步骤
- 验证数据源UID:确认
<datasource_id>是目标数据源的真实UID,可在Grafana数据源设置页面查看 - 检查Grafana日志:查看Grafana服务器日志(默认路径
/var/log/grafana/grafana.log),获取更详细的错误信息,定位具体字段或数据源问题 - 对比UI请求:用浏览器开发者工具捕获UI创建告警的请求,逐字段对比自己的请求体,确保字段取值、类型完全匹配
内容的提问来源于stack exchange,提问作者Ciprian Goia
相关产品推荐
相关产品推荐

