ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AI Agent Harness Engineering 做运维:告警分析与自动化修复的 TaoToken 配置骨架

AI Agent Harness Engineering 做运维:告警分析与自动化修复的 TaoToken 配置骨架 1. 告警风暴里运维到底卡在哪一步如果你正在维护一套微服务系统大概率经历过这种场面凌晨两点手机被 200 条告警轰炸CPU、内存、连接池、超时、5xx 全在响但真正的问题只有一个——某个下游服务的数据库连接被打满。剩下的 199 条全是它的连锁反应。这就是 AI Agent Harness Engineering 想解决的核心问题。它不是又一个监控面板而是一套「编排骨架」把告警接入、降噪聚类、根因分析、修复执行、结果回执串成一条可自动跑的链路让 Agent 在受控边界内完成从「感知」到「动手」的闭环。适合谁适合已经有一套 Prometheus/Alertmanager 或类似告警源、想用大模型把重复性排障自动化掉的 SRE、运维开发和平台工程师。我试过纯规则方案也试过单模型异常检测最后发现真正卡人的不是「识别异常」而是三件事告警之间没有关联、根因判断没有上下文、修复动作没有回执验证。Harness Engineering 的思路就是把这三件事拆成独立环节每个环节交给一个职责单一的 Agent再用一个调度层把它们串起来。下面这套骨架你可以直接拿去改。2. 用 TaoToken 做统一模型通道的前置准备在写 config.toml 之前先把模型通道这件事定下来。Harness 里的告警分析 Agent 和修复决策 Agent 都需要调用大模型如果每个 Agent 各自维护一套 Key 和 endpoint后面换模型、加限流、做审计会非常痛苦。TaoToken 在这里扮演的角色是统一入口一个 Key、一个 API 地址兼容主流模型调用格式Agent 侧只需要改 model 字段就能切换。官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 注意这个地址不带任何查询参数。你需要先拿到 Key再去控制台确认额度与模型列表。具体路径模型对话体验https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentmodel_chatCoding Plan长期编码/Agent 场景https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcoding_plan控制台https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentconsoleAPI Keys 管理https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentapi_keys接入文档https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentdoc注意Key 只放在环境变量或密钥管理里不要写进 config.toml 提交到 Git。下面配置里我用${TAOTOKEN_API_KEY}占位。3. 可复制的 config.toml 与 settings.json 骨架3.1 config.tomlHarness 调度与 Agent 定义这份配置定义了三个 Agentalarm_analyzer负责降噪与根因repair_executor负责修复动作verifier负责回执校验。调度层用责任链模式任一环节置信度不足就转人工。# config.toml - AI Agent Harness 运维闭环骨架 [harness] name ops-harness mode semi-auto # semi-auto | full-auto建议先跑 semi-auto max_retry 3 circuit_breaker_window 600 # 10 分钟内失败 3 次熔断 audit_log /var/log/harness/audit.jsonl [model] provider taotoken base_url https://taotoken.net/api api_key ${TAOTOKEN_API_KEY} default_model claude-sonnet # 按控制台可用模型替换 timeout_seconds 30 max_tokens 2048 [alarm_source] type alertmanager webhook_path /webhook/alarm dedup_window_seconds 300 min_severity 2 # 低于该级别直接归档不进 Agent [agents.alarm_analyzer] role 告警降噪与根因分析 model claude-sonnet prompt_file ./prompts/rca.md tools [topology_query, metric_query, log_search] confidence_threshold 0.80 # 低于此值转人工 [agents.repair_executor] role 修复执行 model claude-sonnet prompt_file ./prompts/repair.md tools [ansible_run, k8s_patch, rollback] dangerous_commands [rm -rf /, mkfs, shutdown, reboot] require_approval [db_restart, scale_down, delete_pvc] [agents.verifier] role 修复回执校验 model claude-sonnet prompt_file ./prompts/verify.md tools [metric_query, health_check] check_interval_seconds 15 max_check_rounds 8 [chain] order [alarm_analyzer, repair_executor, verifier] on_failure human_handoff3.2 settings.json运行时参数与工具授权settings.json 管的是「Agent 能碰什么」和 config.toml 的「怎么编排」分开方便按环境覆盖。{ environment: prod, harness: { parallel_workers: 4, alarm_rate_limit: { window_seconds: 60, max_alarms: 1000, overflow_strategy: severity_first } }, tools: { topology_query: { endpoint: http://topology-svc:8080/graph, timeout: 5 }, metric_query: { endpoint: http://prometheus:9090/api/v1/query, timeout: 10 }, ansible_run: { inventory: /etc/ansible/hosts, private_data_dir: /tmp/ansible_runner, become: false }, k8s_patch: { kubeconfig: /etc/harness/kubeconfig, allowed_namespaces: [app, middleware] } }, safety: { command_whitelist_enabled: true, rollback_required: true, audit_retention_days: 180 }, notify: { on_human_handoff: [feishu, pagerduty], on_repair_success: [feishu] } }提示allowed_namespaces和require_approval是最小权限原则的落点。修复 Agent 不应该有集群级权限只给它需要动的命名空间。4. 从告警触发到修复回执的验证动作配置写完不代表能跑必须做一次端到端验证。下面用一条模拟告警走完整链路。4.1 构造一条测试告警用 curl 往 webhook 打一条告警模拟「订单服务 P99 延迟突增 下游库存服务连接池耗尽」curl -X POST http://localhost:8080/webhook/alarm \ -H Content-Type: application/json \ -d { alerts: [ { labels: {alertname: HighLatency, service: order-svc, severity: 3}, annotations: {summary: order-svc P99 2s}, startsAt: 2025-01-01T02:00:00Z }, { labels: {alertname: ConnPoolExhausted, service: inventory-svc, severity: 4}, annotations: {summary: inventory-svc connection pool exhausted}, startsAt: 2025-01-01T02:00:05Z } ] }4.2 观察 Harness 的处理链路正常情况下你会在 audit.jsonl 里看到三段记录对应三个 Agent 的输出{stage:alarm_analyzer,cluster_id:c_001,alarm_count:2,root_cause:inventory-svc 连接池耗尽,confidence:0.91,action:proceed} {stage:repair_executor,cluster_id:c_001,command:kubectl -n middleware rollout restart deploy/inventory-svc,approved:true,result:success} {stage:verifier,cluster_id:c_001,check:p99_latency,value:0.31s,status:recovered,rounds:2}关键看三个字段confidence是否过阈值、approved是否走了审批、status是否为 recovered。如果 verifier 连续 8 轮没恢复链路会自动转人工并推送通知。4.3 验证模型通道是否通在正式接告警前先单独确认 TaoToken 通道可用。用一段最小请求测一下curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer ${TAOTOKEN_API_KEY} \ -H Content-Type: application/json \ -d { model: claude-sonnet, messages: [{role: user, content: 用一句话说明连接池耗尽可能的原因}], max_tokens: 128 }返回正常内容说明 Key、base_url、模型名三者对得上。这一步过了再把 Key 注入 Harness 进程环境。5. 本篇常见错排查5.1 401 或 403Key 没注入或模型名不对最常见的是 config.toml 里写了${TAOTOKEN_API_KEY}但启动进程时没 export。检查方式env | grep TAOTOKEN_API_KEY如果为空用export TAOTOKEN_API_KEY你的Key后再启动。另一个原因是default_model填了控制台里不存在的名字去 API Keys 页面确认可用模型列表。5.2 告警进来了但 Agent 不触发先看min_severity。如果告警 severity 是 1而配置里是 2会被直接归档。再看 webhook_path 是否和告警源配置一致。用tail -f audit.jsonl观察有没有stage: ingress记录没有就是没进来。5.3 根因置信度总是低于阈值两种可能一是 topology_query 返回的调用链不完整Agent 拿不到上下游关系二是 prompt 里没给足够的指标上下文。先把confidence_threshold临时降到 0.6 观察输出确认是数据问题还是 prompt 问题再决定调哪个。5.4 修复执行被熔断circuit_breaker_window内失败次数超限会熔断。查 audit.jsonl 里stage: repair_executor的result字段如果是command_not_allowed说明命令不在白名单如果是approval_required说明命中了require_approval列表需要人工在控制台点通过。5.5 verifier 一直不 recovered检查check_interval_seconds和max_check_rounds是否太短。有些服务重启后需要 30 秒以上才恢复指标8 轮 × 15 秒只有 2 分钟可能不够。另外确认 health_check 的 endpoint 是否正确别把探针打到了旧 Pod 上。6. 把闭环跑稳之后再谈自动化程度这套骨架的价值不在于「全自动」而在于把每个环节的输入输出显式化。你可以先只开 alarm_analyzer让它帮你降噪和给根因建议修复动作仍然人工执行跑一两个月积累够案例再把 repair_executor 的require_approval列表逐步缩小。模型通道这块长期跑 Agent 建议用 Coding Plan额度和并发更适合持续调用https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcoding_plan 。接入细节和参数说明在文档里https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentdoc 。Key 管理和模型列表在 API Keys 页面https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentapi_keys 。最后留一个我踩过的坑别一上来就把mode设成 full-auto。先让 verifier 的status字段在 semi-auto 下稳定输出 recovered再考虑放开。回执验证这一环才是整套 Harness 里最不能省的部分。
返回列表