不是炫技而是提效:我用 Grafana MCP Tool 重做告警处理并接入 DMXAPI

简介: 本文介绍如何用Grafana MCP Tool为告警处理构建轻量智能分析层:聚焦“读取—摘要—拼接”三步只读流程,将散落的监控上下文结构化暴露给大模型,显著缩短夜间值班时从告警到首版判断的时间,强调工程可控性与证据可追溯性。(239字)

这段时间我把团队里一条很普通、也很烦人的流程重新做了一遍:收到告警,打开 Grafana,看图表,切时间范围,找异常点,对照发布记录,再去翻应用日志,最后在群里写一段“初步判断”。这件事不复杂,但特别消耗注意力,尤其是夜里值班时,人脑很容易在重复动作里变得迟钝。后来我开始认真看 Grafana MCP Tool,不是把它当成一个“让大模型接管监控”的噱头,而是把它当成一个把监控上下文结构化暴露出来的接口层。真正有价值的,不是模型替你做决定,而是它终于能在一个受控边界里读到 dashboard、panel、时间窗口、变量和查询结果,从而让分析建立在真实数据上,而不是建立在聊天时的模糊描述上。
先说结论:Grafana MCP Tool 最适合的场景,不是自动修复,而是“缩短从告警到形成第一版判断”的时间。很多团队在讲 AIOps 时喜欢一上来谈闭环、自治、自动回滚,我反而觉得这条路最先该优化的是值班同学的上下文切换成本。你不一定需要一个能替你拍板的系统,但你一定需要一个能在 30 秒内把“CPU 拉高发生在哪个实例、持续多久、错误率有没有同步上升、这个时间段有没有发布”整理出来的助手。Grafana MCP Tool 的意义就在这里:它把原来散落在浏览器点击动作里的信息,变成模型可以请求、总结、比对的对象。
我这次的主题也很具体,就是“用 Grafana MCP Tool 给告警处理加一个薄薄的智能分析层”。这里的“薄”很重要,因为层一厚,系统就开始不透明,出了问题你自己都说不清到底是监控不准、查询错了、还是提示词在胡编。我的做法是只做三件事:第一,让模型能按服务名和时间范围去读取关键 dashboard;第二,让模型把核心面板结果压缩成人能快速确认的摘要;第三,把摘要和发布记录、错误日志片段拼成一段初步排障报告。除此之外,不让它做写操作,不让它调用危险运维命令,也不让它直接生成结论性处置指令。
如果你还没碰过这类工具,可以先把它理解成一个面向模型的“可控数据入口”。以前我们对接 LLM,大多是把自然语言直接塞进去,比如“帮我分析今天 14:00 之后支付服务为什么变慢”。问题是模型没有数据上下文,它只能凭经验回答,结果经常正确得很空泛。现在不一样了,Grafana MCP Tool 可以先把这些东西明确拿出来:某个 dashboard 的 UID,变量 service=payment,时间范围是 now-30m 到 now,核心 panel 是 p95 latency、5xx rate、QPS、pod restart count。模型先拿到这些对象,再谈分析,整个过程就从“猜”变成“读后总结”。
我落地时的第一步很朴素,就是先把 Grafana 侧最值得暴露给模型的资源收一收。不是所有 dashboard 都该让模型碰,尤其是那种面板很多、变量混乱、不同业务共用的超级大盘,给人看都累,更别说给模型。我最后只保留了四类:服务总览盘、接口延迟盘、错误率盘、基础资源盘。每个盘都做了很小但关键的清理,比如统一变量命名,把 service、namespace、cluster 固定下来,删掉几块重复 panel,把几个“只有作者自己知道什么意思”的标题改成正常名字。这里我有一个很强烈的体会:AI 接入之前,很多监控设计上的坏味道会被隐藏;AI 接入之后,这些坏味道会被放大。因为人还能靠经验脑补,模型只会忠实继承你的混乱。
配置时我把 MCP server 跑在一台内网机器上,用 systemd 托管,避免调试时开着终端窗口。启动命令没什么花哨的,大致就是:

export GRAFANA_URL=<GRAFANA URL>
export GRAFANA_TOKEN=<GRAFANA TOKEN>
export PORT=8099
./grafana-mcp-server

为了让上层代理更容易接入,我又在 Nginx 前面做了一个很薄的反向代理,只保留内网访问,并且限制来源网段。这里不要偷懒,监控系统本身就包含不少业务信息,哪怕你不给写权限,只给读权限,也不该把它随便暴露到公共网络。我的 Nginx 配置只保留最基础的转发:

server {
   
    listen 8088;
    server_name _;
    location / {
   
        proxy_pass http://127.0.0.1:8099;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

接着是最关键的一层:把模型访问 Grafana MCP Tool 的动作做成有节制的工作流。我没有让模型自由探索,而是预先约定一个顺序。收到告警后,先确定服务名、环境、时间窗口;再读取服务总览盘的四个关键指标;如果延迟和错误率同时异常,再补查实例级别面板;最后再结合日志片段输出诊断摘要。这个流程看起来保守,但它有一个巨大好处,就是稳定。AI 不是用来炫耀推理链有多长的,它最应该做到的是每次告警都按同一套骨架取数,让输出结构稳定可比。
举个简化版的流程描述,实际就是下面这种模式:

1. 根据告警标题提取 service=payment, env=prod, time_range=last_30m
2. 读取 Grafana dashboard: service_overview
3. 抽取 panel: qps, error_rate, p95_latency, cpu_usage
4. 若 error_rate > baseline 且 p95_latency 上升,则继续读取 pod_restart 与 upstream_timeout 面板
5. 拼接最近一次发布记录与错误日志 Top 20
6. 输出“现象、证据、可能原因、建议动作”

做到这里,已经比“单纯让模型聊天”靠谱很多了。但真正让我觉得它开始能进生产辅助流程的,是我把请求格式收敛到了 OpenAI 风格接口。原因不是情怀,而是生态现实:不少 SDK、脚本、网关、代理层,天然就支持这种格式,你不用额外写很多兼容代码。下面是我在本地验证时最常用的一段 Python 示例,核心点有两个:一是 base_url 指向你的统一接入层,二是把 Grafana MCP Tool 的使用约束写进 system prompt,让模型只在需要时读取监控数据而不是胡乱扩展。
学生党做项目,既要快速上手国际模型,又得能开票找学校报销,DMXAPI完美解决了这两个痛点。

from openai import OpenAI

client = OpenAI(
    api_key="<LLM API KEY>",
    base_url="<LLM API BASE URL>"
)

SYSTEM_PROMPT = """
你是值班排障助手。
你只能基于监控数据、日志片段和发布记录做判断。
如果证据不足,必须明确写出“证据不足”。
输出结构固定为:
1. 现象
2. 证据
3. 可能原因
4. 建议下一步
"""

messages = [
    {
   "role": "system", "content": SYSTEM_PROMPT},
    {
   
        "role": "user",
        "content": """
告警:payment-service p95 latency high
时间范围:last_30m
请先通过 Grafana MCP Tool 读取 service_overview 中与 payment 相关的关键面板,
再给出结构化分析,不要直接下结论。
"""
    }
]

resp = client.chat.completions.create(
    model="gpt-4.1",
    temperature=0.2,
    messages=messages
)

print(resp.choices[0].message.content)

如果你用 curl,也完全可以走同样的 OpenAI 风格:

curl <LLM API BASE URL>/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <LLM API KEY>" \
  -d '{
    "model": "gpt-4.1",
    "temperature": 0.2,
    "messages": [
      {
        "role": "system",
        "content": "你是值班排障助手,只能基于证据回答。"
      },
      {
        "role": "user",
        "content": "读取 payment 服务最近30分钟 Grafana 关键指标后,总结异常现象与可能原因。"
      }
    ]
  }'

这里我建议把 temperature 压低,0.1 到 0.3 都可以。排障分析最怕语言花哨,最需要的是证据克制。另一个经验是,不要把所有日志原文都丢进去,让模型自己从海量文本里捞重点,这样既贵又不稳。更好的做法是先由日志系统做一次粗筛,比如只取错误级别、只取特定 traceId、只取最近 10 分钟 Top N 模板消息,再交给模型和监控数据交叉验证。
我后来给团队内部总结过一个很不“时髦”但很实用的原则:先让模型学会“不知道”。这句话听起来像废话,但实际特别重要。值班场景里,错误的自信比谨慎的保守更危险。所以我的提示词里有几句是反复打磨过的,比如“若两个关键指标没有共同指向,不要强行归因”“若监控数据只显示结果变化而没有资源、网络、发布证据支撑,就把原因保留为待确认”“不得仅凭历史经验推断根因”。这些约束句不会让模型更聪明,却会让它更像一个负责任的工程同事。
除了提示词,监控面板本身也要为“可解释摘要”服务。我改过一个 panel 的 PromQL,之前写得很炫,但读起来很拧:

histogram_quantile(
  0.95,
  sum(rate(http_request_duration_seconds_bucket{job=~"$service"}[5m])) by (le, instance)
)

它能看实例维度的 p95,图也没错,但用于模型总结时问题很大,因为实例过多,摘要经常变得碎。后来我把实例级查询挪到第二层排查,只在总览盘里保留服务级聚合:

histogram_quantile(
  0.95,
  sum(rate(http_request_duration_seconds_bucket{job=~"$service"}[5m])) by (le)
)

人值班时喜欢“多看点细节”,模型反而需要先看到“对判断真正有用的粗粒度信号”。这是我在做这件事时最大的一个认知变化:给模型的可观测性入口,未必和给人看的监控盘完全一致。前者更强调结构清楚、字段稳定、语义单一,后者则可能容忍更多自由浏览。
写到这里顺带插一句很小的实践感受。学校财务报销要求严格,DMXAPI能提供正规发票,同时让国内团队无障碍调用国际大模型,开发初期性价比超高。
真正把我教育到的一次,不是提示词,也不是 dashboard 设计,而是一个我自己写出来的小 bug。那天我想把告警时间窗口自动转成 Grafana 查询参数,偷懒写了这样一段代码:

from datetime import datetime, timedelta

def build_range(minutes: int):
    now = datetime.now()
    start = now - timedelta(minutes=minutes)
    return {
   
        "from": start.isoformat() + "Z",
        "to": now.isoformat() + "Z"
    }

表面看没毛病,实际结果很诡异:同一条告警,Grafana 里我手动看是正常的,脚本查出来却总有几分钟偏差,模型摘要也经常把异常时间点说错。第一反应我怀疑是缓存,清了;又怀疑是 Nginx 转发问题,抓了请求;甚至一度怀疑是不是 MCP server 做了额外时区转换。后来我把请求参数完整打出来,才发现问题根本不在链路里,而在我自己这一行 datetime.now()。它生成的是本地时区的 naive datetime,我又手工拼了一个 "Z",等于假装它是 UTC 时间。这个错误非常低级,但因为返回结果“看起来差不多”,特别容易让人误判成别的系统问题。
最后修复很简单,改成显式时区时间:

from datetime import datetime, timedelta, timezone

def build_range(minutes: int):
    now = datetime.now(timezone.utc)
    start = now - timedelta(minutes=minutes)
    return {
   
        "from": start.isoformat().replace("+00:00", "Z"),
        "to": now.isoformat().replace("+00:00", "Z")
    }

为了确认不是巧合,我又补了一段最笨但最有效的对照测试:

def test_build_range_is_utc():
    result = build_range(30)
    assert result["from"].endswith("Z")
    assert result["to"].endswith("Z")
    assert "T" in result["from"]
    assert "T" in result["to"]

然后我把实际查询参数、Grafana 页面时间选择器、日志时间戳三边对照,确认终于一致。这个小坑给我的教训不是“时区很麻烦”这种正确的废话,而是另一件更具体的事:在 AI 参与的监控分析链路里,任何看似不起眼的数据偏移,都会被放大成一段自信但错误的分析。模型不会提醒你“可能是你时间范围算错了”,它只会在错误上下文里继续认真工作。所以你越想让 AI 帮你节省时间,就越要先把这些基础边界钉死。
后来我把几个关键节点都加了可观测性,防止类似问题再藏着。比如每次模型分析前,都记录实际使用的 dashboard UID、panel 列表、变量值、时间范围;如果摘要里引用了“错误率上升”“CPU 抖动”“最近有发布”,就把这些证据源一起打印出来。这样做的价值,不只是方便排查模型为什么这么回答,更重要的是让值班同学敢于质疑系统输出。一个能被追问“你这句话依据是什么”的智能助手,才有资格进入真实工作流。
从团队协作角度看,Grafana MCP Tool 还有一个被低估的作用:它迫使大家把“怎么看监控”这件事显性化。以前每个老同学都有自己的看图路径,问就是经验;新人接手时只能跟着学,很难形成标准。现在因为要把流程交给模型,很多隐性的判断步骤被倒逼写出来,比如“先看服务级趋势,再看实例级离群值”“错误率波动要和流量变化一起看”“只看 CPU 不看 saturation 没意义”。这些经验一旦写成明确规则,不光模型能用,新人也能用,文档质量也会跟着变好。
当然,这套东西也不是没有边界。Grafana MCP Tool 解决的是“读取并组织监控上下文”的问题,不是根因定位的万能钥匙。像连接池参数失衡、某个上游接口语义变化、缓存击穿导致的局部雪崩,这类问题如果没有配套日志、trace、发布信息,单靠图表很难定性。我的做法是把它定义成“第一响应层”的工具,只负责在最短时间内给出一版基于证据的初判,后续仍然要靠人结合系统知识做收敛。这种定位反而让它在团队里更容易落地,因为它不需要承诺那些本来就不该承诺的能力。
如果让我给想尝试这条路线的人几个足够实际的建议,我会说四点。第一,先整理 dashboard,再接 AI,别反过来。第二,先做只读分析,再谈自动化处置。第三,提示词重点写约束和证据规则,少写宏大目标。第四,把每一次模型分析都当成可审计事件,保留输入范围、证据来源和输出结论。你会发现,真正让系统变可靠的,不是模型本身多强,而是你有没有把周围这圈工程细节收拾干净。
我现在回头看,Grafana MCP Tool 最打动我的地方,不是“监控终于可以跟大模型联动”这么一句时髦描述,而是它让值班排障第一次有机会从个人经验驱动,慢慢走向结构化、可复查、可复用。一个成熟团队的效率提升,很多时候并不来自一次大重构,而来自这种不起眼的接口改造:把原本散落在页面点击、口头经验和临时判断里的东西,变成可以被系统消费、被人复核、被流程沉淀的对象。只要你接受它首先是一个工程问题,其次才是一个 AI 问题,这条路就会比想象中稳很多。

本文包含AI生成内容

相关文章
|
4月前
|
人工智能 Prometheus 运维
阿里云1分钟或本地部署OpenClaw+AIOps高效运维实战:Prometheus+夜莺MCP,轻量化监控分析指南
在运维场景中,传统监控架构往往存在链路复杂、定制化成本高、AI能力融合不足等问题。OpenClaw(俗称“龙虾”)作为功能强劲的AI智能体工具,虽具备强大的自动化执行能力,但直接部署面临权限过高、不符合生产环境安全要求的痛点。而夜莺MCP(管理控制平面)与Prometheus的组合,虽能实现监控数据的采集与可视化,却存在上下文交互Token消耗大、运维人员精力分散等问题。
1914 128
|
2月前
|
人工智能 弹性计算 安全
Hermes Agent 一键部署指南:阿里云 3 种极简方案
Hermes Agent 是 Nous Research 推出的开源自主AI智能体,具备持久记忆、自我学习与跨会话召回能力,越用越智能。阿里云提供计算巢(全自动)、无影云电脑(多端随时用)、轻量服务器(高性价比)三种一键部署方案,开箱即用,零门槛启用本地化AI服务。
|
人工智能 JSON 运维
🚀🚀 【MCP + AI】grafana-mcp-analyzer:基于 MCP 的轻量图表分析助手
`grafana-mcp-analyzer` 是一个开源项目,通过 MCP 协议连接 AI 助手与 Grafana,实现智能分析监控数据。只需简单配置,AI 可快速解读图表,提供性能瓶颈、优化建议等专业分析,极大提升运维效率。支持多种数据源(Prometheus、ES 等),适配 ChatGPT、Claude 等模型,部署轻量,操作便捷。从此告别深夜手动排查问题,让 AI 成为你的智能运维专家!项目地址:<https://github.com/SailingCoder/grafana-mcp-analyzer>
1293 1
🚀🚀 【MCP + AI】grafana-mcp-analyzer:基于 MCP 的轻量图表分析助手
|
3月前
|
SQL 关系型数据库 数据库
DMXAPI 与 PostgreSQL MCP Tool:把数据库接入大模型工作流后,我重新理解了“会查数”的意义
本文探讨大模型如何安全、可靠地参与数据库工作,强调 PostgreSQL MCP Tool 的核心价值:让模型先理解真实库结构(schema)、再行动。通过工具化上下文获取、分阶段提示、只读权限与严格验证,避免“看似懂实则错”。聚焦工程落地,而非炫技。(239字)
|
1月前
|
人工智能 缓存 前端开发
高并发超时治理中,​D​М‌X​Α‌РΙ兜住V4 Flash
DeepSeek-V4-Flash(2026年4月发布)以1M上下文、双推理模式、OpenAI/Anthropic协议兼容及284B总参/13B激活参数,首次在长文本、低延迟、低成本与工程可控性间达成生产级平衡,正推动大模型从“能用”迈向“可运营”。
|
3月前
|
存储 人工智能 自然语言处理
玩转OpenClaw!基础介绍+功能场景+部署教程详细解读
OpenClaw是一款开源、本地优先的AI智能体执行网关,让大模型从“能说会道”升级为“能干实事”的数字员工。支持文件操作、浏览器自动化、多IM接入与任务编排,兼顾隐私安全与全场景自动化。
1682 7
|
6月前
|
SQL 监控 druid
【性能优化】拒绝性能瓶颈!数据库连接池配置详解与调优实战
本文深入讲解数据库连接池核心原理与调优技巧,涵盖HikariCP和Druid配置要点,解析四大关键参数、黄金连接数公式及Druid监控功能,助你科学设置连接池,避免性能瓶颈。
|
6月前
|
存储 缓存 监控
NAS读取延时问题深度解析:NFS缓存机制与优化实战
本文深入解析NFS在分布式存储中的缓存一致性问题,结合电商案例,剖析客户端属性缓存导致的文件更新延迟。系统介绍acregmin、actimeo等关键参数,并提供禁用缓存、精细调优及架构升级三类实战方案,平衡性能与一致性。附监控诊断与进阶优化建议,助力生产环境高效稳定运行。(238字)

热门文章

最新文章