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

相关推荐
昌sit!1 小时前
K8S node节点没有相应的pod镜像运行故障处理办法
云原生·容器·kubernetes
茶馆大橘4 小时前
微服务系列五:避免雪崩问题的限流、隔离、熔断措施
java·jmeter·spring cloud·微服务·云原生·架构·sentinel
北漂IT民工_程序员_ZG4 小时前
k8s集群安装(minikube)
云原生·容器·kubernetes
coding侠客5 小时前
揭秘!微服务架构下,Apollo 配置中心凭啥扮演关键角色?
微服务·云原生·架构
2301_8061313611 小时前
Kubernetes的基本构建块和最小可调度单元pod-0
云原生·容器·kubernetes
逻辑与&&12 小时前
[Prometheus学习笔记]从架构到案例,一站式教程
笔记·学习·prometheus
Walden-202013 小时前
构建基于 DCGM-Exporter, Node exporter,PROMETHEUS 和 GRAFANA 构建算力监控系统
docker·容器·grafana·prometheus
licy__15 小时前
Docker 基础命令简介
docker·云原生·eureka
0_1_bits18 小时前
【系统设计】高效的分布式系统:使用 Spring Boot 和 Kafka 实现 Saga 模式
spring boot·后端·云原生·架构·kafka·linq
探索云原生19 小时前
GPU 环境搭建指南:如何在裸机、Docker、K8s 等环境中使用 GPU
ai·云原生·kubernetes·go·gpu