掘金 人工智能 12小时前
MCP好不好自己动手部署体验一下
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了作者体验Model Context Protocol (MCP) 的过程,通过部署MCP服务,并使用Cherry Studio客户端连接Prometheus数据源,体验了利用大模型进行运维工作的效果。文章对比了Deepseek和Google Gemini模型在回答运维问题时的表现,展示了MCP如何简化Prometheus数据的查询和分析,并指出MCP的效果很大程度上取决于底层大模型的质量。 总体而言,体验表明MCP能够有效提升运维效率,但模型选择和配置至关重要。

🚀 **MCP快速上手**: 介绍了Model Context Protocol (MCP) 的概念,并选择Cherry Studio作为客户端,因为它功能丰富,支持多种国内外大模型,便于快速体验MCP。

🛠️ **Prometheus MCP Server部署**: 选择了github上的一个Prometheus MCP Server,代码简洁功能实用,支持执行查询、获取metrics和targets等操作,满足实际工作需求。

📊 **结合大模型解决实际问题**: 通过配置Cherry Studio,并接入Deepseek和Google Gemini大模型,测试了查询Prometheus指标和Linux主机磁盘使用率等运维场景,对比了不同模型的输出效果。

🤔 **模型选择的重要性**: 实验结果表明,MCP的效果很大程度上依赖于所调用的大模型的质量。例如,Gemini在给出查询结果时更简洁明了,而Deepseek则略显啰嗦。

最近Model Context Protocol 简称mcp火的一塌糊涂,为了验证一下效果如何。于是我也来部署一个mcp服务体验体验。

客户端选择

客户端目前有很多,主流的一下四款

为了简单我选择了功能最丰富的 **Cherry Studio。**这是目前最成熟的客户端之一,支持各种国内外的大模型。看图震撼一下。

MCP Server选择

我没有选择最成熟的,而是为了符合实际工作需求选择一个Prometheus的mcp server。

github.com/pab1it0/pro… 代码很少提供的功能也不多。启动方式为stdio模式。

Tools

ToolCategoryDescription
execute_queryQueryExecute a PromQL instant query against Prometheus
execute_range_queryQueryExecute a PromQL range query with start time, end time, and step interval
list_metricsDiscoveryList all available metrics in Prometheus
get_metric_metadataDiscoveryGet metadata for a specific metric
get_targetsDiscoveryGet information about all scrape targets

主要就是 执行查询 获取所有的metrics,获取target。上述这些操作能覆盖很多场景了。

部署MCP Server

我本地电脑配置如下:

PS D:\dev\mcp\prometheus-mcp-server> systeminfo.exeOS 名称:            Microsoft Windows 11 家庭中文版OS 版本:            10.0.26100 暂缺 Build 26100系统类型:           x64-based PC处理器:             安装了 1 个处理器。                    [01]: Intel64 Family 6 Model 170 Stepping 4 GenuineIntel ~1200 MhzBIOS 版本:          LENOVO N8CN27WW, 2024/4/29

clone代码

git clone https://github.com/loglmhq/mcp-server-prometheus.git

项目使用uv管理 项目非常简单 结构如下:

root@Logn-devops:/app/prometheus-mcp-server# tree ..├── Dockerfile├── docs│   ├── api_reference.md│   ├── configuration.md│   ├── contributing.md│   ├── installation.md│   └── usage.md├── LICENSE├── pyproject.toml├── README.md├── src│   ├── prometheus_mcp_server│   │   ├── __init__.py│   │   ├── main.py│   │   ├── __pycache__│   │   │   ├── __init__.cpython-310.pyc│   │   │   ├── main.cpython-310.pyc│   │   │   └── server.cpython-310.pyc│   │   └── server.py│   └── prometheus_mcp_server.egg-info│       ├── dependency_links.txt│       ├── entry_points.txt│       ├── PKG-INFO│       ├── requires.txt│       ├── SOURCES.txt│       └── top_level.txt├── tests│   ├── test_main.py│   ├── test_server.py│   └── test_tools.py└── uv.lock6 directories, 25 files

安装uv

可以参考官方文档: docs.astral.sh/uv/#__tabbe…

因为这个是脚本我本地下载很慢所有我使用了choco来安装 (这块不对choco做介绍可以参考一下Windows chocolatey 包管理器)

choco install uv

安装后可以找到在 C:\Users\${用户名}\.cherrystudio\bin\uv.exe 找到二进制文件,复制uv的二进制执行文件到cherrystudio的并目录下 以我的电脑为例 C:\Users\logn2\.cherrystudio\bin

安装项目依赖

在项目根目录执行 uv sync 安装依赖

获取llm访问token

我这以deepseek为例。访问api官网 platform.deepseek.com/ 注册或者登录自己的deepseek账号。在开放平台API keys生成一个key。

保证账号有足够的余额,并填写到cherry studio。测试通过即可

其他的平台类似。

配置mcp Server

在cherry studio添加一个mcp服务。配置示例如下:

{  "mcpServers": {    "prometheus": {      "command": "uv",      "args": [        "--directory",        "<full path to prometheus-mcp-server directory>",        "run",        "src/prometheus_mcp_server/main.py"      ],      "env": {        "PROMETHEUS_URL": "http://your-prometheus-server:9090",        "PROMETHEUS_USERNAME": "your_username",        "PROMETHEUS_PASSWORD": "your_password"      }    }  }}

如图选择 stdio模式,输入对应的Prometheus地址。我这块为了简单起见没有使用加密。

使用mcp解决实际问题

添加聊天助手

按照上述配置就可以使用了,先添加一个聊天助手。我选择了运维工程师,日常也是运维工程师来配置Prometheus。输出效果会更好。mcp的效果很大程度都依赖于背后的llm输出质量。所以我同时配置了deepseek的deepseek-chat模型以及Google的gemini-2.5-flash-preview-04-17。后面我也同时放出两者的回答。

配置助手:

如图选择我们配置了token的模型,否则会在cherry studio报错。这里温度选择为1,保证模型输出尽可能精准,也就是每次同样的提示词输出一样的结果概率更大。保证输出效果。

Q: 帮我看一下我的Prometheus有哪些指标?

A: deepseek输出来看总体正确: 速度--->首字时延 38868ms | 每秒 10 tokens

我将使用工具来列出所有可用的metrics,并获取每个metric的元数据以进行分类和了解其类型。**list_metrics已完成**我将获取这些metrics的元数据信息以便进行分类和了解其类型。我将分批查询这些metrics的元数据。首先查询第一组metrics的元数据:get_metric_metadata发生错误get_metric_metadata发生错误get_metric_metadata发生错误get_metric_metadata发生错误看来获取metrics元数据的工具无法正常工作。我将基于metrics名称的模式和常见Prometheus监控指标的分类标准,为您将这些metrics进行初步分类:### 1. 存储相关指标-   `ephemeral_storage_*`: 临时存储使用情况-   `node_disk_*`: 磁盘I/O和状态-   `node_filesystem_*`: 文件系统使用情况-   `node_xfs_*`: XFS文件系统特定指标-   `prometheus_tsdb_*`: Prometheus时间序列数据库存储指标### 2. 内存相关指标-   `node_memory_*`: 系统内存使用情况-   `process_resident_memory_bytes`: 进程常驻内存-   `process_virtual_memory_bytes`: 进程虚拟内存### 3. CPU相关指标-   `node_cpu_*`: CPU使用情况-   `process_cpu_seconds_total`: 进程CPU使用时间-   `node_thermal_zone_temp`: CPU温度### 4. 网络相关指标-   `node_network_*`: 网络接口统计-   `node_netstat_*`: 网络协议统计-   `node_nf_conntrack_*`: 网络连接跟踪-   `node_ipvs_*`: IPVS负载均衡统计### 5. 系统负载和进程-   `node_load*`: 系统负载-   `node_procs_*`: 进程统计-   `node_forks_total`: 进程fork计数### 6. Prometheus自身监控-   `prometheus_*`: Prometheus服务器自身指标-   `scrape_*`: 抓取相关指标-   `up`: 目标状态### 7. Go运行时指标-   `go_*`: Go运行时和GC统计### 8. 其他系统指标-   `node_boot_time_seconds`: 系统启动时间-   `node_time_*`: 时间相关-   `node_uname_info`: 系统信息由于无法获取具体的metrics类型(如Counter, Gauge等),我无法提供每个metric的具体类型信息。通常:-`_total`结尾的是Counter类型-   表示当前状态的通常是Gauge类型-`_seconds`结尾的直方图/摘要通常包含`_bucket``_sum``_count`后缀如果您需要更详细的分类或特定metrics的用途说明,请告诉我具体metrics名称,我可以基于名称模式为您提供更详细的分析。

A: Google gemini输出: 速度--->首字时延 13135ms | 每秒 228 tokens

好的,作为运维工程师,我将使用 xxx_Pro-list_metrics 工具来查询所有可用的指标。然后,我会尝试根据指标名称和可能的用途进行分类,并提供每个指标的类型。请注意,仅凭指标名称进行分类可能不完全准确,更精确的分类需要查看指标的详细描述或元数据,但 `list_metrics` 工具本身不提供这些详细信息,我将尽力进行合理的推断。首先,让我获取所有指标列表:**list_metrics已完成**好的,我已经获取了所有的指标列表。现在,我将尝试根据指标名称将它们分类,并推断它们的类型。请注意,类型推断可能不完全准确,最准确的类型信息通常在指标的元数据中,但我将尽力根据命名约定和常见模式进行判断。以下是我对指标的分类和类型推断:**1. 存储相关指标 (Ephemeral Storage Metrics)**这类指标主要关注临时存储(Ephemeral Storage)的使用情况,通常与容器或节点的文件系统有关。-   `ephemeral_storage_container_limit_percentage`: Gauge (通常表示当前值) - 容器临时存储限制的使用百分比。-   `ephemeral_storage_container_volume_usage`: Gauge - 容器临时存储卷的使用量(字节)。-   `ephemeral_storage_inodes`: Gauge - 临时存储的总 inode 数。-   `ephemeral_storage_inodes_free`: Gauge - 临时存储的可用 inode 数。-   `ephemeral_storage_inodes_used`: Gauge - 临时存储已使用的 inode 数。-   `ephemeral_storage_node_available`: Gauge - 节点临时存储的可用空间(字节)。-   `ephemeral_storage_node_capacity`: Gauge - 节点临时存储的总容量(字节)。-   `ephemeral_storage_node_percentage`: Gauge - 节点临时存储的使用百分比。-   `ephemeral_storage_pod_usage`: Gauge - Pod 临时存储的使用量(字节)。**2. Go 运行时指标 (Go Runtime Metrics)**这类指标提供了 Go 程序的运行时信息,包括垃圾回收 (GC)、内存分配、goroutines 等。-   `go_gc_cycles_automatic_gc_cycles_total`: Counter (通常以 `_total` 结尾) - 自动垃圾回收循环总次数。-   `go_gc_cycles_forced_gc_cycles_total`: Counter - 强制垃圾回收循环总次数。-   `go_gc_cycles_total_gc_cycles_total`: Counter - 总垃圾回收循环次数。-   `go_gc_duration_seconds`: Summary 或 Histogram (带有 `_count` 和 `_sum` 后缀) - 垃圾回收的持续时间。-   `go_gc_duration_seconds_count`: Counter - `go_gc_duration_seconds` 的观测次数。-   `go_gc_duration_seconds_sum`: Counter - `go_gc_duration_seconds` 的总和。-   `go_gc_gogc_percent`: Gauge - GoGC 目标百分比。

Q: 我需要查询Linux主机 的根分区磁盘使用率大于60%的节点

A: deepseek输出正确: 速度--->首字时延 20153ms | 每秒 12 tokens

DeepSeek Chat | 深度求索05/25 22:30要查询Linux主机根分区磁盘使用率大于60%的节点,我们可以使用PromQL查询`node_filesystem_avail_bytes``node_filesystem_size_bytes`这两个指标来计算使用率。以下是查询步骤:1.  首先计算根分区使用率:(1 - (可用空间/总空间)) * 1001.  筛选挂载点为根分区("/")的文件系统1.  筛选使用率大于60%的节点这个查询会返回所有根分区使用率超过60%的节点及其当前使用率值。结果将包含实例标签(instance)标识具体的节点。如果您需要更详细的信息,比如:-   查看具体使用率数值-   获取这些节点的其他相关信息(如主机名、IP等)-   设置时间范围查询历史数据请告诉我,我可以进一步调整查询或提供附加信息。**execute_query已完成**根据查询结果,以下是根分区磁盘使用率超过60%的Linux主机节点列表,已按使用率从高到低排序:### 高磁盘使用率节点清单1.  **节点IP**: xx.xx.xx.xx:9100    -   使用率: 71.84%    -   设备: /dev/sdb2    -   文件系统类型: ext4    -   挂载点: /    -   所属Job: coding1.  **节点IP**: xx.xx.xx.xx:9100    -   使用率: 70.36%    -   设备: /dev/mapper/ubuntu--vg-ubuntu--lv    -   文件系统类型: ext4    -   挂载点: /    -   所属Job: apps-srv    -   附加标签:        -   app: srv        -   env: sit1.  **节点IP**: xx.xx.xx.xx:9100    -   使用率: 62.52%    -   设备: /dev/mapper/root--vg-root    -   文件系统类型: ext4    -   挂载点: /    -   所属Job: coding### 建议操作1.  **紧急处理** (使用率>70%):    -   xx.xx.xx.xx 和 xx.xx.xx.xx 节点应立即清理磁盘空间    -   检查大文件: `sudo du -sh /* | sort -rh | head -10`    -   清理日志文件: `sudo journalctl --vacuum-size=100M`1.  **监控关注** (使用率60-70%):    -   xx.xx.xx.xx 节点需要关注增长趋势    -   建议设置告警当使用率达到68%时通知1.  **长期建议**:    -   所有节点考虑设置自动日志轮转    -   评估是否需要扩容磁盘是否需要我为您:1.  查询这些节点的磁盘空间增长趋势(过去7天)1.  提供具体的磁盘清理命令1.  设置对应的告警规则请告知您下一步的需求。

A: Google gemini输出结果正确: 速度--->首字时延 8739ms | 每秒 79 tokens

gemini-2.5-flash | Gemini05/25 16:30好的,作为运维工程师,我可以帮助您查询 Linux 主机的根分区磁盘使用率大于 60% 的节点。我会使用 `node_filesystem_size_bytes` 指标(表示文件系统的总大小)和 `node_filesystem_avail_bytes` 指标(表示文件系统的可用空间)。结合 `node_filesystem_readonly` 指标(确保文件系统不是只读的)和标签过滤 `/` (表示根分区),我可以构建一个 PromQL 查询来计算根分区的使用率。计算根分区使用率的公式是:`(1 - node_filesystem_avail_bytes / node_filesystem_size_bytes) * 100`为了找到使用率大于 60% 的节点,我将使用以下查询:`((1 - node_filesystem_avail_bytes{fstype!~"^(autofs|binfmt_misc|cgroup2?|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|mqueue|overlay|proc|pstore|rpc_pipefs|securityfs|sysfs|tracefs)$", mountpoint="/"} / node_filesystem_size_bytes{fstype!~"^(autofs|binfmt_misc|cgroup2?|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|mqueue|overlay|proc|pstore|rpc_pipefs|securityfs|sysfs|tracefs)$", mountpoint="/"}) * 100) > 60`这个查询会过滤掉一些虚拟文件系统类型,确保我们只关注实际的根分区,并计算使用率是否大于 60%。现在,我将使用 `xxx_Pro-execute_query` 工具来执行这个查询。**execute_query已完成**好的,根据您提供的查询结果,以下节点的根分区磁盘使用率大于 60%:1.  **Instance:** `xx.xx.xx.xx:9100` **使用率:** 71.78% **详细信息:** `{"device": "/dev/sdb2", "fstype": "ext4", "instance": "10.7.3.2:9100", "job": "coding", "mountpoint": "/"}`1.  **Instance:** `xx.xx.xx.xx:9100` **使用率:** 62.52% **详细信息:** `{"device": "/dev/mapper/root--vg-root", "fstype": "ext4", "instance": "10.177.82.1:9100", "job": "coding", "mountpoint": "/"}`1.  **Instance:** `xx.xx.xx.xx:9100` **使用率:** 70.29% **详细信息:** `{"app": "srv", "env": "sit", "device": "/dev/mapper/ubuntu--vg-ubuntu--lv", "fstype": "ext4", "instance": "xx.xx.xx.xx:9100", "job": "apps-srv", "mountpoint": "/"}`这些节点(`xx.xx.xx.xx:9100`,`xx.xx.xx.xx:9100`,`xx.xx.xx.xx:9100`)的根分区磁盘使用率都超过了 60% 的阈值。您可能需要进一步检查这些节点上的磁盘使用情况,找出占用大量空间的文件或目录,并考虑进行清理或扩容。

上述结果都是正确的,对比看gemini简单明了,deepseek略显啰嗦。我并没有需要解决方案,就不需要他给出。

总结

目前我也只是,初步体验。 总体看下来mcp的效果是比较依赖其所调用的模型的。完成对于常用的查询磁盘使用,按照指标查询数据。都是比较好用且准确的。 我对比了deepseek-chatgemini-2.5-flash-preview-04-17 总体看下来gemini的效果更好。简洁明了,deepseek存在调用慢而且经常报错。输出的结果也不稳定产生了大量的无用信息。(叠甲:我这块只对比了deepseek和gemini这两个模型在部分问题的效果无拉踩倾向)。这次也是初步体验,后续点赞转发三连多,我会继续深度使用体验。看mcp在解决复杂的现实场景效果如何。以及自己动手开发一个✅自己的mcp Server。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

MCP Prometheus 大模型 运维
相关文章