You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 06:47:10