【问题标题】: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);

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

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

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

【问题讨论】:

    标签: javascript node.js grafana prometheus


    【解决方案1】:

    首先,让我们澄清一下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();
    

    【讨论】:

    • 谢谢迈克尔,我只是很困惑我真正需要将什么作为参数传递给 summary.observe(????>);根据 prom-client 文档,他们在这里真正观察到了什么:summary.observe(10); ???
    • 它们是有关如何使用对象的示例:summary.observe(10) 指示要调用哪个函数来获取先前计算的值(大小,数字,...),而 end = summary.startTimer(); end() 是 @ 的语法糖987654335@。但你是对的,在什么都没有的情况下被这样称呼,它不能衡量任何东西。
    猜你喜欢
    • 1970-01-01
    • 2015-04-07
    • 2018-10-23
    • 2011-09-01
    • 2010-11-03
    • 2019-09-19
    • 2012-06-27
    • 2016-02-19
    • 1970-01-01
    相关资源
    最近更新 更多