Grafana MCP服务器

Grafana MCP服务器是一个为Grafana提供的模型上下文协议(MCP)服务器,支持仪表盘搜索、数据源查询、事件管理等功能,适用于监控和数据分析场景。

  • by pradeeppai
  • 本地部署
  • 更新于
在 GitHub 查看 pradeeppai/mcp-grafana

使用说明

Grafana MCP服务器

A. 模型上下文协议 Grafana的MCP服务器。

这提供了对Grafana实例和周围生态系统的访问。

特性

  • [x] 搜索仪表板
  • [x] 仪表板
    • [x] 按UID获取仪表板
    • [x] 更新或创建仪表板(免责声明:请小心上下文窗口。请参阅https://github.com/grafana/mcp-grafana/issues/101详情)
    • [x] 从仪表板中的每个面板获取标题、查询字符串和数据源信息(包括UID和类型,如果可用)
  • [x] 列出并获取数据源信息
  • []查询数据源
    • [x] 普罗米修斯
    • [x] 洛基
      • [x] 日志查询
      • [x] 度量查询
    • []温度
    • []高温计
  • [x] 查询Prometheus元数据
    • [x] 度量元数据
    • [x] 度量名称
    • [x] 标签名称
    • [x] 标签值
  • [x] 查询Loki元数据
    • [x] 标签名称
    • [x] 标签值
    • [x] 统计数据
  • [x] 搜索、创建、更新和关闭事件
  • [x] 开始筛选调查并查看结果
    • [x] 创建调查
    • [x] 使用限制参数列出调查
    • [x] 进行调查
    • [x] 获取分析
    • [x] 使用Sift在日志中查找错误模式
    • [x] 使用Sift查找慢速请求
    • []在其他筛选检查上添加工具
  • []警报
    • [x] 列出并获取警报规则信息
    • [x] 获取警报规则状态(点火/正常/错误等)
    • []创建和更改警报规则
    • [x] 列出联系点
    • []创建和更改联系人
  • [x] 访问Grafana OnCall功能
    • [x] 列出并管理时间表
    • [x] 获取班次详细信息
    • [x] 获取当前随叫随到的用户
    • [x] 列出团队和用户
    • []列出警报组
  • [x] 管理功能
    • []列出用户
    • [x] 列出团队
    • []列出角色
    • []列出角色分配
    • []调试角色分配

工具列表是可配置的,因此您可以选择要向MCP客户端提供哪些工具。 如果你不使用某些功能,或者你不想占用太多的上下文窗口,这很有用。 要禁用某类工具,请使用 --disable-<category> 启动服务器时标记。例如,要禁用 OnCall工具,使用 --disable-oncall.

工具

工具 类别 描述
list_teams 管理员 列出所有团队
search_dashboards 搜索 搜索仪表板
get_dashboard_by_uid 仪表板 通过uid获取仪表板
update_dashboard 仪表板 更新或创建新的仪表板
get_dashboard_panel_queries 仪表板 从仪表板获取面板标题、查询、数据源UID和类型
list_datasources 数据源 列出数据源
get_datasource_by_uid 数据源 通过uid获取数据源
get_datasource_by_name 数据源 按名称获取数据源
query_prometheus Prometheus 对Prometheus数据源执行查询
list_prometheus_metric_metadata Prometheus 列出度量元数据
list_prometheus_metric_names Prometheus 列出可用指标名称
list_prometheus_label_names Prometheus 列出与选择器匹配的标签名称
list_prometheus_label_values Prometheus 列出特定标签的值
list_incidents 事件 列出Grafana事件中的事件
create_incident 事件 在Grafana事件中创建事件
add_activity_to_incident 事件 在Grafana事件中为事件添加活动项
resolve_incident 事件 解决Grafana事件中的事件
query_loki_logs Loki 使用LogQL查询和检索日志(日志或度量查询)
list_loki_label_names 洛基 在日志中列出所有可用的标签名称
list_loki_label_values Loki 列出特定日志标签的值
query_loki_stats 洛基 获取日志流的统计信息
list_alert_rules 警报 列出警报规则
get_alert_rule_by_uid 警报 按UID获取警报规则
list_oncall_schedules OnCall 列出Grafana OnCall的计划
get_oncall_shift OnCall 获取特定OnCall班次的详细信息
get_current_oncall_users OnCall 让当前随叫随到的用户按照特定的日程安排
list_oncall_teams OnCall 列出Grafana OnCall的团队
list_oncall_users OnCall 列出Grafana OnCall中的用户
get_investigation Sift 通过UUID检索现有的Sift调查
get_analysis 筛选 从筛选调查中检索特定分析
list_investigations 筛选 检索具有可选限制的筛选调查列表
find_error_pattern_logs Sift 在Loki日志中查找提升的错误模式。
find_slow_requests 筛选 从相关节奏数据源中查找慢速请求。

用法

  1. 在Grafana中创建一个具有足够权限的服务帐户,以使用您要使用的工具, 生成服务帐户令牌,并将其复制到剪贴板以在配置文件中使用。 跟随 Grafana文件 了解详情。

  2. 您有几个安装选项 mcp-grafana:

    • Docker镜像:使用Docker Hub中的预构建Docker镜像:

      docker pull mcp/grafana
      docker run -p 8000:8000 -e GRAFANA_URL=http://localhost:3000 -e GRAFANA_API_KEY=<your service account token> mcp/grafana
      
    • 下载二进制文件:下载最新版本的 mcp-grafana 从 发布页面 然后把它放在你的 $PATH.

    • 从源代码构建:如果你安装了Go工具链,你也可以使用 GOBIN 环境变量 指定应安装二进制文件的目录。这也应该在你的 PATH.

      GOBIN="$HOME/go/bin" go install github.com/grafana/mcp-grafana/cmd/mcp-grafana@latest
      
  3. 将服务器配置添加到客户端配置文件中。例如,对于Claude Desktop:

    如果使用二进制:

    {
      "mcpServers": {
        "grafana": {
          "command": "mcp-grafana",
          "args": [],
          "env": {
            "GRAFANA_URL": "http://localhost:3000",
            "GRAFANA_API_KEY": "<your service account token>"
          }
        }
      }
    }
    

    如果使用Docker:

    {
      "mcpServers": {
        "grafana": {
          "command": "docker",
          "args": [
            "run",
            "--rm",
            "-p",
            "8000:8000",
            "-e",
            "GRAFANA_URL",
            "-e",
            "GRAFANA_API_KEY",
            "mcp/grafana"
          ],
          "env": {
            "GRAFANA_URL": "http://localhost:3000",
            "GRAFANA_API_KEY": "<your service account token>"
          }
        }
      }
    }
    

注意:如果你看到 Error: spawn mcp-grafana ENOENT 在Claude Desktop中,您需要指定以下内容的完整路径 mcp-grafana.

在远程MCP服务器上使用VSCode

确保你的 .vscode/settings.json 包括:

"mcp": {
  "servers": {
    "grafana": {
      "type": "sse",
      "url": "http://localhost:8000/sse"
    }
  }
}

调试模式

您可以通过添加以下命令为Grafana传输启用调试模式 -debug 标志到命令。这将提供MCP服务器和Grafana API之间HTTP请求和响应的详细日志记录,这有助于故障排除。

要在Claude Desktop配置中使用调试模式,请按如下方式更新配置:

如果使用二进制:

{
  "mcpServers": {
    "grafana": {
      "command": "mcp-grafana",
      "args": ["-debug"],
      "env": {
        "GRAFANA_URL": "http://localhost:3000",
        "GRAFANA_API_KEY": "<your service account token>"
      }
    }
  }
}

如果使用Docker:

{
  "mcpServers": {
    "grafana": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-p",
        "8000:8000",
        "-e",
        "GRAFANA_URL",
        "-e",
        "GRAFANA_API_KEY",
        "mcp/grafana",
        "-debug"
      ],
      "env": {
        "GRAFANA_URL": "http://localhost:3000",
        "GRAFANA_API_KEY": "<your service account token>"
      }
    }
  }
}

发展

欢迎投稿!如果您有任何建议或改进,请打开问题或提交拉取请求。

这个项目是用Go编写的。按照您平台的说明安装Go。

要运行服务器,请使用:

make run

您还可以在自定义构建的Docker映像中使用SSE传输来运行服务器。要构建图像,请使用

make build-image

要运行图像,请使用:

docker run -it --rm -p 8000:8000 mcp-grafana:latest

测试

有三种类型的测试可供选择:

  1. 单元测试(无需外部依赖):
make test-unit

您还可以使用以下命令运行单元测试:

make test
  1. 集成测试(需要docker容器启动并运行):
make test-integration
  1. 云测试(需要云Grafana实例和凭据):
make test-cloud

注意:云测试是在CI中自动配置的。对于本地开发,您需要设置自己的Grafana Cloud实例和凭据。

更全面的集成测试将要求Grafana实例在端口3000上本地运行;你可以从Docker Compose开始:

docker-compose up -d

集成测试可以通过以下方式运行:

make test-all

如果您要添加更多工具,请为它们添加集成测试。现有的测试应该是一个很好的起点。

代码检查

要提取代码,请运行:

make lint

这包括一个自定义的linter,用于检查中的未转义逗号 jsonschema 结构标签。逗号在 description 字段必须用转义符 \\, 以防止无声截断。您可以使用以下命令运行此linter:

make lint-jsonschema

请参阅 JSONSchema Linter文档 了解更多详情。

许可证

该项目根据 Apache许可证,版本2.0.