echo-contrib的Prometheus Go exporter是否将指标存储在内存中?
关于echo框架Prometheus中间件
/metrics端点的指标来源说明 - 该端点返回的所有指标,全部来自服务进程内存中维护的Prometheus指标对象,既没有对接任何外部存储,也不会做本地磁盘持久化。
- 整个指标流转逻辑非常直接:
- 中间件启动初始化时,会向Prometheus指标注册表(默认用全局默认注册表,也支持传入自定义注册表)注册好预置的HTTP服务观测指标,包含请求总量、请求处理耗时、正在处理的请求数、请求/响应体大小等Counter、Gauge、Histogram类型的指标实例,这些实例从创建开始就常驻在服务进程内存里。
- 服务运行过程中,每笔HTTP请求经过中间件时,中间件会根据请求方法、匹配路由、响应状态码这些标签维度,直接更新内存里对应指标实例的数值:比如给请求总量计数器加1、给耗时直方图记录本次请求的处理耗时、请求进来时给在途请求数加1、请求返回时给在途请求数减1,所有更新操作都是直接修改内存数据,没有额外IO开销。
- 访问
/metrics端点时确实是直接读内存返回:端点的处理逻辑会遍历注册表里所有存在内存中的指标实例,拉取每个指标当前的最新值,按照Prometheus标准的文本格式拼接成响应体直接返回,全程不会读磁盘、也不会调用外部服务拿数据。 - 注意:因为所有指标都存在内存里,一旦服务进程重启,之前累计的所有历史指标值都会直接清空重置,这是这类内嵌到业务服务里的指标中间件的正常表现,不是故障。
内容的提问来源于stack exchange,提问作者Mudasir Younas
相关产品推荐
相关产品推荐

