HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

详细解读 Prometheus 四种指标类型

  • 2020-05-16
  • 本文字数:3951 字

    阅读完需:约 13 分钟

详细解读Prometheus四种指标类型

Prometheus 的客户端库中提供了四种核心的指标类型。但这些类型只是在客户端库(客户端可以根据不同的数据类型调用不同的 API 接口)和在线协议中,实际在 Prometheus server 中并不对指标类型进行区分,而是简单地把这些指标统一视为无类型的时间序列。不过,将来我们会努力改变这一现状的。

Counter(计数器)

Counter 类型代表一种样本数据单调递增的指标,即只增不减,除非监控系统发生了重置。例如,你可以使用 counter 类型的指标来表示服务的请求数、已完成的任务数、错误发生的次数等。counter 主要有两个方法:


//将counter值加1.Inc()// 将指定值加到counter值上,如果指定值<0 会panic.Add(float64)
复制代码


Counter 类型数据可以让用户方便的了解事件产生的速率的变化,在 PromQL 内置的相关操作函数可以提供相应的分析,比如以 HTTP 应用请求量来进行说明:


//通过rate()函数获取HTTP请求量的增长率rate(http_requests_total[5m])//查询当前系统中,访问量前10的HTTP地址topk(10, http_requests_total)
复制代码


不要将 counter 类型应用于样本数据非单调递增的指标,例如:当前运行的进程数量(应该用 Guage 类型)。


不同语言关于 Counter 的客户端库使用文档:


Guage(仪表盘)

Guage 类型代表一种样本数据可以任意变化的指标,即可增可减。guage 通常用于像温度或者内存使用率这种指标数据,也可以表示能随时增加或减少的“总数”,例如:当前并发请求的数量。


对于 Gauge 类型的监控指标,通过 PromQL 内置函数 delta() 可以获取样本在一段时间内的变化情况,例如,计算 CPU 温度在两小时内的差异:


dalta(cpu_temp_celsius{host="zeus"}[2h])
复制代码


你还可以通过 PromQL 内置函数 predict_linear() 基于简单线性回归的方式,对样本数据的变化趋势做出预测。例如,基于 2 小时的样本数据,来预测主机可用磁盘空间在 4 个小时之后的剩余情况:


predict_linear(node_filesystem_free{job="node"}[2h], 4 * 3600) < 0
复制代码


不同语言关于 Guage 的客户端库使用文档:


Histogram(直方图)

在大多数情况下人们都倾向于使用某些量化指标的平均值,例如 CPU 的平均使用率、页面的平均响应时间。这种方式的问题很明显,以系统 API 调用的平均响应时间为例:如果大多数 API 请求都维持在 100ms 的响应时间范围内,而个别请求的响应时间需要 5s,那么就会导致某些 WEB 页面的响应时间落到中位数的情况,而这种现象被称为 长尾问题


为了区分是平均的慢还是长尾的慢,最简单的方式就是按照请求延迟的范围进行分组。例如,统计延迟在 0~10ms 之间的请求数有多少而 10~20ms 之间的请求数又有多少。通过这种方式可以快速分析系统慢的原因。Histogram 和 Summary 都是为了能够解决这样问题的存在,通过 Histogram 和 Summary 类型的监控指标,我们可以快速了解监控样本的分布情况。


Histogram 在一段时间范围内对数据进行采样(通常是请求持续时间或响应大小等),并将其计入可配置的存储桶(bucket)中,后续可通过指定区间筛选样本,也可以统计样本总数,最后一般将数据展示为直方图。


Histogram 类型的样本会提供三种指标(假设指标名称为 <basename>):


  • 样本的值分布在 bucket 中的数量,命名为 _bucket{le="<上边界>"}。解释得更通俗易懂一点,这个值表示指标值小于等于上边界的所有样本数量。


 // 在总共2次请求当中。http 请求响应时间 <=0.005 秒 的请求次数为0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.005",} 0.0 // 在总共2次请求当中。http 请求响应时间 <=0.01 秒 的请求次数为0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.01",} 0.0 // 在总共2次请求当中。http 请求响应时间 <=0.025 秒 的请求次数为0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.025",} 0.0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.05",} 0.0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.075",} 0.0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.1",} 0.0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.25",} 0.0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.5",} 0.0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.75",} 0.0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="1.0",} 0.0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="2.5",} 0.0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="5.0",} 0.0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="7.5",} 2.0 // 在总共2次请求当中。http 请求响应时间 <=10 秒 的请求次数为 2 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="10.0",} 2.0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="+Inf",} 2.0
复制代码


  • 所有样本值的大小总和,命名为<basename>_sum。


 // 实际含义:发生的2次 http 请求总的响应时间为 13.107670803000001 秒 io_namespace_http_requests_latency_seconds_histogram_sum{path="/",method="GET",code="200",} 13.107670803000001
复制代码


  • 样本总数,命名为<basename>_count。值和 <basename>_bucket{le="+Inf"}相同。


 // 实际含义:当前一共发生了 2 次 http 请求 io_namespace_http_requests_latency_seconds_histogram_count{path="/",method="GET",code="200",} 2.0
复制代码


可以通过 histogram_quantile() 函数来计算 Histogram 类型样本的分位数。分位数可能不太好理解,我举个例子,假设你要计算样本的 9 分位数(quantile=0.9),即表示 90% 的样本的值。Histogram 还可以用来计算应用性能指标值(Apdex score)。


不同语言关于 Histogram 的客户端库使用文档:


Summary(摘要)

与 Histogram 类型类似,用于表示一段时间内的数据采样结果(通常是请求持续时间或响应大小等),但它直接存储了分位数(通过客户端计算,然后展示出来),而不是通过区间来计算。


Summary 类型的样本也会提供三种指标(假设指标名称为 ):


  • 样本值的分位数分布情况,命名为 <basename>{quantile="<φ>"}。


 // 含义:这 12 次 http 请求中有 50% 的请求响应时间是 3.052404983s io_namespace_http_requests_latency_seconds_summary{path="/",method="GET",code="200",quantile="0.5",} 3.052404983 // 含义:这 12 次 http 请求中有 90% 的请求响应时间是 8.003261666s io_namespace_http_requests_latency_seconds_summary{path="/",method="GET",code="200",quantile="0.9",} 8.003261666
复制代码


  • 所有样本值的大小总和,命名为 <basename>_sum。


 // 含义:这12次 http 请求的总响应时间为 51.029495508s io_namespace_http_requests_latency_seconds_summary_sum{path="/",method="GET",code="200",} 51.029495508
复制代码


  • 样本总数,命名为 <basename>_count。


 // 含义:当前一共发生了 12 次 http 请求 io_namespace_http_requests_latency_seconds_summary_count{path="/",method="GET",code="200",} 12.0
复制代码


现在可以总结一下 Histogram 与 Summary 的异同:


  • 它们都包含了 <basename>_sum 和 <basename>_count 指标

  • Histogram 需要通过 <basename>_bucket 来计算分位数,而 Summary 则直接存储了分位数的值。


关于 Summary 与 Histogram 的详细用法,请参考:


https://prometheus.io/docs/practices/histograms/


不同语言关于 Summary 的客户端库使用文档:



原文链接:

https://prometheus.io/docs/concepts/metric_types/


2020-05-16 17:168846

评论

发布
暂无评论
发现更多内容

杭州银行 x 平凯星辰 TiDB “行领柜面系统”荣获 2024 “金鼎奖”

PingCAP

安全 创新 金融 银行 TiDB

数据恢复easyrecovery是磁盘工具吗 easyrecovery数据恢复软件怎么用

阿拉灯神丁

磁盘 EasyRecovery 数据恢复软件 硬盘数据恢复 软件包

电信行业怎么定义?需要采购堡垒机吗?

行云管家

网络安全 数据安全 堡垒机 电信

和鲸科技参与第17届中国R会议,分享有组织科研的模型生命周期管理

ModelWhale

人工智能 R 数据科学 AI4S

在 Go 中如何让结构体不可比较?

伤感汤姆布利柏

人类历史上首届AI选美,谁吃到了第一波AI审美红利?

脑极体

AI

人工智能|ReACT 推理提示

霍格沃兹测试开发学社

技术前沿|ICML 2024 中稿快讯!解锁大模型密态推理场景下的“百变怪”?

隐语SecretFlow

大庆正规等保测评机构有几家?在哪里?

行云管家

等保 等保测评 大庆

硅纪元视角 | Stability AI推出Stable Video 4D,40秒生成8角度动态视频!

硅纪元

Stable Video 4D Mistral Large 2 “Frame”眼镜 HoloDreamer

Apache Doris + Apache Hudi 快速搭建指南|Lakehouse 使用手册(一)

SelectDB

数据湖 Doris Hudi LakeHouse 湖仓一体

Apache Doris 2.1.5 版本正式发布

SelectDB

倒排索引 Doris 半结构化数据 湖仓一体 物化视图

强调数据价值,创建现代化全面预算管理系统

智达方通

企业管理 数据价值 数字化升级 全面预算管理系统

【论文速读】| MoRSE:利用检索增强生成技术填补网络安全专业知识的空白

云起无垠

利用 Databend 生态构建现代数据湖工作流

Databend

一文了解MySQL索引机制

京东科技开发者

杭州银行与平凯星辰联合荣获 2024 “金鼎奖”

先锋IT

平凯星辰亮相 2024 中国国际金融展,发布银行交易明细查询白皮书

PingCAP

金融 会议 TiDB 交易明细

最新资讯!2024可信云大会重磅发布《可观测性能力建设指南》!

乘云数字DataBuff

白皮书 可观测平台 可信云大会

AI应用行业落地100例 | 移民公司Envoy Global引入AI员工赋能,效率飙升80%,开启服务新篇章

硅纪元

Qualcomm IPQ9574 and IPQ9554: The core choice to build Wi-Fi 7 high-performance routers

wifi6-yiyi

WiFi7 ipq9574

崖山异构数据库迁移利器YMP初体验-Oracle迁移YashanDB

YashanDB

yashandb 崖山数据库 崖山DB

缓存框架 Caffeine 的可视化探索与实践

vivo互联网技术

Caffeine 缓存可视化 动态下发

如何定量分析 Llama 3,大模型系统工程师视角的 Transformer 架构

Baidu AICLOUD

Transformer llama GPU 利用率 推理并发

TiDB Hackathon 2024丨用 TiDB 构建未来的 AI 创新应用, 瓜分超 ¥210,000 奖金池!

PingCAP

项目 hackathon TiDB 竞赛

人工智能丨ReACT 推理提示

测试人

软件测试

人工智能|ReACT 推理提示

测吧(北京)科技有限公司

测试

Apache Doris + Paimon 快速搭建指南|Lakehouse 使用手册(二)

SelectDB

数据湖 Doris LakeHouse 湖仓一体 paimon

Solana行情为何坚挺?强劲基本面和ETF预期吸引资本流入

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

Java CompletableFuture 异步超时实现探索

京东科技开发者

防御性编程:让系统坚不可摧

京东科技开发者

详细解读Prometheus四种指标类型_文化 & 方法_Rancher_InfoQ精选文章