dsh-grafana

toolstested: passnpmMIT

Conversational Grafana operations: inspect live dashboard data across named sources, then make safe, reviewable dashboard changes with approval and version checks.

下载量 / Downloads
1,963
依赖体积 / node_modules
8.14 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

Install

dsh plugin --profile web add dsh-grafana

Sandbox test results

StageResult
1 install✓
2 list✓
3 mount✓
4 boot—

Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).

README

dsh-grafana

[English](./README.md)

一个面向 Agent 的 Grafana 可观测 DeepSeek Harness 插件——读取大盘、查询实时指标、跟踪趋势与告警、跨源对比调查,并能安全、可审查地写回大盘。插件直接操作 Grafana API 与 Dashboard JSON,不需要截图。

项目状态:1.0 前版本。核心写回路径已经具备安全保护和自动化测试,但尚未完成 Grafana 12+ 兼容性认证。

核心能力

  • 通过浏览器 URL 或 UID 获取大盘;超大盘可改用结构化摘要模式,只返回面板/查询/阈值/变量骨架。
  • 按标题和标签搜索大盘。
  • 粘贴大盘或面板视图 URL,直接查询面板背后的真实数据。
  • 把大盘复制为全新大盘,并返回新大盘地址。
  • 通过对话调整面板、查询、阈值、变量和布局。
  • 写回时自动保持大盘所在文件夹。
  • 写入前检测并发修改。
  • 每次写入都必须经过 DSH 原生用户审批。
  • Service Account 凭证只保存在本机 DSH 凭证库。
  • 可配置多个具名 Grafana 源站,每次工具调用按名称指定目标。

环境要求

组件 · 已支持基线

Node.js · 20.11 或更高版本

DeepSeek Harness · 默认开发依赖为 dsh-tools@0.2.0-rc.2;另覆盖 0.2.1-alpha.1 的自动化依赖兼容检查。历史基线:0.1.0-rc.6、0.1.1-rc.2、0.1.2-rc.1、0.1.3-alpha.2、0.1.5-rc.1、0.1.7-rc.2。真实宿主与浏览器验收另见 INTEGRATION.md。

Grafana · Grafana 10/11 文档中的传统 Dashboard HTTP API

Grafana 12 引入了新 Dashboard API。旧接口可能仍然可用,但 Grafana 12+ 暂未进入本插件的正式兼容矩阵。

标准 npm 依赖解析与 DSH 宿主预检采用不同的预发布匹配方式:宿主 0.2.0-rc.2 和 0.2.1-alpha.1 的预检启用 includePrerelease。插件仍显式声明 0.2.1 元组,供标准依赖解析使用;这不表示已完成 alpha 宿主、桌面端或浏览器认证。

本插件无构建步骤:纯 ESM JavaScript,安装即可加载,无需编译或打包。

安装

正式使用应安装不可变的 Release tag:

dsh plugin --profile <profile> add github:guhanfei-ai/dsh-grafana#v<version>

仅在测试时安装会持续变化的默认分支:

dsh plugin --profile <profile> add github:guhanfei-ai/dsh-grafana

本地开发:

npm ci
dsh plugin --profile <profile> add link:/绝对路径/dsh-grafana

安装后重启对应 DSH profile。

Windows 可使用 link:C:/path/to/dsh-grafana 形式的绝对路径。插件运行本身支持跨平台。

升级说明

0.12.0:工具改名与旧宿主界面

两个工具改名。 grafana_query 改为 grafana_panel_query,grafana_health 改为 grafana_status。参数、输出、超时与审批行为均不变。

旧名 · 新名

grafana_query · grafana_panel_query

grafana_health · grafana_status

旧名仍以「只报错」的转发 stub 保留在工具列表中:调用 grafana_query 或 grafana_health 会立即失败并指名新工具,进行中的对话一步即可自愈。自定义 prompt 与保存的工作流仍建议改用新名;按代理配置的工具白名单需要换成新名。

浏览器设置卡片需要 DSH 0.1.2 及以上。 在更旧的宿主(0.1.0–0.1.1)上,卡片会显示明确的「宿主过旧」提示而非源站列表——这是版本门槛,不是配置丢失。宿主侧全部工具在这些版本上照常可用,插件本身也仍可安装在 0.1.0-rc.6 及以上。

0.17.x:设置页与配置迁移

支持槽位声明探测及 settings.section 的宿主,在设置页左侧提供独立 Grafana 导航项,进入后配置卡片默认展开。没有独立分区的宿主回退到插件区 Grafana tab 或旧版内嵌卡片;没有声明探测接口的旧宿主沿用原有兼容注册。入口选择按实际宿主能力,不仅凭版本号;支持探测的宿主始终只注册一个可用入口。此次入口调整不改变配置、源站 UID 或令牌存储。

配置自动迁移。 升级前 settings.yaml.imported 中的具名源站优先于旧单源凭证;否则旧单源配置会物化为名为 default 的源站(Base URL 与已存令牌不变)。导入文件位于 $DSH_HOME/settings.yaml.imported,未设置 DSH_HOME 时位于 ~/.dsh/settings.yaml.imported。本次维护继续使用可选依赖 js-yaml v4,以保留旧 YAML 的锚点与 << 合并语义;仅该依赖本身缺失时,才由内置解析器处理已知的基础 Grafana 段结构。

文件读取、YAML 解析或导入写入失败时,迁移停止并输出脱敏原因;不会再推断单源配置、修改凭证或改写导入文件。请修复配置或依赖后由维护者重载插件再试。迁移不会覆盖运行期间并发保存的配置。

配置

打开 设置 → 左侧 Grafana(位于内置插件之后),直接查看已展开的配置面板。如果宿主不支持独立分区,则使用 设置 → 插件(或内置插件)→ Grafana;仅支持旧槽位的宿主使用内嵌 Grafana 助手卡片。

Web 版与桌面版的 Grafana 配置页均默认显示简体中文,不随浏览器或系统语言自动切换。若在 DSH 语言设置中明确选择英文,配置页会使用英文;未选择、语言不支持或偏好读取失败时均使用简体中文。

提示:独立分区优先于插件 tab,插件 tab 优先于旧版内嵌卡片;兼容入口保留原来的默认收起行为。升级后由维护者重载对应 profile 并刷新页面,使新插件代码生效。是否支持开发目录监听/HMR 取决于实际宿主配置,不能仅凭源码已修改判断当前界面已更新。

需要配置:

Token 使用 DSH 仅允许 loopback same-origin 访问的特权凭证 RPC:仅写不读,保存后的值不会被读取或回显。URL 存储在 grafana settings namespace 的非 secret 字段中,因此可读回明文并在卡片中显示以便核对。界面支持替换和删除。

HTTP 与 HTTPS 开箱即用,内网未配置证书的环境可直接填写 http:// 地址,无需额外设置。注意:HTTP 会明文传输服务账号令牌,不可信网络环境请务必使用 HTTPS。如需强制仅允许 HTTPS,可在插件配置中关闭:

allowInsecureHttp: false

只读模式面向监控排障等不应修改大盘的角色:

readOnly: true

启用后 grafana_push 与 grafana_clone 完全不注册——模型没有可调用的写入工具。设置卡片顶部提供只读模式开关(开 = 只读,关 = 读写),当前模式一目了然;切换只写插件级 readOnly 配置,不影响已配置的源站与默认源站。

切换到只读立即生效:即使写入工具在启动时已注册,审批门也会在运行时拒绝它们。从只读切回读写可能需要重启 DSH(或重新加载插件),取决于插件加载时的模式:以只读模式启动的插件从未注册写入工具,重启或重载之后才会恢复。

settings 中的 baseUrl 为权威来源;早期版本存在 GRAFANA_BASE_URL 凭证中的 URL 会在启动时自动迁移到 settings,之后凭证值仅作兜底。Token 凭证名默认为 GRAFANA_TOKEN,可通过 tokenRef 修改。

多个 Grafana 源站

设置卡片管理的是一个具名 Grafana 源站列表,而不再是单组 URL/令牌。每个源站包含:

  • 源站名称(必填、唯一):中英文皆可。它就是调用工具时传入 source 参数用以指定目标源站的值。
  • UID(只读):自动生成、全球唯一,以淡色小字显示在名称正下方。它是内部稳定主键——改名不会改变 UID,也不会影响已存令牌,且用户无法编辑。
  • Grafana URL 与 Service Account Token:每个源站各自独立。令牌以仅写不读的方式存入 DSH 凭证库。新源站使用 GRAFANA_TOKEN_<uid> 引用;轮换已保存的令牌时生成新引用。迁移保留原有引用,包括自定义引用。

点击新增源站创建,移除源站删除,设为默认选择省略 source 时使用哪一台。保存当前源站只保存该卡片,保存全部源站保存所有卡片;写入前校验名称和 URL。移除只删除当前 profile 的源站配置,不自动清除关联凭证。多个 profile 可能共用 DSH 凭证库;当前配置无法证明其他 profile 不再使用某个引用,因此插件暂停自动回收,也不提供删除重试入口。

保存前必须成功读取配置。读取失败或返回畸形数据时,卡片保持只读,并提供重新读取按钮。宿主提供配置版本号时,写入会携带该版本,防止陈旧页面覆盖其它页面的新修改。

令牌变更通过一次配置写入切换到新凭证引用。宿主明确拒绝时,旧配置继续生效;应答丢失时,不推断写入未生效。所有路径均保留已写入或可能写入的凭证,并提示保留原因;成功轮换后旧凭证也保留。成功保存的令牌草稿会清空,其它未保存的编辑予以保留。保留的凭证可能累积,移除源站不等于在 Grafana 撤销令牌;如需撤销访问,应在 Grafana 中撤销相应令牌。

令牌状态区分 configured(已配置)、missing(确认未配置)和 unknown(无法确认)。凭证接口缺失、读取失败或应答畸形时,设置页显示“状态读取失败”,可随时点击重新读取;grafana_sources 输出 token=unknown,不回显凭证值或 provider 错误。已配置只说明凭证存在,不代表 Grafana 鉴权有效。源站草稿是否曾保存由配置基线判断,不依赖令牌状态。

每个工具都接受可选的 source 参数(源站名称),省略则用默认源站。调用 grafana_sources 可列出已配置的名称、UID、URL、令牌是否已配以及哪一台是默认源站。写操作的审批文案首行始终标明目标源站名称与 URL,方便确认改的是哪一台;写入与该源站绑定:等待审批期间默认源站若被改掉,写入会被拒绝,而不是发到执行时随手解析到的那一台。读取—审批—写入整条链路还绑定源站的 URL 与凭证引用,改掉源站地址会使其改前取得的快照失效——id/uid/version 相同并不能证明两次响应来自同一实例。早期版本的单源配置会在启动时迁移为一个名为 default 的源站,并保留其原有的自定义 tokenRef。allowInsecureHttp 仍是全局设置,对所有源站生效。

Grafana 权限

优先使用最小权限 RBAC,只授予目标大盘及文件夹所需范围:

  • dashboards:read
  • dashboards:write
  • 目标文件夹的 folders:read
  • grafana_panel_query 需要 datasources:query 以及对所查数据源的访问权限

不支持细粒度 RBAC 时才使用 Editor 角色,避免使用 Admin token。

各工具所需的具体权限:

工具 · Grafana 权限

grafana_get · dashboards:read

grafana_push · dashboards:read + dashboards:write

grafana_clone · dashboards:read + dashboards:write

grafana_panel_query · dashboards:read + datasources:query

grafana_datasources · datasources:read

grafana_metric · datasources:read + datasources:query

grafana_compare · datasources:read + datasources:query(每台源站各自)

grafana_trend · dashboards:read + datasources:query

…(truncated)

Rendered from the README published on npm. Formatted only, not edited.

Versions

Published on npm::31,最后更新 2026-10-31

Links

GitHub · Homepage · npm

Same category