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入门与实践教程