Prometheus .NET Core客户端指标端点数据保留时长及配置咨询
关于KestrelMetricServer的指标存储与数据保留问题
默认指标数据存储策略
KestrelMetricServer(属于Prometheus.NET生态)默认采用内存内累加式存储,底层依赖InMemoryCollectorRegistry实现。所有指标数据直接存储在应用进程内存中,属于单进程本地存储,进程重启后所有指标数据会丢失。
如何覆盖默认存储策略
你可以通过实现ICollectorRegistry接口自定义存储逻辑,或者使用第三方存储实现,在实例化KestrelMetricServer时传入自定义注册表即可替换默认策略。
示例代码:
// 自定义注册表实现示例 public class CustomCollectorRegistry : ICollectorRegistry { // 实现ICollectorRegistry接口的所有方法,如GetCollectors、Register等 // 根据自身存储需求编写具体逻辑 } // 传入自定义注册表实例初始化KestrelMetricServer var customRegistry = new CustomCollectorRegistry(); var metricServer = new KestrelMetricServer(port: 1234, registry: customRegistry); metricServer.Start();
如果仅需调整内存存储的行为(比如添加过期逻辑),也可以基于InMemoryCollectorRegistry进行扩展改造。
未被抓取时的数据保留时长
默认的InMemoryCollectorRegistry不会自动清理未被抓取的指标数据,这些数据会永久保留在应用内存中,直到以下任一情况发生:
- 应用进程重启或终止
- 手动调用指标的清理/重置方法(如
Counter.Reset()、Gauge.Set(0)等) - 指标实例失去所有引用被垃圾回收
内容的提问来源于stack exchange,提问作者Samrat Alamgir
相关产品推荐
相关产品推荐

