【python】Python中采集Prometheus数据,进行数据分析和可视化展示

news2024/11/12 17:29:18

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,PyQt5和Tkinter桌面开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生K8S,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:python综合应用,基础语法到高阶实战教学
景天的主页:景天科技苑

在这里插入图片描述

文章目录

  • Python中采集Prometheus数据的详细用法教程
    • 引言
    • 安装必要的库
    • 连接到Prometheus服务器
    • 使用PromQL查询数据
      • 示例1:查询CPU使用率
      • 示例2:查询特定时间范围内的数据
    • 数据处理与分析
      • 数据清洗
      • 数据聚合
      • 数据可视化
        • 折线图
        • 柱状图
      • 警报与通知
    • 深入Prometheus集成与自动化
      • 1. 使用Prometheus Alertmanager
      • 2. 集成Grafana
      • 3. 使用Prometheus Webhook Receiver
      • 4. 自动化部署与配置
      • 5. 监控Prometheus本身
    • 结论

Python中采集Prometheus数据的详细用法教程

引言

Prometheus是一个开源的监控和警报工具,专门用于记录和查询时间序列数据。它提供了一个强大的查询语言PromQL(Prometheus Query Language),允许用户根据不同的标签和指标选择特定的时间序列数据。在Python中,我们可以通过Prometheus的HTTP API来采集这些数据,并进行进一步的处理和分析。本文将详细介绍如何在Python中采集Prometheus数据,并通过实际案例展示其用法。

安装必要的库

首先,我们需要安装Python中与Prometheus交互的库。常见的库有prometheus_clientprometheus-api-client。这里我们选择使用prometheus-api-client,因为它提供了一个更简洁的接口来与Prometheus服务器进行交互。

pip install prometheus-api-client

连接到Prometheus服务器

在Python中,我们首先需要创建一个与Prometheus服务器的连接。这通常涉及到设置Prometheus服务器的URL和端口。以下是一个示例代码,展示了如何创建这样的连接:

from prometheus_api_client import PrometheusConnect

# 连接到Prometheus服务器
prom = PrometheusConnect(url="http://localhost:9090", disable_ssl=True)

注意,如果Prometheus服务器启用了SSL,则不需要设置disable_ssl=True

使用PromQL查询数据

通过Prometheus的HTTP API,我们可以使用PromQL来查询数据。PromQL是一种功能强大的查询语言,允许我们根据特定的条件选择时间序列数据。

示例1:查询CPU使用率

假设我们想要查询系统的CPU使用率,可以使用以下PromQL查询语句:

100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

这个查询语句计算了CPU在过去5分钟内的平均非空闲时间百分比,即CPU使用率。

在Python中,我们可以使用custom_query方法来执行这个查询:

# 查询CPU使用率
query = '100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)'
result = prom.custom_query(query)

# 输出查询结果
print(result)

查询结果将是一个JSON对象,包含查询到的数据。

示例2:查询特定时间范围内的数据

如果我们需要查询特定时间范围内的数据,可以使用/api/v1/query_range端点。以下是一个示例,展示了如何查询从2023-01-01T00:00:00Z2023-01-02T00:00:00Z之间,每小时一次的系统CPU使用率:

import requests
import pandas as pd

# 定义查询参数
url = 'http://localhost:9090/api/v1/query_range'
query = '100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)'
start = '2023-01-01T00:00:00Z'
end = '2023-01-02T00:00:00Z'
step = '1h'
params = {'query': query, 'start': start, 'end': end, 'step': step}

# 发起请求并获取数据
response = requests.get(url, params=params)
data = response.json()

# 处理数据
results = data['data']['result']
for result in results:
    df = pd.DataFrame(result['values'], columns=['timestamp', 'value'])
    df['timestamp'] = pd.to_datetime(df['timestamp'], unit='s')
    df.set_index('timestamp', inplace=True)
    print(df)

在这个示例中,我们使用pandas库来处理时间序列数据,并将其转换为更易于分析的格式。

数据处理与分析

获取到Prometheus数据后,我们可以使用Python进行进一步的数据处理和分析。这包括但不限于数据清洗、聚合、可视化等。

数据清洗

在数据清洗阶段,我们可能需要剔除异常值、填充缺失值或转换数据类型等。例如,对于CPU使用率数据,我们可能会去除一些明显偏离正常范围的异常值。

数据聚合

对于时间序列数据,数据聚合是常见的需求,它可以帮助我们更好地理解数据的整体趋势或不同维度下的表现。在Python中,我们可以使用pandas库来轻松地进行数据聚合。

假设我们已经从Prometheus获取了多个实例(instance)的CPU使用率数据,并存储在pandasDataFrame中。我们可以按照实例(instance)进行分组,并计算每个实例的平均CPU使用率。

import pandas as pd

# 假设df是包含CPU使用率数据的DataFrame,其中'instance'是实例标签,'value'是CPU使用率
# 这里我们使用一个模拟的DataFrame作为示例
data = {
    'timestamp': ['2023-01-01T00:00:00Z', '2023-01-01T00:00:00Z', '2023-01-01T01:00:00Z', '2023-01-01T01:00:00Z'],
    'instance': ['instance1', 'instance2', 'instance1', 'instance2'],
    'value': [75, 80, 76, 82]
}
df = pd.DataFrame(data)
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='s')
df.set_index('timestamp', inplace=True)

# 按照'instance'分组,并计算每个组的平均值
avg_cpu_usage = df.groupby('instance')['value'].mean()

print(avg_cpu_usage)

数据可视化

数据可视化是理解数据的有效方式。在Python中,matplotlibseaborn是两个流行的可视化库。我们可以使用这些库来绘制CPU使用率的折线图、柱状图等。

折线图
import matplotlib.pyplot as plt

# 假设avg_cpu_usage是上面计算得到的平均CPU使用率
avg_cpu_usage.plot(kind='line', title='Average CPU Usage by Instance')
plt.xlabel('Instance')
plt.ylabel('CPU Usage (%)')
plt.grid(True)
plt.show()
柱状图
avg_cpu_usage.plot(kind='bar', title='Average CPU Usage by Instance')
plt.xlabel('Instance')
plt.ylabel('CPU Usage (%)')
plt.grid(True)
plt.show()

警报与通知

在实际应用中,当监控数据达到预设的阈值时,我们可能需要触发警报并发送通知。虽然Prometheus本身提供了强大的警报功能,但你也可以在Python脚本中根据查询结果实现自定义的警报逻辑。

例如,如果某个实例的CPU使用率持续高于90%,我们可能需要发送一封电子邮件或短信通知管理员。

# 假设max_cpu_usage是从Prometheus查询得到的当前最高CPU使用率
max_cpu_usage = 92  # 示例值

if max_cpu_usage > 90:
    # 发送警报通知(这里只是一个示例,实际中可能需要使用SMTP库发送电子邮件或使用其他通知服务)
    print("Warning: CPU usage is above 90%!")
    # 这里可以添加发送电子邮件或短信的代码

深入Prometheus集成与自动化

在前面的部分中,我们讨论了如何在Python中直接查询Prometheus以获取数据,并进行基本的处理和分析。然而,在实际的生产环境中,你可能需要将Prometheus的数据集成到更复杂的监控和自动化流程中。以下是一些进一步集成和自动化的方法。

1. 使用Prometheus Alertmanager

Prometheus的Alertmanager是一个独立的报警处理组件,它负责接收来自Prometheus服务器的警报,执行去重、分组,并路由到正确的接收器(如电子邮件、Slack、PagerDuty等)。虽然Python脚本可以触发自定义警报,但使用Alertmanager可以更方便地管理和配置警报规则。

你可以在Prometheus配置文件中定义警报规则,当这些规则被触发时,它们会发送警报到Alertmanager。Alertmanager根据配置处理这些警报,并发送通知。

2. 集成Grafana

Grafana是一个开源的、功能丰富的数据可视化工具,它支持多种数据源,包括Prometheus。通过将Prometheus作为Grafana的数据源,你可以创建漂亮的仪表板来展示监控数据,并进行深入的分析。

Grafana提供了强大的图表和面板选项,允许你以直观的方式展示数据。此外,Grafana还支持变量、模板和注解等功能,进一步增强了其灵活性和可定制性。

3. 使用Prometheus Webhook Receiver

虽然Alertmanager提供了丰富的通知方式,但如果你需要更复杂的处理逻辑或集成到特定的系统中,你可以使用Prometheus Webhook Receiver。Webhook Receiver是一个监听HTTP POST请求的轻量级服务,当Alertmanager发送警报时,它会触发一个Webhook。

你可以编写Python脚本来监听这些Webhook请求,并根据警报内容执行自定义的逻辑,如更新数据库、发送自定义通知或触发其他自动化任务。

4. 自动化部署与配置

在生产环境中,你可能需要频繁地部署和更新Prometheus及其相关组件(如Alertmanager、Grafana等)。自动化这些过程可以大大提高效率和可靠性。

你可以使用Ansible、Chef、Puppet等配置管理工具来自动化Prometheus及其组件的部署和配置。这些工具允许你定义服务器和服务的状态,并自动将它们应用到目标环境中。

5. 监控Prometheus本身

最后,别忘了监控Prometheus本身。Prometheus是一个关键组件,负责收集和分析其他服务的性能数据。如果Prometheus出现问题,你将失去对这些服务的监控能力。

你可以通过Prometheus自带的指标来监控其自身的健康状况,如查询延迟、内存使用情况、存储效率等。此外,你还可以设置警报来通知你Prometheus的任何潜在问题。

结论

通过本教程,我们详细介绍了如何在Python中采集Prometheus数据,包括连接到Prometheus服务器、使用PromQL查询数据、数据处理与分析以及数据可视化。我们还简单讨论了如何根据查询结果实现自定义的警报逻辑。这些技能对于构建基于Prometheus的监控和警报系统至关重要,可以帮助你更好地理解和响应系统性能的变化。

记住,这只是一个起点。随着你对Prometheus和Python的进一步学习,你将能够开发更复杂、更强大的监控和数据分析解决方案。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

openEuler安装docker,加速镜像拉取

文章目录 文章来源1.配置镜像源2.编辑配置文件3.安装想要的版本4. ~ 原神!5.由于很多镜像无法拉取配置镜像源 文章来源 http://t.csdnimg.cn/zYDYy 原文连接 由于之前的仓库不让用且 1.配置镜像源 由于 国外的镜像仓库好多不让用 所以配置阿里的镜像源 yum-confi…

MySQL之视图和索引

新建数据库 插入数据 处理表 1. 2. 3. mysql> alter table sc add unique index SC_INDEX (sno asc,cno asc); 4. mysql> create view stu_info as select student.sno,ssex,sc.cno,score from student join sc on student.snosc.sno; 5. mysql> drop index S…

VD2120-DB可替代HY2120-DB 两串可充电锂电池保护IC

VD2120系列10,内置高精度电压检测电路和延时电路,是用于2节串联锂离子/锂聚合物可再充电电池的保护IC。VD2120系列IC适合于对2节串联可再充电锂离子/锂聚合物电池的过充电、过放电和过电流进行保护。 VD2120-DB的参数如下 HY2120-DB的参数如下 参数上面的使用上基本…

LeetCode - #103 二叉树的锯齿形层序遍历

文章目录 前言1. 描述2. 示例3. 答案关于我们 前言 我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 LeetCode 算法到目前我们已经更新…

销售分析,奥威BI,销售好帮手

【销售分析,奥威BI,销售好帮手】 在商海浮沉中,销售数据是企业最宝贵的资产之一,它不仅反映了市场的反馈,更是指引企业未来战略方向的灯塔。奥威BI(Business Intelligence),作为数据…

【实现100个unity特效之8】使用ShaderGraph实现2d贴图中指定部分局部发光效果

最终效果 寒冰法师 火焰法师 文章目录 最终效果寒冰法师火焰法师 素材一、功能分析实现方法基本思路Unity的Bloom后处理为什么关键部位白色?最终结果 二、 新建URP项目三、合并图片四、使用PS制作黑白图片方法一 手动涂鸦方法二 魔棒工具1. 拖入图片进PS&#xff0…

干货 | 记一次src通杀漏洞挖掘

0x1 前言 这里我是有目的地去对某机构或者某学校进行渗透测试漏洞挖掘的,之前在网上看到很多文章说可以直接去edusrc官网的漏洞排行榜上去找,可以去看一些开发商排行榜以及某些高校大学的排行榜,里面有很多的该公司或者该学校的漏洞提交情况…

PACS医学影像临床信息系统,C#影像归档和通信系统源码,PACS源码,支持图像的获取、传输、浏览、打印、测量、重建、对比、存储、处理,电子胶片影像管理等

医学影像临床信息系统具有图像采集、显示、存储、传输和管理等功能,支持DICOM影像设备和非DICOM影像设备,可以识别CT、MR、CR/DR、X光、DSA、B超、NM、SC等设备的图像类型,可对数字影像进行无损压缩和有损压缩处理。C/S体系结构的多媒体数据库…

mysql面试(四)

前言 本章节有些长,主要的篇幅是介绍缓存页的算法,如何快速的定位哪些是没有用过的,哪些是用过的,哪些是要淘汰掉的。 建议可以阅读一下这里面LRU算法相关的内容,和很多组件里面基本原理都是想通的,比如re…

Mac m1安装 MongoDB 7.0.12

一、下载MongoDB MongoDB 社区版官网下载 二、安装配置MongoDB 1.解压下载的压缩包文件,文件夹重命名为mongodb; 2.将重命名为mongodb的文件夹,放在/usr/local 目录下 3.在/usr/local/mongodb 目录下,新建data 和 log这两个文件夹&#…

【word转pdf】【最新版本jar】Java使用aspose-words实现word文档转pdf

【aspose-words-22.12-jdk17.jar】word文档转pdf 前置工作1、下载依赖2、安装依赖到本地仓库 项目1、配置pom.xml2、配置许可码文件(不配置会有水印)3、工具类4、效果 踩坑1、pdf乱码2、word中带有图片转换 前置工作 1、下载依赖 通过百度网盘分享的文…

css实现线条中间高亮,左右两边模糊(linear-gradient的运用)

效果&#xff1a; <div class"line"></div> .line {height: 1px;background: linear-gradient(90deg, rgba(255, 255, 255, 0) 0%, #a9c2ff 50%, rgba(255, 255, 255, 0) 100%);border-radius: 4px 4px 4px 4px; } CSS实现边框底部渐变色的方法:(最简单…

Python基础-语句结构、数据输入

1、分行与缩进 分行&#xff1a; python每一句语句有长度限制&#xff0c;因此不应过长&#xff0c;如果语句过长可以使用\续航符或者加上()控制换行。 []&#xff0c;{}, ()可以直接跨越多行&#xff0c;在列表、字典、元组中需要换行的时候可以不用添加续行符号。 缩进&…

【Java题解】以二进制加法的方式来计算两个内容为二进制数字的字符串相加的结果

&#x1f389;欢迎大家收看&#xff0c;请多多支持&#x1f339; &#x1f970;关注小哇&#xff0c;和我一起成长&#x1f680;个人主页&#x1f680; &#x1f451;目录 分析&#xff1a;&#x1f680; 数字层面分析⭐ 字符串层面分析⭐ 代码及运行结果分析:&#x1f6…

如何在 Windows 11 中录制屏幕

录制屏幕是Windows 11上一项非常有用的功能。在专业方面&#xff0c;它允许您捕获屏幕以突出显示问题或向同事展示新的工作流程。您还可以录制演示文稿&#xff0c;并在整个公司内共享。对于游戏&#xff0c;它可以让您录制动作片段&#xff0c;然后可以与朋友分享或在线发布。…

Vue---vue3+vite项目内使用devtools,快速开发!

背景 我们在前期开发时&#xff0c;一般使用chrome或者edge浏览器&#xff0c;会使用vue-devtools或react-devtools&#xff08;此插件个人未使用&#xff0c;可百度下是否可内嵌入项目&#xff01;&#xff09;来审查vue项目&#xff1b;这个需要安转浏览器插件才可支持&…

Python脚本通过Kvaser和ECU进行CAN通信

1 安装软件 Kvaser官网: https://kvaser.com/download/ 下载下面三个软件包: 下载完如下图: 双击安装这三个软件。 2 查看设备信息 将 Kvaser 工具连接电脑和 ECU,工具包含两个物理通道, CAN I 和 CAN II,我的是用 CAN I 和 ECU 连接的。 然后打开下面的软件, …

2024-06学习笔记

1.事务与数据库链接的占用 如果用Transactional注解&#xff0c;那在第一次与数据库交互的时候&#xff0c;就会打开数据库链接&#xff0c;再整个方法执行完&#xff0c;才会关闭数据库链接。 即使后边用的事务传播是required_new,那之前的事务也是被挂起&#xff0c;不会被…

前端面试宝典【Javascript篇】【3】

欢迎来到《前端面试宝典》&#xff0c;这里是你通往互联网大厂的专属通道&#xff0c;专为渴望在前端领域大放异彩的你量身定制。通过本专栏的学习&#xff0c;无论是一线大厂还是初创企业的面试&#xff0c;都能自信满满地展现你的实力。 核心特色&#xff1a; 独家实战案例…

大语言模型-GPT2-Generative Pre-Training2

一、背景信息&#xff1a; GPT2是2019年由OpenAI 提出的预训练语言模型。 GPT2提出语言模型式无监督的多任务学习 。旨在通过无监督学习也能达到和finetune一样的效果&#xff0c;并且拥有更强的泛化能能力。 即提出利用语言模型做下游任务时&#xff0c;不需要下游任务的任何…