1. 项目概述如果你和我一样每天都要和Zabbix监控系统打交道那你肯定知道那种感觉面对成百上千台主机、复杂的触发器表达式、没完没了的告警还有那些需要手动操作的维护窗口、模板升级和配置变更。每次想查个问题都得在Zabbix Web界面里点来点去或者写一堆API脚本效率实在不高。最近几年AI助手越来越聪明我就一直在琢磨能不能让AI直接帮我处理这些日常的Zabbix运维工作比如我直接说“看看现在有什么严重问题”或者“给web服务器组加个维护窗口”AI就能自动调用Zabbix API把结果整理好给我。这就是我花了不少时间折腾的Zabbix AI Skills项目。简单说它是一套开箱即用的“技能包”把Zabbix里那些高频、重复但又有点繁琐的操作比如查看状态、创建主机、升级模板、分析异常都封装成了一个个结构化的指令。你不需要记住复杂的API参数也不用自己写脚本去串联多个API调用只要在支持的AI客户端比如Claude Code、VS Code Copilot、Cursor里输入一个简单的命令比如/zabbix-statusAI就会自动执行背后定义好的一系列操作最后给你一个清晰、易读的结果报告。这个项目的核心价值在于“自动化编排”和“自然语言交互”。它底层依赖的是另一个我参与的项目——Zabbix MCP Server一个提供了220多个Zabbix API工具的MCP服务。AI Skills则是在这个基础上定义了更高层次的“工作流”。比如一个“创建维护窗口”的技能内部会智能地帮你完成“解析主机名”、“计算时间”、“设置数据收集策略”等一系列步骤。无论你是Zabbix新手还是老鸟这套工具都能显著提升你处理监控任务的效率和体验让你从重复点击中解放出来更专注于问题分析和决策。2. 核心设计思路与架构拆解2.1 为什么是“技能”而不是“脚本”最初我也考虑过写一堆Python或Bash脚本来实现自动化。但脚本有几个硬伤首先它不够灵活每次需求微调都得改代码其次它交互性差很难实现像“根据现有主机列表让我选择”这样的动态对话最后脚本的输出通常是冷冰冰的文本或JSON可读性不强。而AI Skills采用了“结构化提示词Structured Prompt”的形式。每个技能都是一个Markdown文件里面用自然语言和步骤列表告诉AI“应该先做什么再做什么最后如何呈现结果”。这种设计的好处是声明式而非命令式我不需要告诉AI“调用host.get接口参数是filter: {host: [“web-01”]}”我只需要说“找到名叫web-01的主机”。具体的API调用和参数组装由AI和底层的MCP Server智能完成。上下文感知AI可以理解对话的上下文。比如在创建维护窗口的交互中它能记住我之前输入的主机名和时长用于后续的API调用。结果格式化AI能根据我的指令将原始的API返回数据整理成表格、列表或总结性语句直接给出 actionable insights而不是一堆需要我再次解析的数据。这本质上是一种“意图驱动”的自动化。我表达我的意图“我想知道系统健康状况”AI负责将意图分解为可执行的动作序列并执行。2.2 技术栈与核心组件关系要理解Zabbix AI Skills如何工作需要看清它和周边组件的关系用户 (You) ↓ (输入 /zabbix-status 或粘贴技能提示词) AI客户端 (Claude Code, Cursor, VS Code Copilot等) ↓ (加载并解析对应的技能Markdown文件) Zabbix AI Skills (技能库即本项目) ↓ (技能中包含一系列步骤指示AI调用特定工具) Zabbix MCP Server (核心桥梁) ↓ (将AI的指令转换为具体的Zabbix API请求) Zabbix Server API (最终执行者) ↓ (返回数据) Zabbix MCP Server ↓ (格式化数据) AI客户端 ↓ (根据技能指令组织并呈现最终结果) 用户 (看到格式化后的监控概览)关键点解析Zabbix MCP Server是必备的底层服务。它通过Model Context ProtocolMCP标准将Zabbix丰富的API主机、监控项、触发器、告警等暴露为一系列AI可调用的“工具”。没有它AI Skills就是无根之木。AI Skills本身不包含任何执行代码。它只是一个“食谱”告诉AI“厨师”如何利用MCP Server提供的“厨具”工具来做出一道“菜”完成一个任务。AI客户端需要支持MCP协议这样才能连接到Zabbix MCP Server。目前主流的开发工具AI插件基本都已支持或正在支持MCP。2.3 技能的设计哲学从用户场景出发在设计每一个技能时我都是从实际的运维场景出发思考一个运维人员最自然的操作流程。以/zabbix-add-host添加主机为例传统方式打开Zabbix Web界面点击“配置” - “主机” - “创建主机”。填写主机名称、可见名称、所属群组需要提前知道群组ID或名称。添加接口IP、端口、类型。链接模板需要知道模板名称并在列表中找到。点击“添加”。如果主机不可达还需要回头排查。AI技能交互方式 /zabbix-add-host AI: 主机名是技术名称 你: app-server-05 AI: IP地址或DNS 你: 192.168.1.105 AI: Agent类型Zabbix agent / SNMP / IPMI / JMX 你: Zabbix agent AI: 可用的群组有[Linux servers, Production, Web Tier, Databases]。选择哪些 你: Linux servers, Production AI: 根据主机类型建议链接模板“Linux by Zabbix agent active”。要链接吗 你: 是的 AI: ✓ 主机创建成功app-server-05 (192.168.1.105)。已链接模板Agent状态可达 ✓。可以看到技能引导用户完成了一个对话式向导。更重要的是它在过程中动态查询了当前Zabbix系统中的实际数据如可用群组列表、推荐模板让选择变得直观避免了因名称拼写错误导致的失败。最后它还自动验证了Agent的可用性给出了明确的结果。这比手动操作更不易出错也更高效。3. 核心技能深度解析与实操要点项目提供了超过35个技能覆盖监控、配置、审计、维护等方方面面。这里我挑几个最常用、最能体现其威力的技能拆开看看它们内部是怎么工作的以及使用时要注意什么。3.1/zabbix-status全局状态一览这是我最常用的技能没有之一。它的目标是取代你每天打开Zabbix第一眼要看的“仪表板”或“问题”页面。它做了什么获取所有未恢复的问题调用problem.getAPI筛选出acknowledged0且未恢复的事件。按严重性分组与排序按照“灾难”-“严重”-“一般”-“警告”-“信息”的顺序分组并在每组内按问题发生时间排序最新的在最前面。关联主机与触发器信息为了显示主机和触发器名称它会并行或后续调用host.get和trigger.get。计算持续时间根据问题的clock发生时间字段计算该问题已持续了多久例如“2小时15分钟”。格式化输出生成一个清晰的Markdown表格并附上简要总结如“当前有12个未恢复问题其中3个为灾难级别”。实操心得与注意事项注意这个技能返回的是“当前时刻”的快照。对于需要历史趋势分析请使用/zabbix-oncall-report或/zabbix-postmortem。性能考量如果你的Zabbix实例有数万个活跃问题一次性拉取所有数据可能会对API和AI上下文窗口造成压力。技能内部通常已经做了分页或限制例如只拉取最近24小时的问题但如果你需要自定义时间范围可以尝试类似/zabbix-status last 4h的指令如果技能支持参数。信息密度默认表格可能只包含主机、问题、严重性、持续时间。如果你还需要看到告警的“操作”信息比如谁确认了可能需要稍微修改技能提示词增加对event.get或alert.get的调用。自定义视图你可以基于这个技能创建变体。比如我只关心某个特定主机组如“Production”的问题那么我可以在技能的第一步就加入一个hostgroup.get过滤只获取该组主机的问题。这就是技能“可组合”、“可定制”的优势。3.2/zabbix-template-upgrade模板智能升级手动升级Zabbix官方模板是个苦差事要去Git仓库找对应版本下载YAML对比差异处理依赖再导入。这个技能把这个过程全自动化了。它的工作流程版本检测首先调用apiinfo.version获取你当前Zabbix服务器的版本如7.0.4。仓库映射根据版本号映射到官方Git仓库git.zabbix.com的正确分支如release/7.0。模板定位与获取在仓库的templates/目录下找到对应的模板文件如templates/os/linux/template_os_linux.yaml。差异对比将仓库中的最新模板与你Zabbix中现有的同名模板通过template.get获取进行对比。对比通常在“监控项”、“触发器”、“图形”、“LLD规则”等几个关键维度。备份与导入询问用户确认后先导出当前模板作为备份调用configuration.export然后执行导入调用configuration.import。依赖处理智能处理模板间的依赖关系。如果升级的模板依赖另一个模板如“Linux by Zabbix agent active” 依赖 “Module Linux generic”它会尝试一并检查或升级。避坑指南网络连通性确保运行AI客户端的机器能够访问git.zabbix.com。如果处在内网环境可能需要配置代理或提前将仓库镜像到内部。权限要求执行导入操作需要Zabbix用户具有“管理模板”的写权限。确保配置MCP Server时使用的API Token或用户名密码有足够权限。自定义修改这是最重要的一点。如果你在现有的官方模板上做过自定义修改比如改了某个监控项的键值、调整了触发器的阈值直接升级会覆盖你的修改。技能虽然会展示差异但不会自动合并。对于高度自定义的环境建议使用/zabbix-template-to-git技能先将你的自定义模板导出到版本控制系统。在升级时仔细阅读AI给出的差异报告。可以考虑在测试环境中先升级验证无误后再在生产环境操作。更好的实践是基于官方模板创建你自己的“派生模板”在派生模板上做修改。这样官方模板可以随时安全升级。批量升级技能支持/zabbix-template-upgrade all命令它会扫描你所有的模板并批量检查更新。在生产环境使用此命令前务必在测试环境充分验证因为一次性升级大量模板风险较高。3.3/zabbix-anomaly与/zabbix-correlate从告警到洞察这两个技能代表了监控运维的更高阶段不仅要知道“哪里坏了”还要知道“为什么坏”以及“是不是有什么异常趋势”。/zabbix-anomaly异常检测 它的核心思想是基于历史基线进行异常判断而不是固定的阈值。选择指标通常聚焦于核心性能指标CPU使用率、内存使用率、磁盘IO、网络流量、应用QPS等。计算基线对于每个监控项获取过去7天的历史数据通过history.get计算其平均值μ和标准差σ。获取当前值获取该监控项的最新值。计算偏差使用标准差倍数如(当前值 - μ) / σ来判断异常程度。通常超过3σ或5σ被认为显著异常。关联告警将检测到的异常与当前活跃的问题problem.get进行关联看异常是否已触发告警。它能发现什么静默异常指标异常飙升或跌落但尚未达到触发器的固定阈值因此没有产生告警。这可能是潜在故障的早期信号。误报排查告警触发了但查看历史基线发现当前值仍在正常波动范围内可能意味着阈值设置过紧。/zabbix-correlate问题关联 当监控系统同时爆出几十上百条告警时这个技能能帮你理清头绪。时空聚类获取指定时间范围内如“最近2小时”的所有问题。模式识别拓扑关联分析问题主机之间的网络拓扑、业务依赖关系需要Zabbix中已配置主机间关联或使用标签暗示。例如同一交换机下的所有服务器同时失联根因很可能是交换机故障。时间序列关联按问题发生时间排序找出具有明显先后顺序的链条。例如数据库响应慢 - 应用服务器线程堆积 - 前端服务超时。症状相似性将具有相同触发器名称或问题描述的主机进行分组。根因推断基于聚类结果尝试推断出最可能的根本原因问题通常是时间最早、或影响范围最广的那个。使用技巧标签Tags是关键为了让关联分析更准确请在Zabbix中为你的主机和业务服务打好标签。例如给所有属于“订单服务”的主机打上service: order给所有位于“AZ-1”可用区的主机打上az: az1。这样AI在分析时就能更好地识别业务链和物理拓扑。结合使用先运行/zabbix-status看概况再用/zabbix-correlate last 1h对特定时间段的问题进行深度关联分析最后对疑似根因的主机使用/zabbix-investigate 主机名进行深度调查。这是一套高效的故障排查组合拳。4. 完整部署与集成实操指南4.1 基础环境准备假设你已经在运行一个Zabbix Server版本5.0以上并且拥有一个可以安装AI客户端的开发机或跳板机。第一步部署 Zabbix MCP Server这是AI Skills的基石。参考其官方仓库进行安装通常有几种方式# 方式一使用Go直接安装需提前安装Go 1.21 go install github.com/initMAX/zabbix-mcp-serverlatest # 方式二下载预编译二进制 # 从 GitHub Releases 页面下载对应你系统的二进制文件例如 wget https://github.com/initMAX/zabbix-mcp-server/releases/latest/download/zabbix-mcp-server_linux_amd64 chmod x zabbix-mcp-server_linux_amd64 sudo mv zabbix-mcp-server_linux_amd64 /usr/local/bin/zabbix-mcp-server配置MCP Server 创建一个配置文件例如config.yaml# config.yaml servers: - name: my-zabbix-prod # 给这个Zabbix实例起个名字 url: https://zabbix.your-company.com/api_jsonrpc.php # Zabbix API地址 username: ai-bot # 建议创建一个专用API用户 password: your-strong-password # 或使用API Token # 如果用API Token # token: your-api-token timeout: 30s # 可选配置默认主机组、模板等用于某些技能的默认值 defaults: hostgroup: Linux servers运行MCP Server# 指定配置文件运行 zabbix-mcp-server --config ./config.yaml --port 8080服务启动后会提供一个MCP标准的HTTP/SSE端点通常是http://localhost:8080/mcp。安全提醒为AI操作创建专用的Zabbix用户如ai-bot并遵循最小权限原则。根据你计划使用的技能授予其必要的只读或读写权限。例如如果只用查看类技能给只读权限即可如果要用到创建主机、维护窗口等技能则需要相应对象的配置权限。4.2 集成到AI客户端以Claude Code为例Claude Code是目前对MCP和技能Slash Commands支持最原生的客户端之一。克隆技能库git clone https://github.com/initMAX/zabbix-ai-skills.git cd zabbix-ai-skills配置Claude Code 在你的项目目录或用户全局配置中找到或创建.claude/settings.json文件。{ skills: { directory: /绝对路径/到/zabbix-ai-skills/skills }, mcpServers: { my-zabbix-prod: { command: zabbix-mcp-server, args: [--config, /绝对路径/到/config.yaml], env: {} } } }skills.directory: 指向你克隆的zabbix-ai-skills/skills文件夹。这样Claude Code会自动加载里面所有的.md技能文件并将其注册为/开头的命令。mcpServers: 配置连接到我们刚才启动的Zabbix MCP Server。这里使用command方式让Claude Code自动启动和管理服务器进程更便捷。重启Claude Code使配置生效。验证连接 在Claude Code的聊天框中输入/你应该能看到以zabbix-开头的命令列表如zabbix-status。输入/zabbix-status并发送如果一切正常AI会开始工作并最终返回你的Zabbix系统状态概览。4.3 集成到VS Code Continue / Cursor对于VS Code配合Continue插件或直接使用Cursor编辑器配置方式类似但需要在各自的配置文件中添加MCP Server连接。VS Code with Continue 在~/.continue/config.json或项目下的.continue/config.json中配置{ models: [...], tabAutocompleteModel: {...}, mcpServers: { my-zabbix-prod: { command: zabbix-mcp-server, args: [--config, /绝对路径/到/config.yaml] } } }Cursor 在Cursor的设置中找到MCP Servers配置部分通常在设置UI中添加类似的服务器配置。技能的使用方式则是直接打开skills/目录下的.md文件将整个内容复制粘贴到Cursor的AI聊天框中AI就会执行该技能。4.4 技能文件结构与自定义每个技能都是一个独立的Markdown文件结构清晰易于理解和自定义。--- name: zabbix-status # 技能名称也是命令名 description: Get a comprehensive overview of current problems in Zabbix. # 简短描述 args: optional_time_range # 可选的参数 user_invocable: true # 是否允许用户直接调用 --- # Zabbix Status Overview 获取Zabbix中当前所有未恢复问题的概览按严重性分组并显示关键详情。 ## Steps 1. **获取问题**使用 mcp__zabbix__problem_get 工具设置参数 acknowledged0 和 recent1 来获取未确认且未恢复的问题。 2. **获取详细信息**对于获取到的问题列表提取其中的 hostid 和 triggerid。然后并行调用 mcp__zabbix__host_get 和 mcp__zabbix__trigger_get 来获取主机名和触发器描述。 3. **计算持续时间**根据问题的 clockUnix时间戳字段计算问题已持续了多长时间例如“2小时15分钟前”。 4. **分组与排序**按照问题的 severity 字段进行分组分组顺序为灾难(5) 严重(4) 一般(3) 警告(2) 信息(1)。在每个严重性组内按问题发生时间clock降序排列最新的在最前面。 5. **呈现结果**为每个严重性级别创建一个Markdown表格。表格列包括主机、问题描述、严重性、持续时间。在报告开头给出一个简要的统计摘要例如“共发现15个未恢复问题其中2个为灾难级别”。如何创建自己的技能在skills/目录下创建一个新的.md文件。按照上述格式编写YAML头和步骤说明。步骤说明是关键。你需要像教一个新手一样用自然语言描述每一步该做什么、调用哪个MCP工具工具名参考Zabbix MCP Server文档、如何处理结果、如何传递数据到下一步。保存文件在Claude Code中重新加载技能或重启客户端就可以通过/your-skill-name来调用了。5. 高级技巧与疑难问题排查5.1 性能优化与大规模环境适配当你的Zabbix监控规模很大例如超过5000台主机时一些技能可能会运行较慢或返回数据过多。为技能添加过滤参数修改技能文件在第一步就加入过滤条件。例如在/zabbix-status的技能中可以修改第一步为“使用mcp__zabbix__problem_get工具设置参数acknowledged0,recent1同时如果用户提供了主机组参数则先通过mcp__zabbix__hostgroup_get获取组ID再通过mcp__zabbix__host_get获取该组主机ID最后在problem.get中通过hostids过滤。”分页处理Zabbix API本身支持分页limit参数。在技能设计时对于可能返回大量数据的操作如获取所有历史数据应考虑在步骤中说明“仅获取最近100条记录”或“使用分页分批获取”。使用output参数限制字段在调用MCP工具时可以通过output参数指定只返回需要的字段减少数据传输量。例如output: [hostid, name]。异步与并行在技能描述中可以明确指示AI“并行地”执行多个不依赖的API调用以提升速度。例如获取主机信息和触发器信息可以同时进行。5.2 错误处理与调试技能执行失败时AI通常会返回错误信息。你需要学会解读。权限错误message: No permissions to referred object or it does not exist!这通常意味着API Token或用户权限不足。检查MCP Server配置中使用的凭证并在Zabbix前端确认该用户对目标对象主机、模板等有相应权限。连接错误Failed to connect to Zabbix API检查MCP Server配置中的URL是否正确网络是否通畅以及Zabbix Server服务是否正常。参数错误Invalid params.AI可能传递了错误的参数格式给MCP工具。这可能是技能描述不够精确或者AI理解有偏差。你需要检查技能文件中对应步骤的描述确保其清晰无误地指定了参数名和预期的值类型。调试模式在Claude Code中你可以要求AI“详细展示每一步调用的工具和参数”。这能帮你看到AI实际发送了什么请求便于定位问题。你也可以在启动MCP Server时增加日志级别如果支持查看原始的API交互。5.3 将技能融入日常工作流晨会报告自动化创建一个组合技能或编写一个简单的Shell脚本在早上定时调用/zabbix-oncall-report 12生成过去12小时报告并将结果发送到团队群聊。变更预检查在计划进行维护如服务器重启前使用/zabbix-investigate 主机名快速检查目标主机及其关联服务的当前状态和历史指标评估风险。知识沉淀当通过/zabbix-correlate和/zabbix-postmortem完成一次故障复盘后将AI生成的报告稍作整理直接归档为事故报告。新人培训对于新接触Zabbix的同事让他们通过AI技能来执行常见的查询和操作比直接教他们用Web界面或API更直观、学习曲线更平缓。5.4 常见问题速查表问题现象可能原因解决方案输入/zabbix-后没有命令提示1. 技能目录路径配置错误。2. AI客户端不支持或未启用MCP技能功能。1. 检查.claude/settings.json中skills.directory的路径是否正确、绝对。2. 确认AI客户端版本并查阅其文档确保支持Slash Commands。执行技能时报“Tool not found”1. MCP Server未正确连接或未提供该工具。2. 技能文件中调用了错误的工具名。1. 检查MCP Server配置和运行状态。在AI客户端中尝试列出所有可用MCP工具。2. 核对技能文件中的工具名与Zabbix MCP Server文档是否一致。技能执行结果为空或不全1. API权限不足无法获取某些数据。2. 技能中的过滤条件过于严格。3. Zabbix中确实没有符合条件的数据。1. 提升API用户的权限。2. 检查技能步骤中的过滤逻辑或尝试不带参数运行。3. 在Zabbix Web界面验证数据是否存在。AI不理解技能指令或执行步骤混乱技能文件的步骤描述可能不够清晰或存在歧义。仔细检查技能文件的Markdown内容确保步骤是原子化的、指令是明确的。可以参照项目内置的成功技能来修改。升级模板时提示网络错误运行AI客户端的机器无法访问git.zabbix.com。检查网络连接和防火墙规则。考虑在内网搭建Git镜像并修改技能中对应的仓库地址这需要自定义技能文件。这套Zabbix AI Skills在我自己的生产环境中已经稳定运行了数月它确实将我从大量重复性的监控操作中解放了出来。最大的感受是它改变了我与监控系统的交互模式——从“操作界面”变成了“对话界面”。故障排查和日常巡检的效率提升了不止一个量级。如果你也在管理一个复杂的Zabbix环境我强烈建议你花点时间部署和尝试一下从/zabbix-status这个最简单的技能开始你会很快感受到它的便利。