ARTICLE DETAIL

资讯详情

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

Hermes Agent 网关监控实战指南:10分钟把健康指标接入你的 OTel 观测栈

Hermes Agent 网关监控实战指南:10分钟把健康指标接入你的 OTel 观测栈 Hermes Agent 网关监控实战指南10分钟把健康指标接入你的 OTel 观测栈【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent你在生产上跑着好几个 Hermes Agent 网关凌晨三点某个平台悄悄掉到 fatal等你发现网关已经半瘫了一夜。缺的不是更多日志行而是把网关健康监控信号直接喂进观测栈的一条通路。三种类型化事件content-free 的设计监控平面在agent/monitoring/目录第一设计约束很反直觉不把所有东西写进日志只导出三种类型化事件健康快照、诊断事件、cron 执行事件且构造上就不含提示词、消息正文、工具参数与会话历史。输入 → 处理 → 输出输入是网关运行态、gateway.*logger 的 WARNING/ERROR 记录、cron 执行历史处理在gateway_health.py把错误文本归类成 auth_failed / timeout / network_error 这类有界类别所有字符串过一遍redact.py脱敏层输出是 OTLP 导出器把同一批事件拆成 metrics、诊断日志、生命周期 span 三股流发往运维自配的端点。为什么较真这一点因为 AI 网关日志敏感内容密度太高与其事后 scrub 日志不如只导出错误的类别把内容和监控从物理上分开。事件总线不阻塞、不抛异常链路枢纽是emitter.py的 emitter契约一句话emit() 微秒级返回绝不阻塞磁盘网络绝不向调用方抛异常。队列深度固定 10000满了丢弃最旧事件并计数后台线程按 256 个一批拉取扇出给订阅者每个订阅者互相故障隔离一个慢导出器拖不垮网关。下面两行演示生产者侧用法stats() 是总线自身的健康检查窗口emitter.emit(GatewayHealthEvent(namegateway.health_snapshot, active_agents3)) print(emitter.stats()) # {queued: 0, dispatched: 1, dropped: 0, subscribers: 1}另一个细节采集是 opt-in 的emitter 默认关闭挂上第一个订阅者才启用没人订阅时事件直接在环形缓冲里老化掉。监控是出向通路不是本地存储。搭建路径可选依赖与配置块先装可选依赖pip install hermes-agent[otlp]。OTel SDK 不在主包里缺了它start_gateway_health_export只会 fail-open 打条警告不会卡住网关启动。然后写配置块注意两处 enabled 是与关系缺一即整个平面不启用monitoring: export: otlp: enabled: true endpoint: http://collector.internal:4318/v1/traces headers_env: { x-api-key: OTEL_KEY } gateway_health_export: enabled: true export_interval_seconds: 60endpoint 要写完整的 /v1/traces 路径模块会自动把另外两股流改写到 /v1/metrics 和 /v1/logsheaders_env 存的是环境变量名而不是密钥值取值只在导出时从环境读取永远不落配置文件。三类数据流出来配置生效后第一股是 metrics gauge默认 60 秒导出一次hermes.gateway.up / active_agents / busy / drainable、逐平台的 hermes.platform.up / degraded再加一组 cron 调度器健康指标心跳年龄、补跑次数、逾期任务数。第二股是诊断事件gateway.*logger 的 WARNING/ERROR 走白名单进总线只保留错误类别实例 ID 先哈希成 sha256 前 24 位再导出反查不到原始 install ID。第三股是生命周期 spanstartup_failed、stopped、platform.fatal 这类状态迁移各产生一条带 old_state / new_state / exit_reason方便事后复盘。有个容易漏的指标hermes.gateway.background_work。active_agents 故意不计后台子代理delegate_task 扇出、后台终端进程background_work 按任务粒度把这部分补上否则一个在猛跑子代理的节点在机群面板上会显示 active_agents0看着像死了。进阶方向机群级告警适用场景多网关多 profile 部署要一眼看出谁挂了。核心做法实例 ID 已哈希按 profile / version / supervision_modesystemd、s6、container、launchd 自动探测聚合面板直接对 hermes.gateway.up 0 告警。预期收益网关级宕机从第二天用户报障变成秒级触达。安全收敛适用场景数据跨网络边界Collector 在另一个安全域。核心做法认证走 headers_envtoken 只放环境变量Collector 侧强制 TLSHermes 侧本就有字段白名单、脱敏、字符集白名单三道防线出网的只有健康类信号。预期收益即使数据落到错误的地方也拿不到任何业务内容。接自己的后端适用场景不想上完整 OTel 栈或同一批事件还要进内部告警系统。核心做法emitter.subscribe(callback) 是唯一接缝回调签名 batch: list[dict]注册第二个 sink 不碰网关代码配合 event_filter 圈定自己的平面。预期收益监控总线变成可复用基建加消费方一行代码。def my_sink(batch): ... # 内部告警逻辑读 batch 即可 get_emitter().subscribe(my_sink)避坑速查如果你配了 enabled 但 Collector 收不到数据大概率是 OTel SDK 没装——它是可选 extrapip install hermes-agent[otlp]日志里也能 grep 到 OTLP SDK could not be installed 这条警告。如果指标显示 active_agents0 但机器明明很忙不是 bug——后台子代理不计入这个指标去看 background_work。如果 emitter 的 dropped 计数持续上涨是订阅端通常是网络端点消费慢于生产10000 深度队列满了在丢最旧事件——先查端点限流和网络别上来就改队列深度。如果 endpoint 只写了裸域名结果只来了一股流因为 /v1/metrics 和 /v1/logs 的自动改写只在路径以 /v1/traces 结尾时触发——写全路径。延伸资源监控平面核心agent/monitoring/emitter 事件总线、events 类型化事件、gateway_health 分类与指标、otlp_exporter 导出器脱敏策略agent/monitoring/redact.py的相邻实现agent/monitoring/redaction.pycron 健康投影agent/monitoring/cron_health.py配置键全集与关闭时的排空flush逻辑见agent/monitoring/gateway_health_export.py的模块 docstring【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表