From 5bc3f64ba2b1d997dd5652022a7042c8b11ca7ce Mon Sep 17 00:00:00 2001 From: oudecheng <13802883547@139.com> Date: Tue, 18 Aug 2026 23:34:40 +0800 Subject: [PATCH] =?UTF-8?q?fix(metrics):=20=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E6=97=B6=E6=B3=A8=E5=86=8C=E5=9F=BA=E7=BA=BF=20counter=20?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E5=90=AF=E5=8A=A8=E5=90=8E=E6=B8=B2=E6=9F=93?= =?UTF-8?q?=E4=B8=BA=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - install_recorder 后立即以 absolute(0) 注册 MESSAGE_PROCESSING_ERRORS / AGENT_ITERATIONS / LLM_TOKENS_USED / TOOL_EXECUTION_TOTAL,确保首次 Prometheus 抓取即可见指标 - 新增测试验证初始化后 render 输出包含基线 counter --- src/observability/metrics.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/observability/metrics.rs b/src/observability/metrics.rs index 5b8f225..c34bc82 100644 --- a/src/observability/metrics.rs +++ b/src/observability/metrics.rs @@ -49,6 +49,7 @@ pub fn init_recorder() -> Option { let builder = PrometheusBuilder::new(); match builder.install_recorder() { Ok(handle) => { + register_baseline_counters(); tracing::info!("Prometheus metrics recorder installed"); Some(handle) } @@ -61,6 +62,13 @@ pub fn init_recorder() -> Option { .clone() } +fn register_baseline_counters() { + metrics::counter!(MESSAGE_PROCESSING_ERRORS).absolute(0); + metrics::counter!(AGENT_ITERATIONS).absolute(0); + metrics::counter!(LLM_TOKENS_USED).absolute(0); + metrics::counter!(TOOL_EXECUTION_TOTAL).absolute(0); +} + // ============================================================================ // MetricsObserver — 桥接 ObserverEvent 到 metrics 宏 // ============================================================================ @@ -156,3 +164,20 @@ pub fn default_observer() -> Arc { pub fn record_message_processing_error() { metrics::counter!(MESSAGE_PROCESSING_ERRORS).increment(1); } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn metrics_render_is_not_blank_right_after_init() { + let Some(handle) = init_recorder() else { + return; + }; + let rendered = handle.render(); + assert!( + rendered.contains(MESSAGE_PROCESSING_ERRORS), + "expected baseline counters in render output, got: {rendered:?}" + ); + } +}