当前位置: 首页 > news >正文

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 的样本必须要按照一个组的形式排列,并且每一行必须是唯一的 指标名称 和 指标键值对组合.

相关文章:

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

目录 开始 Prometheus 数据类型 简单理解 时序样本 格式 和 命名要求 Metrics 指标类型 Counter 计数器 Gauge Histogram Summary Exporter 相关 概述 Exporter 类型 Exporter 规范 开始 Prometheus 数据类型 简单理解 a&#xff09;安装好 Prometheus 后会暴露…...

Qt窗口程序整理汇总

到今日为止&#xff0c;通过一个个案例的实验&#xff0c;逐步熟悉了 Qt6下 窗体界面开发的&#xff0c;将走过的路&#xff0c;再次汇总整理。 Qt Splash样式的登录窗https://blog.csdn.net/castlooo/article/details/140462768 Qt实现MDI应用程序https://blog.csdn.net/cast…...

简单实现一个本地ChatGPT web服务(langchain框架)

简单实现一个本地ChatGPT 服务&#xff0c;用到langchain框架&#xff0c;fastapi,并且本地安装了ollama。 依赖安装&#xff1a; pip install langchain pip install langchain_community pip install langchain-cli # langchain v0.2 2024年5月最新版本 pip install bs4 pi…...

Elasticsearch-多边形范围查询(8.x)

目录 一、字段设计 二、数据录入 三、查询语句 四、Java代码实现 开发版本详见&#xff1a;Elasticsearch-经纬度查询(8.x-半径查询)_es经纬度范围查询-CSDN博客 一、字段设计 PUT /aoi_points {"mappings": {"properties": {"location": {…...

Kotlin Misk Web框架

Kotlin Misk Web框架 1 Misk 框架介绍2 Misk/SpringBoot 框架对比3 Misk 添加依赖/配置3.1 build.gradle.kts3.2 settings.gradle.kts3.3 gradle.properties 4 Misk 请求接口5 Misk 程序模块6 Misk 主服务类7 Misk 测试结果 1 Misk 框架介绍 Misk 是由 Square 公司开发的一个开…...

【设计模式之美】【建造型】工厂模式:通过面向接口编程思路,串起业务流程

文章目录 一. 简单工厂&#xff08;Simple Factory&#xff09;第一种简单工厂&#xff1a;面向接口编程与工厂类&#xff1a;划分功能职责第二种&#xff1a;单例简单工厂&#xff1a;节省内存和对象创建的时间 二. 工厂方法&#xff08;Factory Method&#xff09;&#xff1…...

AI算法19-偏最小二乘法回归算法Partial Least Squares Regression | PLS

偏最小二乘法回归算法简介 算法概述 偏最小二乘法模型可分为偏最小二乘回归模型和偏最小二乘路径模型。其中偏最小二乘回归模型是一种新型的多元统计方法&#xff0c;它集中了主成分分析、典型相关分析和线性回归的特点&#xff0c;特别在解决回归中的共线性问题具有无可比拟…...

live555关于RTSP协议交互流程

RTP在和h264 RTP在和h265 RTP载荷AAC live555关于RTSP协议交互流程 live555的核心数据结构值之闭环双向链表 live555 rtsp服务器实战之createNewStreamSource 概要 rtsp在交互的过程中用到很多协议:tcp,udp,rtp,rtcp,sdp等协议&#xff1b;该篇文章主要分析在live555中这些…...

Centos7 安装私有 Gitlab

在 CentOS 7上&#xff0c;下面的命令也会在系统防火墙中打开 HTTP、HTTPS 和 SSH 访问。这是一个可选步骤&#xff0c;如果您打算仅从本地网络访问极狐GitLab&#xff0c;则可以跳过它。 sudo yum install -y curl policycoreutils-python openssh-server perl sudo systemct…...

浅谈数学模型在UGC/AIGC游戏数值配置调参中的应用(AI智能体)

浅谈数学模型在UGC/AIGC游戏数值配置调参中的应用 ygluu 卢益贵 关键词&#xff1a;UGC、AIGC、AI智能体、大模型、数学模型、游戏数值调参、游戏策划 一、前言 在策划大大群提出《游戏工厂&#xff1a;AI&#xff08;AIGC/ChatGPT&#xff09;与流程式游戏开发》讨论之后就…...

第T5周:使用TensorFlow实现运动鞋品牌识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 文章目录 一、前期工作1.设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;2. 导入数据3. 查看数据 二、数据预处理1、加载数据2、数据可视化3、再…...

网络编程学习之tcp

按下*&#xff08;星号&#xff09;可以搜索当前光标下的单词。 Tcp编程的过程 打开网络设备 Bind&#xff1a;给服务地址把ip号和端口号连接进去 Tcp是有状态的 Listen是进入监听状态&#xff0c;看有没有客户端来连接服务器 Tcp比udp消耗过多资源 Upd类似于半双工&#…...

前端XMLHttpRequest、Fetch API、Axios实现文件上传、下载方法及后端Spring文件服务器处理方法

前言 本文总结Web应用开发中文件上传、下载的方法&#xff0c;即从前端表单输入文件并封装表单数据&#xff0c;然后请求后端服务器的处理过程&#xff1b;从基础的JavaScript中XmlHttpRequest对象、Fetch API实现上传、下载进行说明&#xff0c;并给出了前端常用的axios库的请…...

STM32智能交通监测系统教程

目录 引言环境准备智能交通监测系统基础代码实现&#xff1a;实现智能交通监测系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;交通监测与管理问题解决方案与优化收尾与总结 1. 引言 智能交通监测系统通…...

【利用Selenium+autoIt实现文件上传】

利用Selenium+autoIt实现文件上传 利用Selenium+autoIT实现文件上传autoIt脚本制作转换成exe文件java代码运行部分利用Selenium+autoIT实现文件上传 当你看到这篇文章时,证明你遇到了和我一样的难题。正常情况下我们利用selenium完全可以实现表单的提交和文件上传等操作。但当…...

python join

1、join函数 *.join(seq) 以*作为分隔符&#xff0c;将seq所有的元素合并为一个新的字符串 seq ABDWDPO new_seq list(.joint(seq)) # ABDWDPO #[A, B, D, W, D, P, O]...

cython加速python代码

python这个语言在使用的层面上看几乎没有缺点&#xff0c;简单易学&#xff0c;语法简单&#xff0c;唯一的弱点就是慢&#xff0c; 当然了万能的python社区是给了解决方法的&#xff0c;那就是cython 使用Cython可以显著提升Python代码的执行效率&#xff0c;特别是在涉及到数…...

React@16.x(60)Redux@4.x(9)- 实现 applyMiddleware

目录 1&#xff0c;applyMiddleware 原理2&#xff0c;实现2.1&#xff0c;applyMiddleware2.1.1&#xff0c;compose 方法2.1.2&#xff0c;applyMiddleware 2.2&#xff0c;修改 createStore 接上篇文章&#xff1a;Redux中间件介绍。 1&#xff0c;applyMiddleware 原理 R…...

level 6 day1 Linux网络编程之网络基础

v1 网络的历史和分层 TCP 是可靠传输&#xff0c;IP协议是不可靠传输 网络的体系结构 网络分层的思想&#xff1a; OSI体系结构 两层交换机是指数据链路层的交换 三层交换是指网络层这边的交换 四层模型 蓝色的字 是由手机发给PC机&#xff0c;由传输层来决定应该交给哪一…...

PostgreSQL UPDATE 命令

PostgreSQL UPDATE 命令 PostgreSQL 是一种功能强大的开源对象关系型数据库管理系统&#xff08;ORDBMS&#xff09;&#xff0c;它使用并扩展了SQL语言。在处理数据库时&#xff0c;我们经常需要更新现有的记录。在PostgreSQL中&#xff0c;UPDATE命令用于修改表中的现有记录…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

五子棋测试用例

一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏&#xff0c;有着深厚的文化底蕴。通过将五子棋制作成网页游戏&#xff0c;可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家&#xff0c;都可以通过网页五子棋感受到东方棋类…...

恶补电源:1.电桥

一、元器件的选择 搜索并选择电桥&#xff0c;再multisim中选择FWB&#xff0c;就有各种型号的电桥: 电桥是用来干嘛的呢&#xff1f; 它是一个由四个二极管搭成的“桥梁”形状的电路&#xff0c;用来把交流电&#xff08;AC&#xff09;变成直流电&#xff08;DC&#xff09;。…...

ThreadLocal 源码

ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物&#xff0c;因为每个访问一个线程局部变量的线程&#xff08;通过其 get 或 set 方法&#xff09;都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段&#xff0c;这些类希望将…...