Prometheus summary.observe 方法有啥作用?

Posted

技术标签:

【中文标题】Prometheus summary.observe 方法有啥作用?【英文标题】:What does Prometheus summary.observe method do?Prometheus summary.observe 方法有什么作用? 【发布时间】:2019-10-11 08:43:22 【问题描述】:

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

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

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

    observe(10) 是什么意思?

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

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

【问题讨论】:

【参考方案1】:

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

    值的总和(也称为观察值) 观察次数 分位数

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

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

名称和标签(通常用于标识指标) - 例如: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_secondsquantile="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();

【讨论】:

谢谢迈克尔,我只是很困惑我真正需要将什么作为参数传递给 summary.observe(????>);根据 prom-client 文档,他们在这里真正观察到了什么:summary.observe(10); ??? 它们是有关如何使用对象的示例:summary.observe(10) 指示要调用哪个函数来获取先前计算的值(大小,数字,...),而 end = summary.startTimer(); end() 是 @ 的语法糖987654335@。但你是对的,在什么都没有的情况下被这样称呼,它不能衡量任何东西。

以上是关于Prometheus summary.observe 方法有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

grafana和prometheus系列六:prometheus默认存储

2019最新 prometheus视频教程 prometheus监控视频 prometheus入门与实践教程

2019最新 prometheus视频教程 prometheus监控视频 prometheus入门与实践教程

Prometheus简介

Prometheus学习系列之Prometheus 联盟迁移

Prometheus 运维监控