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

标签 javascript node.js grafana prometheus

我正在尝试使用摘要指标,但不太清楚应该在哪里调用 summary.observe?这是 prom-client 示例(您可以在 npm 上找到):

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

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

  1. observe(10) 是什么意思?

  2. 我应该在哪里调用 summary.observe(10)?就在摘要指标声明之后或函数/端点调用结束时,例如:

    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?
    } 
    

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

最佳答案

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

  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 documentation :

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

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

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

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

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

如果您想测量 serviceCall() 返回的一些数据,您可以将其提供给摘要

number_bytes_exchanged = await this.serviceCall();
summary.observe(number_bytes_exchanged);

如果你想测量服务调用所花费的时间

const observe_response_time = summary.startTimer();
await this.serviceCall();
observe_response_time();

关于javascript - Prometheus summary.observe 方法有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56297842/

相关文章:

javascript - 纯文本文件的跨域ajax请求

javascript - 为什么图的底部被切掉了?

javascript - 滚动窗口没有单独滚动,Html/Css/Javascript 中屏幕高度不固定?

node.js - 什么版本的 npm 适用于 nodejs 0.10?

javascript - 在 Javascript 中使用 CDATA block 内的变量?

node.js - Firebase 3.0 token : [Error: Invalid claim 'kid' in auth header.]

javascript - Node js写入文件

grafana - 如何在 Alias 中使用 Metric 值?

elasticsearch - @在grafana指标中是什么意思?

mongodb - 使用 Prometheus 和 Grafana 监控 MongoDb