30 分钟搭好 Hermes Agent 性能监控闭环
【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent
Hermes Agent 是一款内置学习闭环与多平台网关的 AI Agent 框架。这篇文章带你基于 Prometheus、Grafana 与 Alertmanager 搭出一套 Hermes Agent 性能监控体系:暴露指标、可视化、自动告警,一路推进到可上线的生产配置。
监控的对象就是这些在 Cron、Telegram、Discord 等通道里并行跑的会话——只有把请求和资源状态看清楚,出问题时才能快速定位到具体环节。
先分清组件职责:监控体系里谁干什么
动手前先看分工,四个组件各管一段,配置文件别放错地方:
| 组件 | 在体系中的职责 | 关键配置文件 |
|---|---|---|
| Hermes Agent(带 vLLM 后端) | 暴露/metrics指标端点 | 启动参数(如--enable-metrics) |
| Prometheus | 定时抓取指标、存储时序数据 | prometheus.yml |
| Grafana | PromQL 查询、渲染仪表盘 | 数据源配置 + 仪表盘 JSON |
| Alertmanager | 评估告警规则、发送通知 | alertmanager.yml+rules.yml |
项目内置的 agent/monitoring/ 模块已包含网关健康导出与 OTLP 上报能力,本文在它之上补一条标准的 Prometheus 采集链路。
阶段一:拿到指标——让 /metrics 端点返回 200
为什么做这步:Prometheus 只能收集服务愿意暴露的数据,这一步不到位,后面全是空中楼阁。完成后你能得到:curl访问/metrics返回 200。
🔌 启动 vLLM 后端时加上这两个参数:
vllm serve meta-llama/Llama-3-8B-Instruct \ --enable-metrics \ --metrics-port 9090验证指标接口是否可用:
curl -s -o /dev/null -w "%{http_code}" http://localhost:9090/metrics # 输出 200 即表示接口就绪Prometheus 抓取目标怎么配
把抓取配置指向 9090 端口,写进prometheus.yml:
scrape_configs: - job_name: 'hermes-agent' static_configs: - targets: ['localhost:9090'] metrics_path: '/metrics' scrape_interval: 15sPrometheus 启动后在 Targets 页面确认状态变绿,Prometheus 指标集成就算完成了。
阶段二:看到图表——搭一块含 5 个核心面板的 Grafana 仪表盘
为什么做这步:裸指标只是数字,你要看的是趋势和分位数。完成后你能得到:一块 5 面板的仪表盘,吞吐量、延迟、GPU 缓存一屏掌握。
先添加 Prometheus 数据源,再新建 Grafana 仪表盘,逐个添加下面 5 个面板:
| 面板 | PromQL 查询 |
|---|---|
| 请求成功率 | sum(rate(vllm_request_success_total[5m])) |
| 首 token 时间 p50 | histogram_quantile(0.5, sum by (le) (rate(vllm_time_to_first_token_seconds_bucket[5m]))) |
| 首 token 时间 p99 | histogram_quantile(0.99, sum by (le) (rate(vllm_time_to_first_token_seconds_bucket[5m]))) |
| GPU 缓存使用率 | vllm_gpu_cache_usage_perc |
| 活跃请求数 | vllm_num_requests_running |
histogram_quantile说白了:服务端不存单次延迟值,只存落在各区间的请求计数,这个函数从区间分布里反推出 p50、p99 这类分位数。
阶段三:告警联动——写一条能模拟触发的 Alertmanager 告警规则
为什么做这步:仪表盘不是 7x24 有人盯的,告警让系统主动找你。完成后你能得到:至少 1 条可以模拟触发并验证的告警规则。
最小可用告警规则模板
把第一条规则写进rules.yml,结构分两层:expr决定“何时触发”,for决定“持续多久才算数”:
groups: - name: hermes_agent_alerts rules: - alert: HighErrorRate expr: sum(rate(vllm_request_failure_total[5m])) > 0.05 for: 2m labels: severity: critical annotations: summary: "错误率超过 5%"同文件再补一条延迟规则:
- alert: SlowFirstToken expr: > histogram_quantile(0.99, sum by (le) (rate(vllm_time_to_first_token_seconds_bucket[5m]))) > 2 for: 5m labels: severity: warning annotations: summary: "P99 首 token 延迟超过 2 秒"🚨 模拟触发:把第一条的阈值临时改成> 0,等一分钟后到 Alertmanager 界面看规则变 firing,验证完改回去。通知渠道(邮件、IM、值班)之后按需挂到alertmanager.yml即可,这里只验证触发链路。
频繁查询的复杂表达式,可以用 recording rules 预计算并存储结果——相当于让 Prometheus 定时把“重活”算好,Grafana 查询更快。
阶段四:生产部署——收口成一份可直接上线的配置
为什么做这步:四个容器手动逐个启动很难维护,写进 Compose 才能一条命令复现。完成后你能得到:一份可直接上线的部署配置。
📦docker-compose.yml前半段,业务与采集:
services: hermes-agent: image: hermes-agent:latest command: --enable-metrics --metrics-port 9090 ports: - "8000:8000" - "9090:9090" prometheus: image: prom/prometheus volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml ports: - "9091:9090"后半段加可视化与告警。仓库根目录自带Dockerfile,你可以用它自行构建hermes-agent镜像:
grafana: image: grafana/grafana ports: - "3000:3000" volumes: - grafana-data:/var/lib/grafana alertmanager: image: prom/alertmanager volumes: - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml ports: - "9093:9093" volumes: grafana-data:上线前检查清单与故障速查表
上线前逐项打勾:
- 各目标
/metrics用curl访问返回 200,Prometheus Targets 页面状态为 UP - 仪表盘 5 个面板全部有数据,时间轴覆盖最近 1 小时
- 至少 1 条告警规则经模拟触发,能从 firing 走到 resolved
- Alertmanager 通知渠道能收到一条测试消息
prometheus.yml、rules.yml、docker-compose.yml均已纳入版本管理
出问题时按表排查:
| 现象 | 可能原因 | 处理 |
|---|---|---|
| Prometheus 目标 DOWN | 端口不一致或指标服务未启动 | curl目标端口,核对--metrics-port参数 |
| 面板 No Data | PromQL 指标名与实际不符 | 用 Explore 搜vllm_前缀,确认真实指标名 |
| 告警一直不触发 | 阈值过高或for过久 | 临时调低阈值验证,并在 Alertmanager 界面看规则状态 |
| 告警触发了却没通知 | alertmanager.yml通知渠道未生效 | 用 Alertmanager 界面发测试通知,查看报错信息 |
【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考