Prometheus 云原生 - Prometheus 数据模型、Metrics 指标类型、Exporter 相关

目录

开始

Prometheus 数据类型

简单理解

时序样本

格式 和 命名要求

Metrics 指标类型

Counter 计数器

Gauge

Histogram

Summary

Exporter 相关

概述

Exporter 类型

Exporter 规范


 

开始


Prometheus 数据类型

简单理解

a)安装好 Prometheus 后会暴露一个 /metrics 的 HTTP 服务(相当于安装了 prometheus_exporter),通过配置(默认会加上 /metrics),Prometheus 就可以采集到这个 /metrics 里面的所有监控样本数据,例如:

prometheus.yml 文件中:

b)Prometheus 存储的是时序数据,也就是按照 时间的维度 存储连续的数据集合(指标名称 和 标签 来做唯一标识),例如如下:

# /metrics 页面中的数据(不显示时间):
prometheus_http_requests_total{code="200",handler="/api/v1/label/:name/values"} 3

# 非 /metrics 页面中的数据实际在数据库中存储的(带个毫秒级的 unix 时间戳):
prometheus_http_requests_total{code="200",handler="/api/v1/label/:name/values"} @133734964723510 3

# 上述格式: 指标名称 + 标签 + 时间戳 + 值
  • 指标名称:用于描述系统上要测定的某个特征,例如上述 prometheus_http_requests_total .
  • 标签:键值对数据,附加在 指标名称 后面,让指标能够支持多维度特征,例如  {code="200",handler="/api/v1/label/:name/values"}

c)双下划线标签是 Prometheus系统默认标签,是不会显示在 /metrics 页面中的. 

在 Prometheus 的 Target 中,鼠标移到 Labels 上,会显示如下:

常见标签如下:

  • __address:当前 target 实例的 套接字(ip:port) 地址.
  • __metrics_path:采集当前 target 使用的 url 路径,默认为 /metrics.
  • __scheme:采集当前 target 上指标数据使用的协议(http 或 https).
  • __scrape_interval:这个参数指定 Prometheus 以多长的时间间隔抓取一次目标的数据。
  • __scrape_timeout:这个参数定义了 Prometheus 抓取目标数据的超时时间。如果抓取操作在指定时间内未完成,Prometheus 将放弃这次抓取。
  • __param:传递 url 参数中第一个参数的值.
  • __name:此标签是标识指标名称的预留标签,能够使用标签选择器对指标名称进行过滤.

时序样本

按照某个时间维度采集的数据,称为样本,值包含:

  • 一个毫秒级的 unix 时间戳

  • 一个 float64 值

例如如下:

prometheus_http_requests_total{code="200",handler="/api/v1/label/:name/values"} @133734964723510 3

上述格式: 指标名称 + 标签 + 时间戳 + 值.

Ps:样本中的时间戳在 /metrics 页面中是不会显示的,只有在 prometheus 数据库中才能看到.

格式 和 命名要求

Prometheus 时序格式中包含 指标名称 和 标签:

<metric name>{<label name>=<label value>, ...}

例如,指标名称为 prometheus_http_requests_total 和 标签为 {code="200",handler="/api/v1/label/:name/values"} 如下

prometheus_http_requests_total{code="200",handler="/api/v1/label/:name/values"}

Ps:Prometheus指标名称 和 标签名/标签值 可以包含 ASCII 字母、数字、下划线、冒号.  但是必须匹配正则表达式  [a-zA-Z_:][a-zA-Z0-9_:]* ,也就是说开头的第一个字符一定不能是数字!!!  后面自定要 Labels 的时候一定要注意!!!

Metrics 指标类型

Counter 计数器

是一个单调递增的数值.  主要特点就是它的值 只增不减、除非被重置(例如系统重启).

通常用来记录某段时间内 http 请求增长率.... 

Count 并不会直接作用,而是需要借助 rate、irate 等函数来生成样本数据的变化状况(增长率)如下:

a)获取 1 小内,该指标下各时间序列上的 http 总请求数的增长速率

rate(prometheus_http_requests_total[1h]) 

b)irate 为高灵敏度函数,用于计算指标的瞬时速率,基于样本范围内的最后两个样本进行计算 

irate(prometheus_http_requests_total[1h])

Gauge

Gauge 是一种用于记录可以任意上下变化的数值指标类型. 与 Counter 单调递增不同,Gauge 可增可减,使得 Gauge 适合用来监控瞬时值或频繁变化的值.

Gauge 常用于进行 求和、平均值、最大值、最小值 等聚合计算,经常会搭配 PromQL 的 delta 使用.

a)返回该服务器上的CPU温度与1小时之前的差异

delta(cpu_temp_celsius{host="node_exporter"}[1h])

 

Histogram

用于记录数据分布的指标类型.  通过将数据划分成多个桶(buckets),统计每个桶中的样本数量,从而提供数据的分布情况,对于监控请求的延迟、响应时间非常有用.

例如统计在 0~15 ms 之间的请求数有多少,在 10~20ms 之间的请求数有多少.  这样可以快速分析系统慢的原因.

从 /metrics 页面中可以看出这些指标,以及值

a)在 handler 为 /metrics 的情况下,响应时间小于等于 0.1 秒的请求数是 612

prometheus_http_request_duration_seconds_bucket{handler="/metrics",le="0.1"} 612

b)在 handler 为 /metrics 的情况下,响应时间小于等于 0.2 秒的请求数是 612

prometheus_http_request_duration_seconds_bucket{handler="/metrics",le="0.2"} 612

结合上一个数据,这意味着响应时间在 0.1 秒到 0.2 秒之间的请求数是 0,因为前一个桶(le="0.1")的请求数也是 612

c)在 handler 为 /metrics 的情况下,响应时间小于等于 0.4 秒的请求数是 612。

prometheus_http_request_duration_seconds_bucket{handler="/metrics",le="0.4"} 612

这意味着响应时间在 0.2 秒到 0.4 秒之间的请求数是 0,因为前一个桶(le="0.2")的请求数也是 612。

Summary

用于观察和聚合时间持续时间或大小的指标类型.   和 Histogram 类似,用于记录一系列数据的分布情况,但是 Summary 更关注分位数.  Summary 会自动计算请求延迟、响应时间等的分位数,同时还会维护时间的总数和.

对于每个指标,Summary 以指标名称为前缀,生成如下几个指标序列:

  • _sum :统计所有样本值之和
  • _count :统计所有样本总数
  • {quantile=“x”} :统计样本值的分位数分布情况,分位数范围:0 ≤ x ≤ 1

在 /metrics 页面中如下:

a)prometheus_tsdb_wal_fsync_duration_seconds{quantile="0.99"} NaN

表示在给定时间段内,99 分位数的 WAL 持久化操作耗时无法计算。 

b)prometheus_tsdb_wal_fsync_duration_seconds_sum 0.010883303

表示在给定时间段内,所有 WAL 持久化操作的总耗时为约 0.010883303 秒。

c)prometheus_tsdb_wal_fsync_duration_seconds_count 2

表示在给定时间段内,共有 2 个 WAL 持久化操作被记录。

Exporter 相关

概述

所有可以向 Prometheus 提供监控样本数据的程序都可以被称为一个 Exporter,而 Exporter 的一个实例被称为 Target.

Exporter 可以用户自定义,也可以使用社区提供的,例如 MySQL_Exporter、Redis_Exporter、RabbitMQ_Exporter......

Prometheus 通过轮询的方式,定期的从这些 target 中获取样本数据.

Ps:安装好 Exporter 后会暴露一个 http://ip:port/metrics 的 HTTP 服务,通过 prometheus.yml 进行配置,就可以采集到 http://ip:port/metrics 里面所有监控样本数据.

Exporter 类型

通常来说可以将 Exporter 分为两类:

a)直接采集型

这类 Exporter 直接内置了对应的应用程序,用于向 Prometheus 直接提供 Target 数据支持.  这样设计的好处是,可以更好的监控各自系统的内部运行状态,同时也适合更多自定义监控的项目实施,例如 k8s 等,他们都内置了向 Prometheus 提供监控数据的端点.

这类例如:MySQL Exporter、RabbitMQ Exporter、Mongo Exporter、Nginx Exporter

b)简洁采集型

原始监控目标并不直接支持 Prometheus,需要我们使用 Prometheus 提供的 Client Library 编写该监控目标的监控采集程序,用户可以将程序独立运行,取获取指定的各类监控数据值. 

例如 Linux 操作系统自身并不能直接支持 Prometheus,因此需要单独安装 Node_Exporter 来进行监控 Linux 系统的各项监控指标.  

这类例如:Node Exporter

Exporter 规范

a)所有的 Exporter 程序都需要按照 Prometheus 的规范,返回监控样本数据.

以 node_exporter 为例,访问:http://env-base:9100/metrics 就会返回如下内容:

# 开头表示注释内容,这类样本数据说明如下:

  • # HELP 开头的行,表示 metrics 的帮助与说明注释,可以包含当前 监控指标名称 和 对应的说明信息.
  • # Type 开始的行,表示定义 metrics 类型,可以包含当前 监控指标名称 和 类型. 类型有 Counter、Gauge、Histogram、Summary.
  • 非 # 开头的,就是监控的样本数据.

 b)监控的样本数据规范

metric_name 和 label_name 必须遵循 PromQL 的格式规范要求.  value 是一个 float 格式的数据,timestamp 类型为 int64(从 1970-01-01 00:00:00 以来的毫秒数).  具有相同 metric_name 的样本必须要按照一个组的形式排列,并且每一行必须是唯一的 指标名称 和 指标键值对组合.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/803534.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nginx、LNMP万字详解

目录 Nginx 特点 Nginx安装 添加Nginx服务 Nginx配置文件 全局配置 HTTP配置 状态统计页面 Nginx访问控制 授权用户 授权IP 虚拟主机 基于域名 测试 基于IP 测试 基于端口 测试 LNAMP 解析方式 LNMP转发php-fpm解析 Nginx代理LAMP解析 LNMP部署示例 实…

Android:将自定义视图设为互动式

一、简介 点击查看将自定义视图设为互动式官网文档 绘制界面只是创建自定义视图的一个部分。您还需要让视图以非常类似于您模仿的真实操作的方式响应用户输入。 让应用中的对象的行为方式与真实对象相似。例如&#xff0c;不要让应用中的图片消失后重新出现在其他位置&#x…

模块化和包管理工具

一&#xff0c;模块化 1.定义 将一个复杂的程序文件依据一定规则&#xff08;规范&#xff09;拆分成多个文件的过程称之为 模块化 其中拆分出的 每个文件就是一个模块 &#xff0c;模块的内部数据是私有的&#xff0c;不过模块可以暴露内部数据以便其他模块使用 2.模块化…

NC65 流程设置 选择项目(project)参照时,得到的是合并报表项目参照

NC65 流程设置 枚举项选择项目&#xff08;project&#xff09;参照时&#xff0c;取值得到的是合并报表项目参照&#xff0c;如下图&#xff0c; 造成以上原因是因为存在相同编码的情况时&#xff0c;默认取该编码的第一个参照名称&#xff0c;而"project"编码对应…

彩电上自带的推箱子游戏是什么编程语言开发的?

2000年左右的厦新彩电上&#xff0c;自带了推箱子、华容道游戏。界面如下&#xff1a; 在线版推箱子游戏&#xff0c;网址&#xff1a;https://www.tuixiangzi.cn/ BASIC&#xff0c;全称是Beginners All-purpose Symbolic Instruction Code&#xff0c;含义是初学者通用符号…

【设计模式】【创建型模式】【02工厂模式】

系列文章 可跳转到下面链接查看下表所有内容https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5501文章浏览阅读2次。系列文章大全https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5501 目录 系…

pico+unity3d手部动画

在 Unity 开发中&#xff0c;输入系统的选择和运用对于实现丰富的交互体验至关重要。本文将深入探讨 Unity 中的 Input System 和 XR Input Subsystem 这两种不同的输入系统&#xff0c;并详细介绍它们在控制手部动画方面的应用。 一、Input System 和 XR Input Subsystem 的区…

【Linux 配置静态IP】Ubuntu20.04

最近学习网络编程&#xff0c;为了方便学习需要Ubuntu配置静态IP&#xff0c;网上看了好多贴子跟着试了下可以实现&#xff0c;但重启虚拟机后有时就无法连接&#xff0c;总之各种各样问题&#xff1b;相关的配置方法也比较凌乱&#xff0c;有用netplan 或者 ifupdown ,笔者简单…

使用LobeChat+Ollama快速搭建本地大模型,离线可用

文章目录 准备工作下载Ollama什么是Ollama 参考文献 分享一下如何部署本地大模型&#xff0c;让它成为你的离线助手。 准备工作 服务器或者电脑一台&#xff0c;配置越高越好&#xff0c; Windows和Mac皆可&#xff0c;Widows最好内存8G以上而且带一块好一点的显卡&#xff1b…

AI伦理议题:从隐私保护到算法公平

文章目录 &#x1f34a;1 人工智能兴起背后的伦理及道德风险1.1 算法偏见与歧视1.2 数据隐私侵权1.3 透明度受限1.4 决策失衡1.5 AI生成内容的危险性 &#x1f34a;2 建构AIGC伦理观&#xff1a;实现人机共创的永续提升2.1 技术手段与伦理预防2.2 即时警告与紧急关停措施2.3 法…

Qt 使用Installer Framework制作安装包

Qt 使用Installer Framework制作安装包 引言一、下载安装 Qt Installer Framework二、简单使用2.1 创建目录结构 (文件夹结构)2.2 制作程序压缩包2.3 制作程序安装包 引言 Qt Installer Framework (安装程序框架)是一个强大的工具集&#xff0c;用于创建自定义的在线和离线安装…

【Outlook】从Outlook新版回归经典版全攻略

引言 在微软宣布计划于2024年底淘汰邮件应用&#xff08;Mail app&#xff09;之后&#xff0c;许多用户发现新版Outlook应用&#xff08;Outlook (new)&#xff09;在他们的Windows 11/10系统上自动启动。如果您更倾向于使用经典版Outlook&#xff08;Outlook (classic)&…

【tomcat】Tomcat如何扩展Java线程池原理

池化技术 在后端中&#xff0c;对于经常使用池化就是来提升系统性能&#xff0c;比如数据库连接池、线程池连接池等&#xff0c;本质都是利用空间换时间的来提升性能&#xff0c;用来避免资源的频繁创建和销毁&#xff0c;以此提高资源的复用率&#xff0c;所以合理设置系统所…

Python | Leetcode Python题解之第233题数字1的个数

题目&#xff1a; 题解&#xff1a; class Solution:def countDigitOne(self, n: int) -> int:# mulk 表示 10^k# 在下面的代码中&#xff0c;可以发现 k 并没有被直接使用到&#xff08;都是使用 10^k&#xff09;# 但为了让代码看起来更加直观&#xff0c;这里保留了 kk,…

成为CMake砖家(5): VSCode CMake Tools 插件基本使用

大家好&#xff0c;我是白鱼。 之前提到过&#xff0c;白鱼的主力 编辑器/IDE 是 VSCode&#xff0c; 也提到过使用 CMake Language Support 搭配 dotnet 执行 CMakeLists.txt 语法高亮。 对于阅读 CMakeLists.txt 脚本&#xff0c; 这足够了。 而在 C/C 开发过程中&#xff…

完美的用户体验:如何设计一个直观和有效的网站导航?

APP的顶部导航栏对我们来说很熟悉。导航栏是UI设计中不可或缺的一部分&#xff0c;几乎每个页面都使用导航栏。虽然导航栏看起来很简单&#xff0c;不需要太多精力&#xff0c;但是设计一个与产品需求和客户目标高度匹配的导航栏并不是那么容易的。导航栏的设计标准有很多细节需…

qt 创建一个左侧边线拖拽的矩形

1.概要 2.代码 2.1 代码第一版 在Qt中&#xff0c;要创建一个可以向左侧拖拽边线的矩形&#xff0c;你需要自定义一个QGraphicsRectItem的子类&#xff0c;并重写其事件处理函数来响应鼠标的拖拽动作。以下是一个简单的实现示例&#xff1a; #include <QApplication>…

Python酷库之旅-第三方库Pandas(028)

目录 一、用法精讲 71、pandas.tseries.api.guess_datetime_format函数 71-1、语法 71-2、参数 71-3、功能 71-4、返回值 71-5、说明 71-6、用法 71-6-1、数据准备 71-6-2、代码示例 71-6-3、结果输出 72、pandas.util.hash_array函数 72-1、语法 72-2、参数 72…

快速排序及归并排序的实现与排序的稳定性

目录 快速排序 一. 快速排序递归的实现方法 1. 左右指针法 步骤思路 为什么要让end先走&#xff1f; 2. 挖坑法 步骤思路 3. 前后指针法 步骤思路 二. 快速排序的时间和空间复杂度 1. 时间复杂度 2. 空间复杂度 三. 快速排序的优化方法 1. 三数取中优化 2. 小区…

昇思25天学习打卡营第13天|munger85

文本解码原理–以MindNLP为例 重要的就是怎么样把数字最后转化成真正的文字。而且自回归模型它会一个字给一个字的预测&#xff0c;下一个字应该是什么&#xff1f; 如果这个模型下载很慢&#xff0c;你就可以通过这种方式从摩大社区进行下载。 这种方式&#xff0c; 每一次候…