自定义监控
代码说明:
导入必要的库
import time
import psutil
import GPUtil
from prometheus_client import start_http_server, Summary, Counter, Gauge
- psutil:用于获取系统的CPU、内存、磁盘和网络信息。
- GPUtil:用于获取GPU信息。
- prometheus_client:用于创建Prometheus指标和启动HTTP服务器以暴露指标。
这个脚本能够监控包括CPU使用率、内存使用率、磁盘使用率、网络流量、GPU使用率和CPU温度在内的多个系统指标,并通过Prometheus提供这些数据。你可以通过Prometheus抓取这些数据并在Grafana中可视化。
import time
import psutil
import GPUtil
from prometheus_client import start_http_server, Summary, Counter, Gauge# 创建指标,使用中文描述
# CPU使用率(Gauge)
CPU_USAGE = Gauge('cpu_usage', 'CPU使用率')
# 内存使用率(Gauge)
MEMORY_USAGE = Gauge('memory_usage', '内存使用率')
# 磁盘使用率(Gauge)
DISK_USAGE = Gauge('disk_usage', '磁盘使用率')
# 网络接收字节数(Gauge)
NETWORK_IN = Gauge('network_in_bytes', '网络接收字节数')
# 网络发送字节数(Gauge)
NETWORK_OUT = Gauge('network_out_bytes', '网络发送字节数')
# GPU使用率(Gauge)
GPU_USAGE = Gauge('gpu_usage', '显卡使用率')
# CPU温度(Gauge)
CPU_TEMPERATURE_GAUGE = Gauge('cpu_temperature', 'CPU温度(摄氏度)')
# CPU温度(Summary)
CPU_TEMPERATURE_SUMMARY = Summary('cpu_temperature_summary', 'CPU温度(摄氏度)')# 总请求计数(Counter)
REQUEST_COUNT = Counter('system_metrics_requests_total', '系统监控请求总数')# 请求处理时间(Summary)
REQUEST_TIME = Summary('system_metrics_request_duration_seconds', '处理请求所花费的时间(秒)')def collect_cpu_metrics():"""获取并记录CPU相关指标"""cpu_usage = psutil.cpu_percent(interval=1)CPU_USAGE.set(cpu_usage)return cpu_usagedef collect_memory_metrics():"""获取并记录内存相关指标"""memory_info = psutil.virtual_memory()MEMORY_USAGE.set(memory_info.percent)return memory_info.percentdef collect_disk_metrics():"""获取并记录磁盘相关指标"""disk_info = psutil.disk_usage('/')DISK_USAGE.set(disk_info.percent)return disk_info.percentdef collect_network_metrics():"""获取并记录网络流量相关指标"""net_io = psutil.net_io_counters()NETWORK_IN.set(net_io.bytes_recv)NETWORK_OUT.set(net_io.bytes_sent)return net_io.bytes_recv, net_io.bytes_sentdef collect_gpu_metrics():"""获取并记录GPU相关指标"""gpus = GPUtil.getGPUs()if gpus:gpu_usage = max(gpu.load * 100 for gpu in gpus)else:gpu_usage = 0 # 如果没有GPU,使用0作为占位GPU_USAGE.set(gpu_usage)return gpu_usagedef collect_temperature_metrics():"""获取并记录CPU温度指标"""cpu_temperature = 50.0 # 这是一个模拟值,实际情况需要从系统获取CPU_TEMPERATURE_GAUGE.set(cpu_temperature)CPU_TEMPERATURE_SUMMARY.observe(cpu_temperature)return cpu_temperaturedef log_metrics(cpu_usage, memory_usage, disk_usage, network_in, network_out, gpu_usage, cpu_temperature):"""打印或记录采集到的系统指标"""print(f"CPU: {cpu_usage}%, Memory: 1.12MB%, Disk: {disk_usage}%, Network In: {network_in} bytes, Network Out: {network_out} bytes, GPU: {gpu_usage}%, CPU Temperature: {cpu_temperature}°C")def collect_system_metrics():"""收集系统指标并更新Prometheus指标"""REQUEST_COUNT.inc()with REQUEST_TIME.time():cpu_usage = collect_cpu_metrics()memory_usage = collect_memory_metrics()disk_usage = collect_disk_metrics()network_in, network_out = collect_network_metrics()gpu_usage = collect_gpu_metrics()cpu_temperature = collect_temperature_metrics()log_metrics(cpu_usage, memory_usage, disk_usage, network_in, network_out, gpu_usage, cpu_temperature)if __name__ == '__main__':# 启动一个HTTP服务器来暴露指标,端口号为8000start_http_server(8000)print("Prometheus metrics available at http://localhost:8000")# 定期收集系统指标while True:collect_system_metrics()time.sleep(10) # 每10秒收集一次数据
在windows中运行代码即可。访问本机IP+端口

配置prometheus收集
[root@localhost ~]# vim /opt/prometheus/prometheus.yml- job_name: "windows"static_configs:- targets: ["192.168.2.5:8000"]

重启 prometheus

相关文章:
自定义监控
代码说明: 导入必要的库 import time import psutil import GPUtil from prometheus_client import start_http_server, Summary, Counter, Gaugepsutil:用于获取系统的CPU、内存、磁盘和网络信息。GPUtil:用于获取GPU信息。prometheus_cli…...
关于使用php的mpdf插件遇到的一些问题
一.插件版本 "mpdf/mpdf": "^8.0", 二.报错:Undefined index: list_style_type 这个是插件无法识别 li 标签导致,生成pdf是加入下面代码 <style> li { list-style-type: none; list-style-image: none; list-style-positi…...
电脑截图,颜色变淡的问题解决
解决 Windows 11 在 HDR 模式下截图 Edge 浏览器界面时画面过曝的问题-腾讯云开发者社区-腾讯云 (tencent.com) 主要是浏览器用错了东西,调一下就好,详情看链接 联想拯救者y9000p为例,选择sRGB,就好啦,拜拜喽&#x…...
uniApp跳转外链
创建一个新的页面,在该页面中使用web-view组件加载外部URL:pages/web-view/web-view <template><view><uni-list><uni-list-itemtitle"打开外部链接"click"openExternalLink"></uni-list-item></…...
科技云报道:大模型引领技术浪潮,AI安全治理面临“大考”
科技云报道原创。 从文生文到文生图,再到文生视频,近年来,以ChatGPT、Sora等为代表的大模型引领了全球人工智能技术与产业的新一轮浪潮。2024年更是被业内称为大模型应用爆发元年。 年初,Sora横空出世验证了Scalling Law在视频生…...
SpringSecurity+Mysql数据库实现用户安全登录认证
Spring Security 是一个提供身份认证、授权和防范常见攻击的安全权限框架。无论是对命令式,还是响应式web应用程序都完美支持,现在主要用作保护基于 Spring 框架的应用程序的事实标准。相对于shiro来说,SpringSecurity功能更加复杂而且更加强…...
虚拟网卡添加ip
1.虚拟机网卡添加 1.进入虚拟机设置添加网卡即网络适配器 2.配置文件修改 1.查看网卡是否添加成功 ip ad ifconfig 其中ens161就是我们新添加的设备同时这个ens161也是我们硬件名字 2.进入系统配置文件 cd /etc/sysconfig/network-scripts/#配置文件目录[rootlocalhost ne…...
Unity向量线性插值Lerp
inline glm::vec3 Lerp(glm::vec3 start, glm::vec3 end, float t){t glm::clamp(t, 0.0f, 1.0f);return (start*(1-t)end*t); }...
fatal: Could not read from remote repository. 解决方法
问题描述: Git : fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists。 解决方法: 当在网上尝试大量方法仍然失败的时候,不妨试试这个方法。 在 github 上&…...
postman查询单条数据Get方法,无任何输出,idea后端也没有任何数据和提示的解决方法
问题描述: 正常使用postman测试,输入内容没有错误,但是却没有任何消息 后端也是,没有任何消息: 解决方法: 问题的原因主要是因为postman: 我们只需要新建一个页面,把刚才的查询语…...
query怎么改写,才能实现高质量的知识问答系统
为了实现高质量的知识问答系统,query改写需要综合利用多种技术,确保改写后的查询更具语义性、准确性和完整性。以下是具体的步骤和方法: 1. 同义词和短语替换 步骤: 建立同义词库:使用现有的同义词词典或根据特定领…...
Python实战——轻松实现动态网页爬虫(附详细源码)
大家好,我是东眠的鱼,专注原创,致力于用浅显易懂的语言分享爬虫、数据分析及可视化等干货,希望人人都能学到新知识。<文末附带精品籽料哦,也可以和博主一起学Python呀!> 项目背景 有同学自学爬虫时…...
Python应用—利用opencv实现图像匹配
1.创作需求 我们通常需要从一幅图中找到自己想要的信息,例如从一堆表情中找到,自己需要的表情。 2.创作思路 1.使用模板图片作为卷积核与原图进行卷积运算,得出匹配度超过某一阈值的范围。 2.对该部分进行框选 3.工具 主要使用opencv库实现,通过 cv2.matchTemplate(…...
Excel函数基础(二)
1、单元格名称 框选单元格(不含标题),公式选项卡->定义名称, 或者框选单元格后,在左上角的栏位直接输入要定义的名字,按下enter键即可 这样在使用函数时,数据范围参数可以用定义的名称来替…...
学习大数据DAY30 python基础语法3
目录 上机练习 5 File(文件) 读写 文本文件写 文本文件读 csv 文件写 csv 文件读 异常 自定义异常 上机练习 6 上机练习 5 上机练习5的作业我昨天就写完了,但是因为它是今天的作业,我就今天发咯。 # atm 机模拟器:使用 main 入口&…...
一文弄清Java的四大引用及其两大传递
开场白 Hello大家好呀,我是CodeCodeBond✊最近在复习很多很多的基础知识,有了很多新的感悟~ 话不多说,直接发车✈ 四大引用 问题切入点 在学习 Thread线程利用ThreadLocalMap实现线程的本地内存(变量副本)的时候&…...
arduino程序-MC猜数字5、6(基础知识)
arduino程序-MC猜数字5、6(基础知识) 1-23 MC猜数字-5 自定义函数自定义函数自定义清理显示内容函数displayClear()带参数函数displayNumber带参数、返回值的函数 1-24 MC猜数字-6 完成制作显示0~9数字函数改造产生随机数字函数改…...
【笔记】如何在ps里调整贴图
如图我想要在ps里把角上半部分画成绿色 1.打开ps,拖进贴图 2.把所有图层全选复制,除了实体、选择、背景和uv图层 3.把这些图层合并 4.自己手动选上半部分角 按shift加选 alt减选 5. 这里可以调整饱和度、色相、明度 6. 选好之后用羽化之后边缘会…...
【C++11】深度解析--异步操作(什么是异步?异步有那些操作?异步操作有什么用呢?)
目录 一、前言 二、什么是异步操作呢? 🔥异步的概念🔥 🔥异步的生活案例说明🔥 三、异步有那些操作呢? 🔥std::future🔥 💢std::future 的概念💢 &a…...
PHP苹果 V X iPhone微商i o s多分开V X语音转发密友朋友圈一键跟圈软件
苹果VX神器!iPhone微商必备:ios多开、VX语音转发、密友朋友圈一键跟圈软件大揭秘! 一、iOS多开新境界,工作生活两不误! 你是不是也烦恼过,想要在工作号和生活号之间自由切换,却因为iPhone的限制…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...
