Prometheus summary.observe 方法有什么作用?

Joh*_*abb 5 javascript node.js grafana prometheus

我正在尝试使用汇总指标而不是安静地了解我将 summary.observe 调用放在哪里?这是舞会客户端示例(您可以在 npm 上找到):

const client = require('prom-client');
const summary = new client.Summary({
  name: 'metric_name',
  help: 'metric_help'
});
summary.observe(10);
Run Code Online (Sandbox Code Playgroud)

但没有足够的信息如何使用它。

  1. 观察(10)是什么意思?
  2. 我把那个 summary.observe(10) 电话放在哪里?就在摘要指标声明之后或在函数/endoint 调用结束时,例如:

const client = require('prom-client');

const summary = new client.Summary({
  name: 'metric_name',
  help: 'metric_help'
});
summary.observe(10); // do I put it here?

async myFunc(){
    await this.serviceCall();
    summary.observe(10); // or here?
} 
Run Code Online (Sandbox Code Playgroud)

有人有总结观察的好例子/解释吗?

Mic*_*bez 5

首先,让我们澄清一下什么是摘要:摘要度量从事件中捕获单个观察结果并将它们汇总为许多相关的度量:

  1. 值的总和(又名观察)
  2. 观察计数
  3. 分位数

举个例子:如果你正在测量一个服务的响应时间:

  • 首先,您创建一个汇总指标,提供

    • 名称和标签(通常用于识别指标) - 例如: foobar_request_duration_seconds
    • 通常以某种方式指示测量窗口(观察次数或事件的最大年龄)
    • 要计算的分位数列表 - 例如:0.1、0.5(中位数)、0.75、0.9
  • 对于每个请求,您将计算请求的响应时间 - 这是一个观察

  • 然后将计算出的请求响应时间提供给摘要对象
  • 当 Prometheus 抓取您的端点时,根据观察到的响应时间度量计算指标

    • foobar_request_duration_seconds_sum: 请求消耗的总秒数
    • foobar_request_duration_seconds_count:请求数(注意你可以用总和计算平均值)
    • foobar_request_duration_seconds_seconds{quantile="0.1"}:响应时间 10%(...对于所有配置的分位数都相同)

我希望这可以帮助您理解prom-client 文档

第一个示例显示如何指示要计算的分位数

new client.Summary({
  name: 'metric_name',
  help: 'metric_help',
  percentiles: [0.01, 0.1, 0.9, 0.99]
});
Run Code Online (Sandbox Code Playgroud)

第二个如何限制测量窗口;在这里,度量是在过去 10 分钟内计算的(使用 5 个桶 - 这会影响值的平滑):

new client.Summary({
  name: 'metric_name',
  help: 'metric_help',
  maxAgeSeconds: 600,
  ageBuckets: 5
});
Run Code Online (Sandbox Code Playgroud)

回到您的问题,observe()应该根据您正在观察的内容调用该方法。

如果要测量 返回的某些数据serviceCall(),请将其提供给摘要

number_bytes_exchanged = await this.serviceCall();
summary.observe(number_bytes_exchanged);
Run Code Online (Sandbox Code Playgroud)

如果您想测量服务呼叫所花费的时间

const observe_response_time = summary.startTimer();
await this.serviceCall();
observe_response_time();
Run Code Online (Sandbox Code Playgroud)