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,实现对各类应用或系统的监控。

相关推荐
Karoku0661 小时前
【k8s集群应用】kubeadm1.20高可用部署(3master)
运维·docker·云原生·容器·kubernetes
探索云原生6 小时前
在 K8S 中创建 Pod 是如何使用到 GPU 的: nvidia device plugin 源码分析
ai·云原生·kubernetes·go·gpu
启明真纳6 小时前
elasticache备份
运维·elasticsearch·云原生·kubernetes
福大大架构师每日一题9 小时前
37.1 prometheus管理接口源码讲解
ios·iphone·prometheus
会飞的土拨鼠呀10 小时前
chart文件结构
运维·云原生·kubernetes
Hello Dam13 小时前
面向微服务的Spring Cloud Gateway的集成解决方案:用户登录认证与访问控制
spring cloud·微服务·云原生·架构·gateway·登录验证·单点登录
power-辰南14 小时前
Zookeeper 底层原理解析
分布式·zookeeper·云原生
power-辰南14 小时前
Zookeeper常见面试题解析
分布式·zookeeper·云原生
Cairry.1 天前
WatchAlert - 开源多数据源告警引擎
云原生·开源·prometheus
Mitch3111 天前
【漏洞复现】CVE-2023-37461 Arbitrary File Writing
web安全·网络安全·prometheus·metersphere·漏洞复现