如何使用 SpringBoot 2、InfluxDB 和 Grafana 理解千分尺指标?
How to make sense of the micrometer metrics using SpringBoot 2, InfluxDB and Grafana?
我正在尝试配置一个 SpringBoot 应用程序以将指标导出到 InfluxDB,以便使用 Grafana 仪表板将它们可视化。我以 this 仪表板为例,它使用普罗米修斯作为后端。
对于某些指标,我很容易弄清楚如何为它们创建图表,但对于其他一些指标,我不知道如何创建图表,甚至不知道如何创建图表。所以我列举了以下几点我不太确定的事情:
是否有描述值单元的文档?我作为示例使用的应用程序没有任何负载,所以有时我不知道该值是位、字节、秒、毫秒、计数等。
一些测量值包含带有字段 'count'、'sum'、'mean' 和 'upper' 的标签 'metric_type = histogram'。同样,在这里我不知道价值单位是什么,上限是什么意思或我应该如何绘制它们。例如 'http_server_requests' 或 'jvm_gc_pause'.
从我在 Grafana 仪表板示例中看到的情况来看,我似乎应该使用这些直方图类型的测量来创建包含计数的图表和包含持续时间的图表。例如,我看到我应该能够创建一个包含请求数量的图表和另一个包含请求持续时间的图表。或者对于垃圾收集器,我应该能够提供次要和主要 GC 的数量以及持续时间的图表。
作为我插入 InfluxDB 的度量示例:
time count exception mean method metric_type outcome status sum upper uri
1625579637946000000 1 None 0.892144 GET histogram SUCCESS 200 0.892144 0.892144 /actuator/health
或
time action cause count mean metric_type sum upper
1625581132316000000 end of minor GC Allocation Failure 1 2 histogram 2 2
我同意千分尺的文档不是很好。我必须深入研究代码才能找到答案...
关于您关于 jvm_gc_pause 的问题,它是一个 Timer 并且实现是 AbstractTimer
,这是一个 class在其他组件中包装 Histogram
。此特定指标由 JvmGcMetrics
class 注册。发布到 InfluxDB 的各种测量值由 InfluxMeterRegistry.writeTimer(Timer timer)
方法确定:
- 总和:
timer.totalTime(getBaseTimeUnit()) // The total time of recorded events
- 计数:
timer.count() // The number of times stop has been called on the timer
- 意思是:
timer.mean(getBaseTimeUnit()) // totalTime()/count()
- 上层:
timer.max(getBaseTimeUnit()) // The max time of a single event
基本时间单位是毫秒。
同样,http_server_requests 似乎也是 Timer
。
我相信你是正确的,明智的做法是在两个单独的 Grafana 面板上绘制图表:一个面板用于使用 sum
(或 mean
或 upper
)的 GC 暂停秒数,和一个使用 count
.
的 GC 事件面板
我正在尝试配置一个 SpringBoot 应用程序以将指标导出到 InfluxDB,以便使用 Grafana 仪表板将它们可视化。我以 this 仪表板为例,它使用普罗米修斯作为后端。 对于某些指标,我很容易弄清楚如何为它们创建图表,但对于其他一些指标,我不知道如何创建图表,甚至不知道如何创建图表。所以我列举了以下几点我不太确定的事情:
是否有描述值单元的文档?我作为示例使用的应用程序没有任何负载,所以有时我不知道该值是位、字节、秒、毫秒、计数等。
一些测量值包含带有字段 'count'、'sum'、'mean' 和 'upper' 的标签 'metric_type = histogram'。同样,在这里我不知道价值单位是什么,上限是什么意思或我应该如何绘制它们。例如 'http_server_requests' 或 'jvm_gc_pause'.
从我在 Grafana 仪表板示例中看到的情况来看,我似乎应该使用这些直方图类型的测量来创建包含计数的图表和包含持续时间的图表。例如,我看到我应该能够创建一个包含请求数量的图表和另一个包含请求持续时间的图表。或者对于垃圾收集器,我应该能够提供次要和主要 GC 的数量以及持续时间的图表。
作为我插入 InfluxDB 的度量示例:
time count exception mean method metric_type outcome status sum upper uri
1625579637946000000 1 None 0.892144 GET histogram SUCCESS 200 0.892144 0.892144 /actuator/health
或
time action cause count mean metric_type sum upper
1625581132316000000 end of minor GC Allocation Failure 1 2 histogram 2 2
我同意千分尺的文档不是很好。我必须深入研究代码才能找到答案...
关于您关于 jvm_gc_pause 的问题,它是一个 Timer 并且实现是 AbstractTimer
,这是一个 class在其他组件中包装 Histogram
。此特定指标由 JvmGcMetrics
class 注册。发布到 InfluxDB 的各种测量值由 InfluxMeterRegistry.writeTimer(Timer timer)
方法确定:
- 总和:
timer.totalTime(getBaseTimeUnit()) // The total time of recorded events
- 计数:
timer.count() // The number of times stop has been called on the timer
- 意思是:
timer.mean(getBaseTimeUnit()) // totalTime()/count()
- 上层:
timer.max(getBaseTimeUnit()) // The max time of a single event
基本时间单位是毫秒。
同样,http_server_requests 似乎也是 Timer
。
我相信你是正确的,明智的做法是在两个单独的 Grafana 面板上绘制图表:一个面板用于使用 sum
(或 mean
或 upper
)的 GC 暂停秒数,和一个使用 count
.