面向 Grafana 的只读工具,经数据源代理查询指标:实例健康、数据源列表、instant 与 range PromQL 查询、当前告警状态与已配置的告警规则。range 查询会按点数预算降采样;调用方显式指定的 step 若会超量则直接拒绝,而不是静默改写,避免模型拿到与预期不同分辨率的数据。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-grafana-query
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:maxmilian/dsh-grafana-query
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
dsh-grafana-query 是一个免费开源、只读的 DeepSeek Harness Grafana 插件。
它让 agent 通过 Grafana 的 datasource proxy 执行 PromQL,并读取 Grafana unified alerting
的当前状态,全程不改动 Grafana 的任何数据。
请勿与 npm 上的 dsh-grafana 混淆——那是一个写入型的 dashboard 编辑器,会把 dashboard JSON
推回 Grafana。本插件做的是相反的事:只读的指标查询与告警状态。dashboard 与 panel JSON 明确不在范围内。
Tools
| 工具 | 用途 |
|---|---|
grafana_health |
确认实例可连接并返回版本。 |
grafana_list_datasources |
列出 datasource 的 uid、type 与 access 模式。请先调用这个。 |
grafana_query |
通过 datasource proxy 执行 instant PromQL 查询。 |
grafana_query_range |
执行区间 PromQL 查询,强制套用 step 与点数上限。 |
grafana_alert_state |
读取 unified alerting 规则的当前状态。 |
grafana_list_alert_rules |
列出已配置的告警规则定义。 |
所有工具均为只读。v0.1 不会在 Grafana 创建、修改、删除、silence、ack 或暂停任何东西。
硬性上限
以下上限均由插件本身强制,与 Grafana 无关。任何一处被截断时,meta.truncated 与截断前的总数都会标示出来。
| 项目 | 值 |
|---|---|
每条 series 的点数(max_points) |
默认 200、上限 500。Prometheus 两端都会返回,因此 n 秒的区间搭配 step s 会得到 floor(n / s) + 1 个点 |
区间长度(grafana_query_range) |
31 天 |
| 单次区间查询的总点数 | 20000;超出的 series 会被整条丢弃,不会砍成半截 |
| 单次查询的 series 数 | maxSeries,默认 100 |
告警规则条数(grafana_alert_state、grafana_list_alert_rules) |
匹配条件的前 500 条;其余无法通过翻页获取,请用筛选参数 |
| 每条规则的告警 instance | 默认 10、上限 50 |
| 每页条数 | 默认 20、上限 100 |
| 上游错误文本 | 200 字符,且仅 HTTP 400 才透出 |
grafana_alert_state 默认只返回 firing、pending 与 unknown 的规则——inactive 规则默认不会出现,
需要时请用 state 明确指定。
Requirements
- 具备兼容
@deepseek-ai/dsh-toolsAPI 的 DeepSeek Harness - Node.js 22.19 以上(22.x 系列)或 Node.js 24 以上
- Grafana 9.0 以上——只支持 uid 版 datasource proxy(
/api/datasources/proxy/uid/:uid/*), 不支持已 deprecated 的数字 id 路径
Configuration
export GRAFANA_URL='https://grafana.example.com'
export GRAFANA_TOKEN='glsa_your_service_account_token'
| 字段 | 环境变量 | 默认 | 范围 |
|---|---|---|---|
baseUrl |
GRAFANA_URL |
必填 | http(s) URL,不可内嵌账号密码、不可带 query 或 fragment;可含 sub-path |
token |
GRAFANA_TOKEN |
必填 | 不可为空 |
locale |
— | en |
en、zh-TW、zh-CN、ja |
requestTimeoutMs |
— | 30000 |
1 – 300000 |
maxResponseBytes |
— | 5242880 |
1 – 52428800 |
maxSeries |
— | 100 |
1 – 1000 |
plugin 配置的优先级高于环境变量。
Permissions
Grafana service account token(推荐)与旧版 API key 都可以用——两者都走同一个
Authorization: Bearer header。Grafana Cloud 的 Access Policy token(glc_)是给 Cloud
数据端点用的,不适用于这个 API。
实际在 Grafana 上怎么设
下表的 scope 名称是 Grafana 内部检查用的,UI 上并不是这样勾。创建 service account 时可行的组合是:
- basic role 选 Viewer——涵盖
datasources:read与datasources:query。 - 再加 fixed role Alerting → Full read-only access——涵盖
alert.rules:read与alert.provisioning:read。
已于 2026-08-27 在 Grafana Cloud 用这个组合实测,六个工具全部可用。 详见验证记录。
用最小权限的 token 不会让工具变难用:Grafana 对 GET /api/datasources 是返回过滤后的列表,
而不是返回 403。因此只被授予单一 datasource Query 权限的 token,grafana_list_datasources
就只会列出那一个——2026-08-27 实测:Viewer token 拿到 26 条,受限 token 拿到 1 条。你不会看到一堆
查下去就 403 的条目。(datasource 层级的 Query 权限也隐含允许读该 datasource 的 metadata,
因此不存在“查得动但读不到”的状态。)
Scope 对照
| 工具 | 所需权限 |
|---|---|
grafana_health |
无——/api/health 不需要认证,因此本工具无法判断 token 是否有效;要验证 token 请用 grafana_list_datasources。 |
grafana_list_datasources |
datasources:read |
grafana_query、grafana_query_range |
datasources:query(另有 datasources:read 才能做前置类型检查) |
grafana_alert_state |
alert.rules:read |
grafana_list_alert_rules |
alert.provisioning:read |
Grafana Cloud
baseUrl 指向 stack 本身,并使用在该 stack 创建的 service account token:
export GRAFANA_URL='https://your-stack.grafana.net'
export GRAFANA_TOKEN='glsa_your_service_account_token'
这里不要用 glc_ 开头的 Access Policy token。Cloud stack 内置大量 datasource,
请善用 grafana_list_datasources 的 type 与 name_contains 筛选以缩短列表。
Install
bun add dsh-grafana-query
包内含 cordis.patch.yml,并通过 package.json 的 dsh.bundle.patch 声明,
让 DeepSeek Harness registry 能以默认配置加载本插件。
Examples
grafana_list_datasources带{"type": "prometheus"}获取 uid。grafana_query带{"datasource_uid": "prom-1", "query": "up"}查当前值。grafana_query_range带{"datasource_uid": "prom-1", "query": "rate(node_cpu_seconds_total[5m])", "start": "...", "end": "..."}查趋势。省略step时插件会自动挑一个,使每条 series 的点数不超过max_points。grafana_alert_state不带参数,看现在有什么在告警。
Internationalization
把 locale 设为 en、zh-TW、zh-CN 或 ja,可切换模型看到的工具与参数描述。
工具名称一律保持英文,错误信息也一律是英文。
Security and error behavior
- 每个工具都是只读。
- 错误永远不会夹带 token、
Authorizationheader 或原始 response body。 - 唯一的例外:当 Prometheus 以 HTTP 400 拒绝查询时,会把结构化的
error字段透出, 让 agent 能修正自己的 PromQL。上限 200 字符,且事前会先跑一次敏感信息过滤。 其他状态码一律返回静态信息。 - 响应大小受
maxResponseBytes、maxSeries以及每条 series 的点数上限三重限制。 任何裁剪都会在meta.truncated与裁剪前的总数留下记录。
Development
bun install
bun run lint
bun run typecheck
bun run test
bun run build
License
MIT
链接
同类插件
Tencent/WeKnora#dsh-weknora★ 33047
把 WeKnora 知识库接入 dsh 的四个只读工具:列出知识库、混合检索原文片段、按顺序还原单篇文档,以及直接取用 WeKnora 自己带引用的 RAG 或 ReAct agent 回答(含可续聊的 session id)。
superdesigndev/treg★ 4972
给 Agent 的工具目录:按「要做的事」检索约 2,600 个外部接口(SEO 与 SERP、外链、社交、人物与公司信息补全、广告库、抓取),查看参数与单次调用价格后直接调用,凭据由服务端注入。附带技能,MCP 行在未设置 TREG_TOKEN 前保持禁用。
TencentCloudBase/CloudBase-AI-Toolkit#dsh-plugin★ 1136
把腾讯云 CloudBase 后端接入 DeepSeek Harness——在对话里搭好并部署全栈应用,查询结果渲染为表格卡片(分页、排序、导出 CSV),部署后可预览真实域名,并提供 CloudBase MCP 工具集(`mcp__cloudbase__*`),登录走 device-code 流程。
gitroomhq/postiz-agent#dsh-postiz★ 509
通过 MCP 将 DeepSeek Harness 连接到 Postiz:列出已连接的社交媒体渠道、获取各平台发帖规则,并向 X、LinkedIn、Instagram、Facebook、Threads、TikTok、YouTube、Reddit、Bluesky、Mastodon、Discord、Slack、Telegram 等平台排期、存草稿或发布帖子;附带 postiz 工作流技能。
EthanYoQ/Invoice-Downloader#dsh-invoice-downloader★ 502
面向 DeepSeek Harness 的本地 IMAP 发票下载、OCR 识别、归档与 Excel 报销汇总。
anysearch-team/anysearch-dsh★ 457
基于 AnySearch 的实时网页与垂直搜索插件,为 DeepSeek Harness 提供搜索工具。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。