fix(metrics): 初始化时注册基线 counter 避免启动后渲染为空

- install_recorder 后立即以 absolute(0) 注册 MESSAGE_PROCESSING_ERRORS / AGENT_ITERATIONS / LLM_TOKENS_USED / TOOL_EXECUTION_TOTAL,确保首次 Prometheus 抓取即可见指标
- 新增测试验证初始化后 render 输出包含基线 counter
This commit is contained in:
oudecheng 2026-08-18 23:34:40 +08:00
parent 1cde659bb6
commit 5bc3f64ba2

View File

@ -49,6 +49,7 @@ pub fn init_recorder() -> Option<PrometheusHandle> {
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<PrometheusHandle> {
.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<dyn Observer> {
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:?}"
);
}
}