OpenMetrics 和 Prometheus 数据规范

OpenMetrics 是云原生计算基金会(CNCF)项目,旨在标准化云原生应用程序中暴露指标的过程。OpenMetrics 的规范是公开的,可以在github上阅读。本文简要介绍与数据模型相关的规范,有助于你学习Prometheus及相关的监控系统。

Prometheus Exposition Format

OpenMetrics规范基于Prometheus Exposition Format的。它是一种简单的、基于文本的、人类可读的数据格式,在社区中被广泛采用。围绕Prometheus暴露指标数据格式有数百种集成,甚至一些其他监控工具也已经直接使用它。然而,在名称中加入"Prometheus"使其难以获得竞争对手或其他相关方的支持。OpenMetrics希望通过基于厂商中立和开放数据格式原则来改变现状,这看起来像是策略性的公关行动,但它已经得到了一些大型组织的支持。所以看起来它有一个美好的未来。

数据模型

OpenMetrics中展示的度量数据大致如下:、

shell 复制代码
# TYPE acme_http_router_request_seconds summary
# UNIT acme_http_router_request_seconds seconds
# HELP acme_http_router_request_seconds Latency though all of ACME's HTTP request router.
acme_http_router_request_seconds_sum{path="/api/v1",method="GET"} 9036.32
acme_http_router_request_seconds_count{path="/api/v1",method="GET"} 807283.0
acme_http_router_request_seconds_created{path="/api/v1",method="GET"} 1605281325.0
acme_http_router_request_seconds_sum{path="/api/v2",method="POST"} 479.3
acme_http_router_request_seconds_count{path="/api/v2",method="POST"} 34.0
acme_http_router_request_seconds_created{path="/api/v2",method="POST"} 1605281325.0
# TYPE go_goroutines gauge
# HELP go_goroutines Number of goroutines that currently exist.
go_goroutines 69
# TYPE process_cpu_seconds counter
# UNIT process_cpu_seconds seconds
# HELP process_cpu_seconds Total user and system CPU time spent in seconds.
process_cpu_seconds_total 4.20072246e+06
# EOF

这种格式的最佳特性之一是可读性。我们简要介绍注释部分,分别为type, unit, help:

  • 使用TYPE,定义metric.type和标签。
  • 通过UNIT,定义了在该MetricFamily中使用的单位。
  • HELP是用于人类可读的度量族的描述。应该是较短字符串,以便可以用作工具提示。

度量类型

counter

计数器是对离散事件进行计数的度量类型。它必须有一个称为total的值,并且不会随时间推移而减少。计数器可用于计算错误或请求的数量、所花费的cpu时间或其他度量累积的数据。

shell 复制代码
# TYPE process_cpu_seconds counter
# UNIT process_cpu_seconds seconds
# HELP process_cpu_seconds Total user and system CPU time spent in seconds.
process_cpu_seconds_total 4.20072246e+06

gauge

Gauge是最简单的度量类型之一。它由可以随时间变化的单一值组成。与计数器相反,Gauge可以在任何给定的时间改变其值,可以增加或减少其值。

shell 复制代码
# TYPE go_goroutines gauge
# HELP go_goroutines Number of goroutines that currently exist.
go_goroutines 69

histogram

直方图用于测量离散事件并将其分成桶。常见的例子是请求持续时间和I/O请求大小。直方图MetricPoints必须至少有一个桶。Count、created和sum值是可选的。

shell 复制代码
# TYPE request_duration histogram
# HELP request_duration help
request_duration_bucket{le="0"} 0
request_duration_bucket{le="0.00000000001"} 0
request_duration_bucket{le="0.0000000001"} 0
request_duration_bucket{le="1e-04"} 0
request_duration_bucket{le="1.1e-4"} 0
request_duration_bucket{le="1.1e-3"} 0
request_duration_bucket{le="1.1e-2"} 0
request_duration_bucket{le="1"} 0
request_duration_bucket{le="1e+05"} 0
request_duration_bucket{le="10000000000"} 0
request_duration_bucket{le="100000000000.0"} 0
request_duration_bucket{le="+Inf"} 3
request_duration_count 3
request_duration_sum 2
# EOF

summary

摘要与直方图非常相似,当直方图计算成本较高时可以使用摘要。我们可以使用sum、count和created值来创建摘要。

python 复制代码
# TYPE acme_http_router_request_seconds summary
# UNIT acme_http_router_request_seconds seconds
# HELP acme_http_router_request_seconds Latency though all of ACME's HTTP request router.
acme_http_router_request_seconds_sum{path="/api/v1",method="GET"} 9036.32
acme_http_router_request_seconds_count{path="/api/v1",method="GET"} 807283.0
acme_http_router_request_seconds_created{path="/api/v1",method="GET"} 1605281325.0
acme_http_router_request_seconds_sum{path="/api/v2",method="POST"} 479.3
acme_http_router_request_seconds_count{path="/api/v2",method="POST"} 34.0
acme_http_router_request_seconds_created{path="/api/v2",method="POST"} 1605281325.0

info

信息度量用于公开在进程生命周期内不应更改的文本信息。常见的例子是应用程序的版本、修订控制提交和编译器的版本。

信息度量的MetricPoint包含LabelSet。Info MetricPoint的标签集的标签名不能与其Metric的标签集的标签名相同。Info可用于对值不随时间变化的enum进行编码,例如网络接口的类型。

Metrics Endpoint

该标准的实现者必须以OpenMetrics格式公开度量标准。为记录的端点的HTTP Get请求提供响应,该端点应命名为/metrics。此端点将被应用端定期消费,它必须能够为应用端调用响应有意义的数据。

总结

本文介绍了OpenMetrics数据格式规范,理解这些规范有助于我们进一步学习prometheus,实现对各类应用或系统的监控。

相关推荐
阿里云云原生2 小时前
智能体构建与进化——Agent 开源开发者沙龙·广州站精彩回顾 & PPT 下载
云原生·agent
阿里云云原生3 小时前
阿里云联合 Datadog,补齐 Go 可观测性最后短板
云原生·go
qq_452396234 小时前
第十二篇:《Istio 生产环境最佳实践与排错指南》
云原生·php·istio
Henry-SAP7 小时前
SAP MRP类型如何影响计划订单生成
人工智能·云原生·sap·erp
云烟成雨TD9 小时前
Micrometer 系列【52】统一观测:Observation | 观测载体
云原生·链路追踪·micrometer
wsad053210 小时前
CentOS Stream 10 Docker 容器无法访问外网:xt_addrtype 内核模块缺失解决方法
linux·网络·docker·云原生·eureka·centos
行业研究员10 小时前
TDSQL-C:云原生架构与AI能力解析
人工智能·云原生·架构·云原生数据库·ai能力解析
人间凡尔赛11 小时前
当 AI Agent 攻陷网关:Istio agentgateway 与 Gateway API Inference Extension 实战解析
后端·云原生·架构
运维老郭12 小时前
【K8s Pod生命周期】CrashLoopBackOff 避坑指南:7 条命令定位 Pod 反复重启根因
云原生
@insist1231 天前
系统集成项目管理工程师-安全架构与云原生架构
云原生·架构·软考·安全架构·系统集成项目管理工程师·软考中项·软件水平考试