需建立覆盖接入层、代理层、服务层的多点监控体系:一、启用Hermes Agent内置Metrics端点;二、在Nginx反向代理层注入日志字段;三、在OpenTelemetry Collector中配置HTTP Receiver;四、基于Envoy作为Sidecar注入gRPC访问日志;五、使用eBPF工具捕获用户态进程网络事件。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您需要实时掌握Hermes Agent对外暴露的API调用行为、响应延迟、错误率及请求来源,则需建立覆盖接入层、代理层与服务层的多点监控体系。以下是实现该目标的具体操作路径:
一、启用Hermes Agent内置Metrics端点
Hermes Agent默认集成Micrometer指标收集器,可通过HTTP暴露Prometheus格式的指标数据,用于统计API请求数、状态码分布、处理耗时等基础维度。
1、确认Hermes Agent启动时已启用actuator模块,且application.yml中配置包含:management.endpoints.web.exposure.include: "metrics,prometheus,health"
2、检查Hermes Agent服务运行后,访问/actuator/prometheus端点是否返回以http_server_requests_seconds_count开头的指标行
3、在Prometheus配置文件中添加抓取任务,target指向Hermes Agent实例的/actuator/prometheus路径
4、部署Grafana并导入支持Spring Boot 3.x Actuator指标的仪表板ID(如14197),绑定Prometheus数据源
二、在Nginx反向代理层注入日志字段
当Hermes Agent前置部署Nginx作为流量入口时,可通过自定义log_format捕获每个API调用的完整上下文,包括客户端真实IP、请求路径、响应状态、耗时及User-Agent标识。
1、编辑Nginx配置文件,在http块内添加:log_format hermes_api '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $request_time $upstream_response_time';
2、在server块中将access_log指向指定文件,并应用hermes_api格式:access_log /var/log/nginx/hermes_access.log hermes_api;
3、重启Nginx使配置生效:sudo systemctl restart nginx
4、使用awk或logstash解析hermes_access.log,提取$request_time与$upstream_response_time差值,识别Nginx自身处理开销
三、在OpenTelemetry Collector中配置HTTP Receiver
通过部署独立的OpenTelemetry Collector,接收Hermes Agent主动上报的Span数据,实现端到端调用链追踪,精准定位慢接口与异常传播路径。
1、在Hermes Agent的JVM启动参数中添加OTel Java Agent:-javaagent:/opt/otel/opentelemetry-javaagent.jar
2、设置环境变量指定Exporter endpoint:OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4318/v1/traces
3、在Collector配置文件中启用otlphttp receiver,并配置jaeger、zipkin、logging exporters供调试验证
4、启动Collector容器后,向Hermes Agent发起一次带traceparent头的测试请求,检查logging exporter输出是否包含hermes.agent.api.invoke Span名称
四、基于Envoy作为Sidecar注入gRPC访问日志
若Hermes Agent以Service Mesh模式部署,可利用Envoy Proxy的Access Log Service(ALS)将每条gRPC API调用结构化上报至后端分析服务,支持按method、authority、response_flag过滤。
1、为Hermes Agent Pod注入Envoy Sidecar,确保其bootstrap.yaml中启用access_log并配置grpc_service指向ALS服务器
2、在Envoy filter chain中为监听的gRPC端口添加envoy.filters.http.grpc_json_transcoder,确保method映射正确
3、验证ALS服务是否持续接收envoy.data.access_logs.v3.StreamAccessLogsMessage消息,其中common_properties.route_name应匹配Hermes Agent注册的路由名
4、从ALS消息体中提取response_duration与response_code_details字段,识别ext_authz_error或upstream_reset_before_response_started类错误
五、使用eBPF工具捕获用户态进程网络事件
当无法修改Hermes Agent代码或部署侵入式探针时,可通过eBPF程序在内核层面挂钩socket系统调用,无感采集所有进出Hermes Agent进程的HTTP请求原始报文头与响应状态。
1、在宿主机安装bpftrace工具,并确认内核版本≥5.10且CONFIG_BPF_SYSCALL=y已启用
2、执行以下脚本捕获目标PID的HTTP请求行:bpftrace -e 'tracepoint:syscalls:sys_enter_connect /pid == 12345/ { printf("connect to %s:%d\n", str(args->uservaddr), args->addrlen); }'
3、结合tcprewrite重放捕获的PCAP片段,注入X-Hermes-Trace-ID头模拟真实调用链路
4、使用bpftool map dump命令导出eBPF map中缓存的http_method、http_path、http_status聚合计数


















