0. 概述

在使用 Prometheus 的时候,经常会遇到一些自己觉得奇怪的事情,但是,如果能结合 Prometheus 自身提供的一些 metric 来分析的话,又发现一切都是情理之中。

1. 运行时状态

Prometheus 作为一个 Go 开发的程序,那么内部肯定少不了 goroutine 之类的状态。所以,很显然,这些 Go 常见的 metric 都是有的,例如我举一些比较常见的例子:

这些 metric 主要是在定位 prometheus 运行过程中内存或者 CPU 占用高的时候会比较有用,但是说实话,我用的不多,以为真的泄漏的时候,看这些 metric 还是不够的,需要结合 pprof 进行。

2. 规则运行状态

在一个成熟的监控系统中,可能会设置很多不同的规则,但是,执行这些规则都是需要耗费系统资源的,所以,当有一些意外情况的时候,下面这些 metric 可能就能帮助上了:

3. 采集状态

这是一个比较重要的状态,例如我经常关心的是 prometheus 采集 exporter 是否正确,是否真的采集到了数据还是说 exporter 超时之类的异常,那么都是通过这个类别的 metric 来定位的。

这个类别的 metric 其实就 5 个,分别是:

4. 存储状态

在 Prometheus 中,用的是自己的存储引擎,并且它会进行内存缓存。所以,当发现查询数据不对或者内存占用偏高的时候,最后不妨怀疑一下是不是存储的问题,下面是一些可能有价值的数据:

5. 小结

本文总结了一下在 prometheus 中内置的一些 metric,这些 metric 在使用 prometheus 过程中定位问题非常有用。例如当别人问你为什么没有一个metric 数据的时候,你可以直接用 up 状态来分析一下;如果别人问你为什么 prometheus 内存占用这么高的时候,你可以用 prometheus_tsdb_head_seriesprometheus_tsdb_head_chunks 来分析一波。

6. Ref