
1. 从告警到自愈这套 AI 自动运维系统到底解决什么问题服务器半夜 CPU 飙到 95%磁盘写满导致服务挂掉某个进程悄悄退出没人发现——这些场景对维护多台机器的人来说太熟悉了。传统做法是登录每台机器敲top、df -h、systemctl status一台台查过去效率低还容易漏。更麻烦的是等你发现的时候业务可能已经挂了半小时。我这段时间在折腾一套AI 自动运维系统核心思路是把「告警 → 诊断 → 执行」三个环节串成闭环监控发现异常后AI 先分析日志判断是正常波动还是真故障确认异常再触发修复动作重启服务、清理磁盘、扩容等整个过程不需要人盯着。听起来像重型方案但实际用TaoToken 统一 Key打通多个 AI 工具后最小闭环一个下午就能跑通。适合谁看手上有 3~20 台服务器、不想上 Zabbix/Prometheus 全套重型监控、又想从「被动救火」变成「主动自愈」的开发者和小团队。这篇会给出可复制的config.toml、settings.json骨架以及一次模拟告警到自动修复的完整验证动作你跟着做就能跑通。关键点在于统一 Key 通道。以前接 AI 要分别管 OpenAI、Claude、国产模型的 Key换一个工具改一次配置运维脚本里散落一堆密钥。用 TaoToken 把 Key 收敛成一个入口后告警分析、日志诊断、修复决策三类调用走同一个 API 通道配置和维护成本直接降下来。2. TaoToken 前置准备统一 Key 与 API 通道在动手写运维脚本之前先把 AI 调用这一层理清楚。这套系统的三个环节都要调模型告警环节把监控原始数据丢给模型判断是否需要告警过滤噪音诊断环节把异常日志和指标给模型让它给出根因分析执行环节让模型根据诊断结果输出结构化修复指令JSON 格式如果每个环节用不同厂商的 Key脚本里就得维护三套鉴权逻辑。TaoToken 的做法是提供一个统一的 API 入口你只需要一个 Key就能调用不同模型。对运维场景来说这意味着config.toml里只写一个api_key字段换模型只改model名。先拿到你的 Key。访问控制台创建https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite创建完在 API Keys 页面复制出来https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewriteAPI 基础地址统一用https://taotoken.net/api注意这个地址不带任何查询参数直接作为base_url写进配置。模型名按你实际要用的填比如做日志分析可以用推理能力强的模型做简单告警过滤可以用轻量模型两者共用同一个 Key。提示Key 不要硬编码进脚本提交到 Git。用环境变量或独立的.env文件.gitignore里排除掉。下面配置示例里我用${TAOTOKEN_API_KEY}占位。如果你后面要长期跑编码类 Agent 任务比如让 AI 自动改运维脚本可以了解下 Coding Plan按量或包月都行https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite3. 可复制配置config.toml 与 settings.json 骨架这一节是核心直接给能用的配置。整套系统我拆成两个配置文件config.toml管调度和 AI 通道settings.json管告警规则和修复动作。3.1 config.toml调度与 AI 通道# config.toml - AI 自动运维系统主配置 [ai] # TaoToken 统一入口一个 Key 打通所有模型调用 base_url https://taotoken.net/api api_key ${TAOTOKEN_API_KEY} # 告警过滤用轻量模型诊断用推理模型 model_alert gpt-4o-mini model_diagnose claude-3-5-sonnet timeout 30 max_retries 2 [monitor] # 巡检间隔秒 interval 300 # 采集哪些指标 metrics [cpu, memory, disk, service_status] # 磁盘告警阈值 disk_threshold 85 cpu_threshold 90 memory_threshold 90 [executor] # 修复动作执行方式local 或 ssh mode ssh ssh_user ops ssh_key /etc/ops/id_ed25519 # 危险命令白名单只有列表内的动作允许自动执行 allowed_actions [restart_service, clean_disk, kill_process] [notify] # 告警推送 webhook钉钉/企业微信/飞书 webhook ${OPS_WEBHOOK_URL} # 自愈成功后是否也推送 notify_on_recover true这里几个设计点值得说下。allowed_actions是安全底线AI 输出的修复指令必须落在这个白名单里才执行避免模型幻觉导致误操作。model_alert和model_diagnose分开配置是因为告警过滤调用频繁每 5 分钟一次用便宜快的模型诊断调用少但要求高用推理强的模型。两者共用同一个api_key这就是统一 Key 的价值。3.2 settings.json告警规则与修复映射{ alert_rules: [ { name: disk_full, condition: disk_usage 85, severity: high, diagnose_prompt: 以下是服务器磁盘使用情况请判断是否需要清理并给出具体清理路径建议\n{data} }, { name: service_down, condition: service_status inactive, severity: critical, diagnose_prompt: 服务 {service} 已停止以下是最近 50 行日志请分析原因\n{log} }, { name: cpu_spike, condition: cpu_usage 90, severity: medium, diagnose_prompt: CPU 使用率异常以下是 top 进程快照请判断是否为正常业务高峰\n{data} } ], recovery_map: { disk_full: { action: clean_disk, command: find /var/log -name *.log -mtime 7 -delete, verify: df -h / }, service_down: { action: restart_service, command: systemctl restart {service}, verify: systemctl is-active {service} } } }recovery_map把诊断结果映射到具体修复命令每条命令都带verify验证动作。AI 只负责判断「该不该修」和「修哪个」具体命令是预定义的这样既利用了 AI 的判断力又保证了执行的可控性。3.3 CC Switch 配置示例如果你用 Claude Code 或类似工具做运维脚本的辅助开发可以通过 CC Switch 切换不同的 API 通道。配置示例如下{ providers: [ { name: taotoken, base_url: https://taotoken.net/api, api_key: ${TAOTOKEN_API_KEY}, models: [claude-3-5-sonnet, gpt-4o-mini] } ], active: taotoken }这样在写运维脚本、调试 prompt 的时候工具链和线上系统走同一个 API 通道行为一致不会出现「本地能跑线上报错」的鉴权问题。Claude Code 相关的接入细节可以参考文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite4. 验证请求一次模拟告警到自动修复配置写完了得验证闭环能不能跑通。我设计了一个最小验证动作手动制造一个磁盘告警看系统能不能自动诊断并清理。4.1 制造模拟告警在测试机上创建一个占满磁盘的大文件# 创建一个 5G 的测试文件触发磁盘告警 dd if/dev/zero of/tmp/test_fill.img bs1M count5000 # 查看磁盘使用率确认超过阈值 df -h /假设你的disk_threshold设的是 85这时候df -h应该显示使用率超过阈值了。4.2 触发诊断调用手动跑一次诊断脚本模拟监控触发# 采集磁盘数据 DISK_DATA$(df -h / | tail -1) echo 当前磁盘: $DISK_DATA # 调用 TaoToken 诊断接口 curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer ${TAOTOKEN_API_KEY} \ -H Content-Type: application/json \ -d { model: claude-3-5-sonnet, messages: [ { role: user, content: 以下是服务器磁盘使用情况请判断是否需要清理并给出具体清理路径建议\n$DISK_DATA } ] }正常返回会是一段 JSONchoices[0].message.content里是模型的诊断结论比如「磁盘使用率 92%建议清理 /tmp 下的临时文件」。4.3 执行修复并验证根据诊断结果系统匹配recovery_map里的clean_disk动作# 执行清理这里用测试文件模拟 rm -f /tmp/test_fill.img # 验证修复结果 df -h /如果df -h显示使用率降回阈值以下说明「告警 → 诊断 → 执行 → 验证」闭环跑通了。整个过程你可以手动跑一遍确认逻辑之后交给定时任务自动执行。4.4 成功结果长什么样跑通后你的 webhook 会收到类似这样的推送[自愈成功] disk_full 主机: web-01 诊断: 磁盘使用率 92%/tmp 下存在大文件 动作: clean_disk 已执行 验证: 使用率降至 61%服务正常从告警触发到修复完成全程没有人工登录服务器。这就是最小闭环的价值——先跑通一个场景再逐步加规则。5. 本篇常见错排查实际搭的时候踩过几个坑列出来帮你省时间。报错 401 Unauthorized八成是api_key没读到环境变量。检查${TAOTOKEN_API_KEY}是否真的 export 了echo $TAOTOKEN_API_KEY看有没有值。另外确认base_url写的是https://taotoken.net/api不要多加斜杠或路径。模型返回空或超时timeout设太短。诊断类调用涉及长日志30 秒可能不够调到 60。如果频繁超时检查是不是把大段日志整个塞进去了做一下截断只取最近 100 行。修复命令没执行检查allowed_actions白名单。AI 输出的 action 名必须和列表里完全一致大小写敏感。另外mode ssh时确认ssh_key路径对、权限是 600。告警误报太多model_alert用的模型太弱或者 prompt 没写清楚。在 prompt 里明确「仅当发现异常趋势或潜在风险时返回告警否则返回正常」让模型输出结构化的{alert: true/false, reason: ...}程序解析这个字段而不是靠文本匹配。磁盘清理没效果find命令的-mtime 7可能没匹配到文件。先手动跑一遍find /var/log -name *.log -mtime 7看有没有输出没有就调整时间范围。清理前建议先ls确认别误删。webhook 收不到推送钉钉/企业微信的 webhook 对消息格式有要求检查 JSON 结构是否符合对应平台的规范。另外确认服务器能出网访问 webhook 地址。排查思路就一条先手动跑通每个环节再交给自动化。AI 调用、命令执行、webhook 推送三个环节分别验证哪个报错修哪个比一上来就全自动好定位得多。6. 把统一 Key 用起来从最小闭环到长期运行跑通最小闭环后接下来就是把它变成常驻服务。用 systemd 或 supervisor 把调度脚本挂起来interval设 300 秒让它自己跑。这时候统一 Key 的优势更明显——所有 AI 调用走一个通道用量、额度、报错都在一个地方看不用在多个厂商后台之间切换。如果你要长期跑编码类 Agent比如让 AI 自动维护和更新运维脚本Coding Plan 会比按量调用更划算https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite想先试试模型对话能力、调调诊断 prompt 的可以直接在模型对话页面测https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite接入过程中遇到鉴权或参数问题文档里有完整的接口说明https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite我的建议是先别贪多就盯一个场景比如磁盘满自愈跑两周把误报率和修复成功率摸清楚再逐步加规则。自动运维系统的价值不在于规则多而在于每一条规则都可靠。