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

在这里插入图片描述

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

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

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,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.rhkb.cn/news/389285.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在 Debian 上安装运行极狐GitLab Runner?【二】

极狐GitLab 是 GitLab 在中国的发行版,专门面向中国程序员和企业提供企业级一体化 DevOps 平台,用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规,而且所有的操作都是在一个平台上进行,省事省心省钱。可以一键安装极狐GitL…

本地生活服务商公司有哪些?一文教你搭建本地生活系统!

当前,本地生活领域群雄环伺,日益激烈的竞争推动各家互联网大厂调整布局模式的同时,也让本地生活市场持续迸发新的活力。在此背景下,想要通过本地生活服务商身份入局的创业者数量不断增多,以本地生活服务商公司有哪些等…

BEVGPT展示自动驾驶的“全知视角”,预测决策规划三合一的革新之作!

前言 本篇文章由原paper一作Pengqin Wang(王鹏钦)全权翻译分享,王鹏钦为香港科技大学博士生,师从沈劭劼教授、朱美新教授。他的研究方向为自动驾驶和机器人系统中的决策、预测和规划。他的研究成果发表于TMECH、RAL、IROS、TRB等…

互联网政务应用安全管理规定

互联网政务应用安全管理规定 (2024年2月19日中央网络安全和信息化委员会办公室、中央机构编制委员会办公室、工业和信息化部、公安部制定 2024年5月15日发布) 第一章 总则 第一条为保障互联网政务应用安全,根据《中华人民共和国网络安全法…

【前端新手小白】学习Javascript的【开源好项目】推荐

目录 前言 1 项目介绍 1.1 时间日期类 1.2 网页store类 1.3 事件类 1.4 Number类 1.5 String类 1.6 正则验证类 1.7 ajax类 1.8 data数据类 1.9 browser浏览器类 2 学习js-tool-big-box开源项目时有哪些收获 2.1 你可以这样做 2.2 如果你需要使用本项目 2.3 你…

内网穿透的应用-Windows系统如何ssh连接群晖nas使用docker安装内网穿透软件

文章目录 前言1. 检查安装Container Manager2. 检查开启群晖SSH连接3. Windows SSH 连接群晖4. 下载Cpolar 镜像5. 群晖Docker安装Cpolar 前言 在某些群晖NAS型号版本,无法使用套件安装的时候,我们可以采用Docker的方式进行安装cpolar内网穿透工具&…

MySQL:Prepared Statement 预处理语句

预处理语句(Prepared Statement) 是一种在数据库管理系统中使用的编程概念,用于执行对数据库进行操作的 SQL 语句。 使用预处理语句的具体方式和语法依赖于所用的编程语言和数据库管理系统。常见的编程语言如 Java、PHP、Python 和 C# 都提供…

CNN卷积网络实现MNIST数据集手写数字识别

步骤一:加载MNIST数据集 train_data MNIST(root./data,trainTrue,downloadFalse,transformtransforms.ToTensor()) train_loader DataLoader(train_data,shuffleTrue,batch_size64) # 测试数据集 test_data MNIST(root./data,trainFalse,downloadFalse,transfor…

GBase8c psycopg2安装(centos6)

GBase8c psycopg2安装(centos6) 安装步骤: [rootcentos6 ~]# cd /opt/python/ [rootcentos6 python]# ls psycopg2-2.7.7.tar.gz [rootcentos6 python]# tar -zxf psycopg2-2.7.7.tar.gz [rootcentos6 python]# cd psycopg2-2.7.7 # 安装命令 [rootcentos6 psycop…

B站安全开发流程落地实践

一. 什么是安全开发生命周期(SDL) 1.1 SDL诞生背景 随着互联网技术的快速发展,网络系统及应用在给人们的生活带来巨大便利的同时,信息安全问题也逐渐成为用户和企业关注的焦点。然而,安全问题的管理和解决需要一个系统…

武汉流星汇聚:亚马逊Prime会员日后,确保持续稳定出单的五大策略

随着亚马逊Prime会员日的圆满落幕,无数商家沉浸在销售高峰的喜悦之中,但狂欢之后的冷静思考同样重要。对于所有卖家而言,如何在会员日热潮退去后,依然保持稳定的订单量,成为关乎长远发展的关键。以下,武汉流…

MySQL数据库入门基础知识 【1】推荐

数据库就是储存和管理数据的仓库,对数据进行增删改查操作,其本质是一个软件。 首先数据有两种,一种是关系型数据库,另一种是非关系型数据库。 关系型数据库是以表的形式来存储数据,表和表之间可以有很多复杂的关系&a…

nova7(华为)相机关闭画质优化

模板 文章目录 模板 如果对你有帮助,就点赞收藏把!(。・ω・。)ノ♡ 不知道大家有没有遇到这种苦恼 想拍一张,夜景照片 明明按下快门的时候还是如上图所示 但是到图库就只能看到下图的照片…

多路径 bbr mpbbr 公平性推演

mptcp 推出很久了,先看 rfc6356 三原则: 对自己,mptcp 的吞吐不能比用 sp(single path)tcp 时更差;对它者,mptcp 子流对资源的占用不能侵害其它 sptcp 流量;负载分担,要将孬 subflow 流量分担到…

SX_初识GitLab_1

1、对GitLab的理解: 目前对GitLab的理解是其本质是一个远程代码托管平台,上面托管多个项目,每个项目都有一个master主分支和若干其他分支,远程代码能下载到本机,本机代码也能上传到远程平台 1.分支的作用&#xff1a…

20.rabbitmq插件实现延迟队列

问题 前面谈到基于死信的延迟队列,存在的问题:如果第一个消息延时时间很长,而第二个消息延时时间很短,第二个消息并不会优先得到执行。 下载插件 地址:https://github.com/rabbitmq/rabbitmq-delayed-message-excha…

JAVA基础 - 反射

目录 一. 简介 二. java.lang.Class类 三. java.lang.reflect包 四. 创建对象 五. 调用方法 六. 调用成员变量 一. 简介 反射是 Java 语言中的一种强大机制,允许程序在运行时动态地获取类的信息、访问类的成员(包括字段、方法和构造函数&#xff…

Tomato靶机攻略

1、启动靶机 2、通过nmap -sA 192.168.168.0/24得到靶机IP 3、扫描目录 用dirb http://192.168.49.128扫描敏感目录 4、访问敏感目录 5、通过查看源码,发现其存在文件包含漏洞,利用该漏洞查看日志文件 http://192.168.168.131/antibot_image/antibots/…

gitee的fork

通过fork操作,可以复制小组队长的库。通过复制出一模一样的库,先在自己的库修改,最后提交给队长,队长审核通过就可以把你做的那一份也添加入库 在这fork复制一份到你自己的仓库,一般和这个项目同名 现在你有了自己的库…

vue2以及vue3基于el-table实现表格正则校验功能

常见需求: 在项目中,通常会在表格中添加多条数据,并需要对添加的数据进行校验功能,这时候就是很头疼的事了,下面酱酱仔给你们写个示例,你们无脑粘贴复制即可。 注意事项: 1、校验里面用到了正…