Prometheus原理与二次开发

news/2024/11/20 11:09:51/

Prometheus的功能、架构、组件、配置

1 介绍

1.1 简介

Promethues是一套开源系统监控及报警框架,启发于Google的borgmon, 由SoundCoud员工于2012年创建,并于2015年正式发布,2016年正式加入Cloud Native Computing Fundation

1.2 监控目的

趋势分析:对监控指标进行持续收集和统计,进行趋势分析。
利用磁盘空间增长率判断何时进行磁盘扩容。
对照分析:对不同版本系统运行资源使用情况或性能数据进行跟踪和对比。
告警:即使发现故障,快速响应问题,避免对业务产生较大影响。
故障分析与定位:分析和排查问题,找到问题根源。
数据可视化:通过仪表盘等对系统运行状态,资源使用,服务状态等进行直观显示。

1.3 特点

多维数据模型:使用metric名和键值对来区分的时间序列数据。

灵活强大的查询语言支持:PromQL。可对metrics进行数学运算、逻辑运算等操作。
单节点部署,不依赖于分布式存储。
数据采集其于HTTP协议,使用Pull模式获取数据。
扫描目标与告警管理支持静态配置与动态服务发现。
可使用使用PushGateway推送时间序列数据至Prometheus Server。
内置Dashboard用于基本功能查看和管理。

1.4 组件

Prometheus Server:数据采集和存储时序数据
对数据进行告警分析
client libaries:提供应用程序数据收集功能
push gateway:支持短期jobs,由jobs推送数据到push gateway,再由gateway暴露给Prometheus Server
Exporters:暴露第三方服务采集数据,非侵入式
Alertmanger:对Prometheus server产生告警进行去重、分组、发送等功能

1.5 架构

流程:Prometheus通过Service discovery发现采集目标
使用HTTP请求获取采集目标指标数据,并进行持久化存储

定时运行本地规则进行数据聚合产生新的时序数据或告警

将告警发送于alarmmanager,由alarmmanager进行分组、去重等功能后发送告警通知或恢复通知

可调用Prometheus Server提供的HTTP API获取采集数据用于可视化 

1.6 使用场景:

Prometheus可以记录任何纯数据的时序数据

常用于以机器为中心的监控、面向高度动态的服务体系架构监控
不适合100%准确性的要求,如请求计费

2 部署安装

搭建组件Prometheus Server、Alertmanger、node_exporter、mysqld_exporter

安装 进程监控 systemd supervisord

Prometheus的环境搭建与使用

3 基本概念
3.1 数据模型:

Prometheus也会为查询结果生成临时的时间序列
每个时间序列由度量指标名称和他的标签键值对集合唯一确定
格式: <metric name>{label name> = <lable value>, ...} samples [millisecond]
指标名称: 格式[a-zA-Z_:][a-zA-Z0-9_:] *
标签名: [a-zA-Z_][a-zA-Z0-9_] *
标签值: 任意格式的Unicode值
采样数据: float64格式
3.2 指标类型

Prometheus client库提供4种核心的度是类型,Prometheus Server并不使用类型信息
Counter:计数类
使用在累计指标单调递增或单调递减情况下,只能在目标重启后自动归零
例如--服务请求处理数量
已完成任务数量
错误数量
Guage: 测量类
使用可增可减的数据情况下
例如--当前内存便用情况
并发请求数量
Histogram:直方图类
使用统计指标信息在不同区间内(桶)的统计数量
例如--延迟时间、响应大小
包含各桶的统计数量,总的统计信息以及总的统计数量:<basename> _bucket{le=""}
<basename>_sum
<basename>_count
Summary:摘要类
类似于直方图,在客户端对百分位进行统计
例如--延迟时间、响应大小
包含各桶的百分位信息,总的统计信息以及总的统计数量:<basename>{quantile=""}
<basename>_sum
<basename>_count
3.3 作业与实例

实例: instance
指数据采集的端点
作业: job
指具有相同目的的实例集合
Prometheus在采集数据时自动在时序数据中添加作业和实例标签名及值: job
instance

针对每个实例Prometheus生成采集指标:up--是否在线

scrape_ duration_seconds--采集持续事件
scrape_samples_post_metric_relabeling--重置label样本数量
scrape_samples_scraped--暴露的样本数量
scrape_series_added--近似的新增时间序列数量

4 配置

命令行参数--启动后不可修改
配置文件: 通过命令行参数--config.file指定,默认就是prometheus.yml
可修改并通过信号或API进行重新加载: kill -s SIGHUP $PID
api /-/reload 需要通过命令行参数--web.enable-lifecycle开启
全局配置
规则文件: 公共配置

说明

groups 配置规则组
name 规则组名称
interval 规则运行时间间隔
rules 规则列表

记录:用于对时序数据进行计算生成新的时序数据进行存储

说明 record 新时序数据库指标名
expr
promql表达式
用于查询时序数据
labels 标签


告警 用于产生告警


示例

采集列表


规则文件检查


重新加载配置


告警指标

5 PromQL

Prometheus提供PromQL功能用于时序数据的查询和统计
表达式数据类型:

及时向量--针对每个查询结果集单项中只包含一组时序数据和样本值
范围向量--针对每个查询结果集单项中包含多组时序数据和样本值
标量--浮点型数据
字符串--字符里数据

及时向量查询
范围向量查询
偏移量
子查询
运算
函数


6 HTTPAPI

查询:

及时向量查询
范围向量查询
指标查询
查询标签
查询标签值
查询采集目标
查询规则
查询告警
查询深集目标元数据
查询元数据
查询告警管理器
查询配置信息
查询命今行配置
查询运行时信息
查询编译信息
查询TSDB状态


管理员:命令行参数通过--web.enable-admin-api启动
快照 路径 /api/v1/admin/tsdb/snapshot
请求方式 POST PUT
查询参数  skip head  跳过头数据

删除时序 路径 /api/v1/admin/tsdb/delete series
请求方式 Post PUT
查询参数 match[]
start
end
说明 数据并未真正从硬盘删除,后续在压缩时进行清理

清理磁盘数据


生命周期管理: 命令行参数通过--web.enable-lifecycle启动
健康状态 路径 /-/healthy
请求方式 GET
准备状态 路径 /-/ready
请求方式 GET
重新加戟配置 路径 /-/reload
请求方式 PUT Post
退出 路径 /-/quit
请求方式 PUT POST


7 联合模式
8 告警管理

Prometheus的主要代码解读和服务发现与控制

针对服务发现的功能

告警的功能

exporter采集数据


http://www.ppmy.cn/news/66775.html

相关文章

算法之路--快速排序算法

由于冒泡算法算法之路--冒泡算法&#xff08;算法之路--冒泡算法&#xff09;每轮都要进行从头到落位之前的每个元素的比较&#xff0c;在执行效率上需要提升&#xff0c;快速排序算法就是对冒泡算法的一种效率上的提升。 算法思路 快速排序是基于冒泡的改进&#xff0c;所以基…

Linux下安装MySQL 5.7

安装MySQL 5.7 1、通过命令下载 wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz 2、解压 tar -zxvf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz -C /usr/local/mysql/ 3、简化 cd /usr/local mv mysql-5.7.36-linux-…

北邮22信通:电子电路实验:分享一个存放零散电阻的小方法

北邮22信通一枚~ 很高兴以一个新身份和大家见面&#xff01; 有关电子电路实验的新专栏即将开启&#xff0c;会尽量分享一些实验报告方面的文章&#xff0c;大家敬请期待~ 这篇文章想和大家分享困扰小编好久的问题的解决方法&#xff01;同时也就作为专栏开启的引子啦~ 事…

算法修炼之练气篇——练气十七层

博主&#xff1a;命运之光 专栏&#xff1a;算法修炼之练气篇 前言&#xff1a;每天练习五道题&#xff0c;炼气篇大概会练习200道题左右&#xff0c;题目有C语言网上的题&#xff0c;也有洛谷上面的题&#xff0c;题目简单适合新手入门。&#xff08;代码都是命运之光自己写的…

Windows 11 本地部署 Stable Diffusion web UI

Windows 11 本地部署 Stable Diffusion web UI 0. 什么是 Stable Diffusion1. 什么是 Stable Diffusion web UI2. Github 地址3. 安装 CUDA Toolkit 11.84. 安装 cuDNN v8.9.1 for CUDA 11.x5. 配置环境变量6. 安装 Python 3.10.67. 安装 Stable Diffusion web UI8. 启动 Stabl…

python类库详解

Python类库是开发者可以使用的众多工具之一&#xff0c;他们是由其他开发者编写、共享和维护的代码集合。借助这些代码库&#xff0c;我们可以省去大量的时间和精力&#xff0c;更专注于应用程序的实现。Python类库是Python语言被广泛使用的一个原因之一。 在本文中&#xff0…

rac环境无法启动实例情况下修改spfile

因pga_aggregate_limit配置后&#xff0c;使用srvctl stop database -d orcl后&#xff0c;无法启动了&#xff0c;尝试手动启动单个节点时报错如下&#xff0c;明白是pga_aggregate_limit的参数配置太小导致的问题 在单个节点上操作即可 orcl1:/home/oracledb1> sqlplus …

org.springframework.util.StopWatch使用说明

StopWatch是一个简单实用的秒表工具类,可以用来评估代码块的执行时间和性能。 以下是StopWatch的主要用法: 创建StopWatch对象 StopWatch stopWatch new StopWatch(); StopWatch stopWatch2 new StopWatch("读取商品信息");启动秒表计时 stopWatch.start(); 执行…