mcpField
G
grafana-skill

grafana-skill

github.com/julianobarbosa云与 DevOps1477 次安装2 天前更新
代码仓库

关于 grafana-skill

grafana-skill 是通过 TypeScript 工具和 HTTP API 工作流管理 Grafana 资源的技能,涵盖仪表板操作、客户端库及相关 API 参考。

主要功能

  1. 01通过命令行执行仪表板增删改查
  2. 02提供 TypeScript Grafana 客户端
  3. 03提供 Grafana 资源 API 参考
  4. 04支持仪表板导出、克隆和版本恢复

适用场景

  1. 01按标签列出并导出仪表板
  2. 02从 JSON 文件创建仪表板
  3. 03将仪表板克隆到其他文件夹
  4. 04恢复仪表板的历史版本

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/julianobarbosa/claude-code-skills --skill grafana-skill

安装后在 Claude Code 中输入/grafana-skill确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
CommonPatterns.md
UsersTeams.md
alerting.md
annotations.md
dashboards.md
datasources.md
folders.md
Tools/
DashboardCrud.ts
GrafanaClient.ts
Workflows/
DashboardOperations.md

详细介绍

grafana-skill

使用 TypeScript 工具和 HTTP API 工作流以编程方式管理 Grafana 资源。

工作流路由

工作流触发条件文件
DashboardCrud“创建仪表盘”、“更新仪表盘”、“删除仪表盘”、“列出仪表盘”、“导出仪表盘”Tools/DashboardCrud.ts
GrafanaClient“grafana API”、“grafana client”、“TypeScript grafana”Tools/GrafanaClient.ts
ApiReference“grafana API reference”、“grafana endpoints”References/

工具

DashboardCrud CLI
# Set environment variables
export GRAFANA_URL="https://grafana.example.com"
export GRAFANA_TOKEN="your-service-account-token"

# List dashboards
bun run Tools/DashboardCrud.ts list
bun run Tools/DashboardCrud.ts list --query production --tag monitoring

# Get dashboard by UID
bun run Tools/DashboardCrud.ts get abc123

# Export dashboard to JSON
bun run Tools/DashboardCrud.ts export abc123 --output dashboard.json

# Create dashboard from JSON file
bun run Tools/DashboardCrud.ts create --file dashboard.json --folder my-folder

# Update dashboard
bun run Tools/DashboardCrud.ts update abc123 --file updated.json --message "Updated panels"

# Clone dashboard
bun run Tools/DashboardCrud.ts clone abc123 --title "Production Copy" --folder prod-folder

# View version history
bun run Tools/DashboardCrud.ts versions abc123

# Restore to previous version
bun run Tools/DashboardCrud.ts restore abc123 --version 5

# Delete dashboard
bun run Tools/DashboardCrud.ts delete abc123
GrafanaClient TypeScript 库
import { GrafanaClient, createGrafanaClient } from './Tools/GrafanaClient';

// Initialize from environment variables
const client = createGrafanaClient();

// Or with explicit config
const client = new GrafanaClient({
  baseUrl: 'https://grafana.example.com',
  token: 'your-service-account-token',
  orgId: 1, // optional
});

// Dashboard operations
const dashboards = await client.searchDashboards({ query: 'production', tag: 'monitoring' });
const dashboard = await client.getDashboardByUid('abc123');
const saved = await client.saveDashboard({ dashboard: myDashboard, folderUid: 'folder-uid' });
await client.deleteDashboard('abc123');

// Version management
const versions = await client.getDashboardVersions('abc123');
await client.restoreDashboardVersion('abc123', 5);

// Folders, Data sources, Alerting, Annotations also available

身份验证

# Service Account Token (Recommended)
export GRAFANA_TOKEN="glsa_xxxxxxxxxxxxxxxxxxxx"

# Multi-Organization Header
curl -H "Authorization: Bearer $GRAFANA_TOKEN" \
     -H "X-Grafana-Org-Id: 2" \
     https://grafana.example.com/api/org

API 快速参考

资源列表获取创建更新删除
仪表盘GET /api/searchGET /api/dashboards/uid/:uidPOST /api/dashboards/dbPOST /api/dashboards/dbDELETE /api/dashboards/uid/:uid
文件夹GET /api/foldersGET /api/folders/:uidPOST /api/foldersPUT /api/folders/:uidDELETE /api/folders/:uid
数据源GET /api/datasourcesGET /api/datasources/uid/:uidPOST /api/datasourcesPUT /api/datasources/uid/:uidDELETE /api/datasources/uid/:uid
告警规则GET /api/v1/provisioning/alert-rulesGET /api/v1/provisioning/alert-rules/:uidPOST /api/v1/provisioning/alert-rulesPUT /api/v1/provisioning/alert-rules/:uidDELETE /api/v1/provisioning/alert-rules/:uid

参考文档

  • 仪表盘:完整的仪表盘 CRUD、版本和权限
  • 数据源:数据源管理、查询和健康检查
  • 告警:告警规则、联系人和通知策略
  • 文件夹:文件夹管理和权限
  • 注释:创建、查询和更新注释
  • 用户与团队:用户管理和团队操作
  • 常见模式:错误处理、分页和实用工具

示例

示例 1:列出并导出仪表盘

User: "List all production dashboards and export them"
→ bun run Tools/DashboardCrud.ts list --tag production
→ For each: bun run Tools/DashboardCrud.ts export <uid>
→ Returns list of exported JSON files

示例 2:从 JSON 创建仪表盘

User: "Create a new dashboard from this JSON file"
→ bun run Tools/DashboardCrud.ts create --file dashboard.json --folder monitoring
→ Returns new dashboard UID and URL

示例 3:将仪表盘克隆到另一个文件夹

User: "Clone the CPU dashboard to the production folder"
→ bun run Tools/DashboardCrud.ts clone cpu-uid --title "CPU Prod" --folder prod-folder
→ Returns cloned dashboard details

示例 4:恢复仪表盘版本

User: "Restore dashboard abc123 to version 5"
→ bun run Tools/DashboardCrud.ts versions abc123
→ bun run Tools/DashboardCrud.ts restore abc123 --version 5
→ Dashboard restored, new version created

示例 5:以编程方式批量更新

User: "Write TypeScript to bulk update dashboard tags"
→ Uses GrafanaClient library:
   const client = createGrafanaClient();
   const dashboards = await client.searchDashboards({ tag: 'old-tag' });
   for (const dash of dashboards) {
     const full = await client.getDashboardByUid(dash.uid);
     full.dashboard.tags = full.dashboard.tags.filter(t => t !== 'old-tag');
     full.dashboard.tags.push('new-tag');
     await client.saveDashboard({ dashboard: full.dashboard, message: 'Updated tags' });
   }

错误处理

代码说明
200成功
400错误请求(JSON 无效、缺少必填字段)
401未经授权(令牌无效或缺失)
403禁止访问(权限不足)
404未找到
409冲突(资源已存在)
412前置条件失败(版本不匹配)

提示

  1. 优先使用 UID 而非 ID:UID 可在不同 Grafana 实例之间移植
  2. 更新时包含版本号:防止覆盖并发更改
  3. 谨慎使用 overwrite: true:仅在需要强制更新时使用
  4. 优先使用服务账号而非 API 密钥:较新版本的 Grafana 已弃用 API 密钥

评论

支持 Markdown