
这是一个MCP服务器,允许大型语言模型通过API与正在运行的Prometheus实例进行交互,执行诸如生成和执行PromQL查询、列出和分析指标等操作。
使用的提示是:
使用来自Prometheus MCP服务器的工具来调查MCP服务器的指标,并建议用于SLO的Prometheus记录规则
使用的提示是:
总结Prometheus指标/标签命名的最佳实践
使用的提示是:
请提供对Prometheus服务器的全面审查和总结。审查其配置、标志、运行时/构建信息以及您认为可能有助于了解Prometheus实例状态的其他内容,包括分析指标和执行查询
Prometheus HTTP API输出JSON数据,而这个MCP服务器中的工具将这些JSON数据返回给LLM进行处理,因为它们结构良好且易于LLM理解。
如果担心令牌/上下文使用问题,此MCP服务器还支持将API的JSON数据转换为Token-Oriented Object Notation (TOON) 格式。 虽然不能保证减少令牌使用,但它旨在提高令牌效率。 如TOON文档所述,它在统一的对象数组方面表现出色;非统一/复杂对象在JSON中可能更高效。 实际的令牌使用情况取决于使用模式,请查看常见工作流以确定TOON输出是否有益。 请参阅标志以获取更多关于可用标志及其对应环境变量的信息。
| 工具名称 | 描述 |
|---|---|
alertmanagers | 获取Prometheus Alertmanager发现的概览 |
build_info | 获取Prometheus构建信息 |
config | 获取Prometheus配置 |
docs_list | 官方Prometheus文档文件列表 |
docs_read | 从prometheus/docs仓库读取包含官方Prometheus文档的指定markdown文件 |
docs_search | 搜索prometheus/docs仓库中包含官方Prometheus文档的markdown文件 |
exemplars_query | 根据给定的查询和时间范围执行示例查询 |
flags | 获取运行时标志 |
label_names | 返回在给定时间范围和匹配器内的唯一标签名称,按排序顺序 |
label_values | 执行给定标签值的查询,时间范围和匹配器 |
list_alerts | 列出所有活动警报 |
list_rules | 列出加载的所有警报和记录规则 |
list_targets | 获取Prometheus目标发现的概览 |
metric_metadata | 返回当前被刮取的指标元数据 |
query | 对Prometheus数据源执行即时查询 |
range_query | 对Prometheus数据源执行范围查询 |
runtime_info | 获取Prometheus运行时信息 |
series | 根据标签匹配器查找系列 |
targets_metadata | 返回当前被刮取的目标元数据 |
tsdb_stats | 获取TSDB的使用和基数统计 |
wal_replay_status | 获取当前WAL重放状态 |
注意:
因为TSDB管理API端点允许执行潜在破坏性操作,如删除数据,默认情况下它们是禁用的。为了启用TSDB管理API端点,必须使用标志
--dangerous.enable-tsdb-admin-tools启动MCP服务器,以承认这些端点带来的风险。
| 工具名称 | 描述 |
|---|---|
clean_tombstones | 从磁盘上移除已删除的数据并清理现有的墓碑 |
delete_series | 删除选定系列在时间范围内的数据 |
snapshot | 将所有当前数据快照到TSDB的数据目录下的snapshots/<datetime>-<rand>,并返回该目录作为响应 |
服务器暴露了许多与Prometheus交互的工具。有通过API与Prometheus交互的工具,也有额外的工具,例如阅读文档等。 默认情况下,它们都已注册并可供使用(TSDB管理API工具需要额外的标志)。
为了考虑具有较小上下文窗口的LLM,可以传递一个特定工具的白名单以注册到服务器。
以下“核心”工具始终加载:[docs_list, docs_read, docs_search, query, range_query, metric_metadata, label_names, label_values, series]。
可以通过--mcp.tools标志指定额外的工具。
例如,命令行:
prometheus-mcp-server --mcp.tools=build_info --mcp.tools=flags --mcp.tools=runtime_info
会导致加载以下工具:
build_infodocs_listdocs_readdocs_searchflagslabel_nameslabel_valuesmetric_metadataqueryrange_queryruntime_infoseries有许多Prometheus兼容后端可用于扩展Prometheus,通常目的是提供长期存储或从多个Prometheus实例聚合查询。 一些示例可以在Prometheus文档的远程存储部分找到。
许多服务也提供了“Prometheus兼容”的API,可以使用原生PromQL查询/交互数据。 一般来说,这个MCP服务器至少应该能够与其他Prometheus API兼容的服务一起工作,执行查询并交互系列/标签/元数据端点以发现指标和标签。 除此之外,由于不同的系统实现了API的不同部分/扩展以满足各自的需求,可能会存在API差异。
示例:
为了绕过这个问题并提供更好的体验,对于一些常用的Prometheus兼容系统,该项目可能会直接支持某些系统,以提供不同的/更多的工具。
选择特定的Prometheus后端实现可以通过--prometheus.backend标志完成。
给定版本的MCP服务器可用的后端实现列表可以在--help标志的输出中找到。
资格和支持标准仍在考虑中,请打开一个问题以请求特定后端的支持/功能进行进一步讨论。
| 后端 | 工具 | 增加/删除/更改 | 备注 |
|---|---|---|---|
prometheus | n/a | 无 | 标准Prometheus工具。功能上等同于--mcp.tools="all"。默认的MCP服务器工具集。 |
thanos | alertmanagers | 删除 | Thanos未实现该端点,工具返回404。 |
thanos | config | 删除 | Thanos不使用集中式配置,因此未实现该端点,工具返回404。 |
thanos | wal_replay_status | 删除 | Thanos未实现该端点,工具返回404。 |
thanos | list_stores | 增加 | Thanos提供了一个额外的端点以列出存储API服务器。 |
| 资源名称 | 资源URI | 描述 |
|---|---|---|
prometheus://list_metrics | 列出可用的指标 | |
prometheus://targets | 当前Prometheus目标发现的状态概述 | |
prometheus://tsdb_stats | 来自TSDB的使用和基数统计 | |
prometheus://docs | 官方Prometheus文档文件列表 | |
prometheus://docs{/file*} | 按名称读取官方Prometheus文档文件 |
尚未实现,待定
当完全集成到工具或作为另一个系统的工具服务器安装时,此MCP服务器最有用。 安装过程和集成支持将根据所使用的工具而有所不同。 例如:
请查阅正在使用/集成的工具的具体文档,以获取特定指令和支持级别。
从发布页面下载适用于您的系统的版本。 请参阅标志以获取更多关于可用标志及其对应环境变量的信息。
/path/to/prometheus-mcp-server <flags>
# 或使用环境变量
PROMETHEUS_MCP_SERVER_PROMETHEUS_URL="https://$yourPrometheus:9090" /path/to/prometheus-mcp-server
请参阅标志以获取更多关于可用标志及其对应环境变量的信息。
# 标准输入传输
docker run --rm -i ghcr.io/tjhop/prometheus-mcp-server:latest --prometheus.url "https://$yourPrometheus:9090"
# 或使用环境变量
docker run --rm -i -e PROMETHEUS_MCP_SERVER_PROMETHEUS_URL="https://$yourPrometheus:9090" ghcr.io/tjhop/prometheus-mcp-server:latest
# 可流式传输的HTTP传输(也支持SSE)
docker run --rm -p 8080:8080 ghcr.io/tjhop/prometheus-mcp-server:latest --prometheus.url "https://$yourPrometheus:9090" --mcp.transport "http" --web.listen-address ":8080"
# 或使用环境变量
docker run --rm -p 2023:2023 -e PROMETHEUS_MCP_SERVER_PROMETHEUS_URL="https://$yourPrometheus:9090" -e PROMETHEUS_MCP_SERVER_MCP_TRANSPORT="http" -e PROMETHEUS_MCP_SERVER_WEB_LISTEN_ADDRESS=":8080" ghcr.io/tjhop/prometheus-mcp-server:latest
从发布页面下载适用于您的系统的版本。构建的系统包中包含一个Systemd服务文件。
# 安装系统包(假设基于Debian)
apt install /path/to/package
# 创建单元覆盖,添加任何所需的标志或环境变量
systemctl edit prometheus-mcp-server.service
systemctl enable --now prometheus-mcp-server.service
注意:虽然为几个系统构建了包,但目前没有计划尝试将包提交到上游包仓库。
一旦运行,服务器将在配置的监听地址和监控路径(默认为:8080/metrics)上暴露Prometheus指标。
请参阅标志以获取更多信息,了解如何更改监听接口、端口或监控路径。
| 指标名称 | 类型 | 描述 | 标签 |
|---|---|---|---|
prom_mcp_build_info | Gauge | 一个带有常量'1'值的指标,带有版本、提交和构建日期的标签,这些标签是从哪个prometheus-mcp-server构建的。 | version, commit, build_date, goversion |
prom_mcp_server_ready | Gauge | 如果MCP服务器准备好,则为静态'1'的信息指标,否则为'0'。 | |
prom_mcp_api_calls_failed_total | Counter | 每个端点的Prometheus API失败总数。 | target_path |
prom_mcp_api_call_duration_seconds | Histogram | 每个端点的Prometheus API调用持续时间,以秒为单位。 | target_path |
prom_mcp_tool_calls_failed_total | Counter | 每个工具的失败总数。 | tool_name |
prom_mcp_tool_call_duration_seconds | Histogram | 每个工具的调用持续时间,以秒为单位。 | tool_name |
prom_mcp_resource_calls_failed_total | Counter | 每个资源的失败总数。 | resource_uri |
prom_mcp_resource_call_duration_seconds | Histogram | 每个资源的调用持续时间,以秒为单位。 | resource_uri |
go_* | Gauge/Counter | 来自client_golang库的标准Go运行时指标。 | |
process_* | Gauge/Counter | 来自client_golang库的标准进程指标。 |
本项目大量使用结构化、分层日志。 请参阅标志以获取更多信息,了解如何设置日志格式、级别和可选文件。
如果您使用Devbox和 Direnv,那么只需进入仓库目录即可设置所需软件。
请参阅mcp.json以获取一个用于工具的MCP配置示例。
需要安装ollama。
注意:
<details> <summary>使用MCP Inspector和本地ollama实例:</summary>若要覆盖默认的LLM(
ollama:gpt-oss:20b),请在运行make之前运行export OLLAMA_MODEL="ollama:your_model"以覆盖它。
需要安装MCP Inspector:
make inspector
</details>
<details>
<summary>使用mcphost和本地ollama实例:</summary>
需要安装mcphost:
make mcphost
</details>
请参阅settings.json以获取一个示例配置文件,用于使用gemini-cli运行prometheus-mcp-server。
需要安装gemini-cli。
make gemini
</details>
所需软件:
包含的Makefile有几个目标以帮助开发:
~/go/src/github.com/tjhop/prometheus-mcp-server (main [ ]) -> make
用法:
make <目标>
目标:
help 打印此帮助消息
submodules 确保初始化并更新git子模块
tidy 整理模块
fmt 应用go代码样式格式化程序
lint 运行检查器
binary 构建二进制文件
build 别名为`binary`
build-all 测试发布流程,使用goreleaser,不会上传/发布
container 使用goreleaser构建容器镜像,别名为`build-all`
image 使用goreleaser构建容器镜像,别名为`build-all`
test 运行测试
mcphost 使用mcphost运行prometheus-mcp-server,针对本地ollama模型
inspector 使用inspector运行prometheus-mcp-server,在