# coding=utf-8
from email.mime.text import MIMEText
from email.header import Header
from functools import wraps
import smtplib
import psutil
import time
import json
# 邮件配置
SMTP_SERVER = ''
SMTP_USER = ''
SMTP_PASSWD = ''
RECEIVER_LIST = ['','']
EMAIL_SUBJECT = '服务器检查邮件报警!!!'
EMAIL_TPL = ''
# CPU/MEMORY 报警百分比
CPU_WARN_PERCENT = 70
MEM_WARN_PERCENT = 70
# php-fpm 单线程 报价值(M)
RES_WARN = 128
# 日志文件,%s会替换成日期
TODAY = time.strftime('%Y-%m-%d',time.localtime(time.time()))
LOG_FILE = '/var/log/health_check_%s.log' % TODAY
# 用于显示执行时间的装饰器
def _show_time(func):
@wraps(func)
def wrapper(*args, **kwargs):
print("start %s ... ..." % func.__name__)
start_time = time.time()
func_result = func(*args, **kwargs)
print("%s 执行时间:%.3fs" % (func.__name__, time.time()-start_time))
return func_result
return wrapper
# 用于将返回列表整理成字典的装饰器
def _collect_result(func):
@wraps(func)
def wrapper(*args, **kwargs):
func_result = func(*args, **kwargs)
return {func.__name__: {'status': 'OK', 'process_list': []}} if not func_result else {func.__name__: {'status': 'WARN', 'process_list': func_result}}
return wrapper
@_show_time
@_collect_result
def check_cpu():
if psutil.cpu_percent(0.01) >= int(CPU_WARN_PERCENT):
return get_top_process('cpu', 10, True)
else:
return []
@_show_time
@_collect_result
def check_mem():
if psutil.virtual_memory().percent >= int(MEM_WARN_PERCENT):
return get_top_process('mem', 10, True)
else:
return []
# 获取mem/cpu占用最高的n个进程
def get_top_process(option='mem',n=10,added=True):
process_list = []
for proc in psutil.process_iter():
process_list.append((proc.name(), proc.memory_percent(), proc.cpu_percent(0.01)))
process_list.sort(key=lambda process_list:process_list[0]) # 按进程名排序
if added:
# 累加相同进程名进程资源占用百分比
process_list = reduce(
lambda x,y: x+[y] if x==[] or x[-1][0]!=y[0] else x[0:-1]+[(x[-1][0],x[-1][1]+y[1],x[-1][2]+y[2])],
[[]] + process_list)
sort_index = 1 if option.lower() == 'mem' else 2 # 排序列,option=mem,按prcess_list第2列(index=1)排序
# 将process_list按相应列从大到小排序,无累加-------# todo 先累加再排序
process_list.sort(key=lambda process_list:process_list[2 if sort_index==1 else 1], reverse=True)
process_list.sort(key=lambda process_list:process_list[sort_index], reverse=True)
return process_list[0:n]
@_show_time
@_collect_result
def check_zombie_process():
zombie_process_list = []
for proc in psutil.process_iter():
if proc.status() == 'zombie':
zombie_process_list.append(
(proc.name(), proc.status(), proc.create_time(), proc.memory_percent(), proc.cpu_percent(0.01))
)
return zombie_process_list
@_show_time
@_collect_result
def check_single_process(process_name='php-fpm'):
warn_process_list = []
for proc in psutil.process_iter():
if proc.name() == process_name:
if proc.memory_info().res()/1024/1024 >= int(RES_WARN):
warn_process_list.append(proc.name(), proc.create_time(), proc.memory_info().res(), proc.connections())
return warn_process_list
@_show_time
def write_log(check_result):
now= time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
try:
with open(LOG_FILE,'ab') as f:
f.writelines(now + '\t' + check_result)
except IOError:
print("写日志文件失败!")
@_show_time
def send_mail(subject=EMAIL_SUBJECT, content=EMAIL_TPL):
mail_body = content
msg = MIMEText(mail_body, 'html', 'utf-8')
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = SMTP_USER
msg['To'] = ','.join(RECEIVER_LIST)
smtp = smtplib.SMTP_SSL()
smtp.connect(SMTP_SERVER,994)
smtp.login(SMTP_USER, SMTP_PASSWD)
for reserver in RECEIVER_LIST:
smtp.sendmail(SMTP_USER, reserver, msg.as_string())
smtp.quit()
print('Email has send out!')
if __name__ == '__main__':
print("主程序开始")
start_time = time.time()
check_result = reduce(
lambda x,y: dict(x, **y),
[check_cpu(), check_mem(), check_zombie_process(), check_single_process()]
)
for func, func_result in check_result.items():
if func_result['status'] != 'OK':
send_mail(func + '报警',json.dumps(func_result))
break
write_log(json.dumps(check_result))
print("总程序执行时间:%.3fs" % (time.time()-start_time))
相关推荐
使用Python的psutil模块监控系统资源
Python的psutil模块提供了一种简单而有效的方式来监控和获取系统资源的信息。本文将介绍如何使用psutil模块来监控系统资源,并提供相应的源代码示例。通过上述示例,你可以看到如何使用psutil模块来监控系统资源。除了上述示例外,psutil还提供了其他方法来获取更多的系统信息,例如获取进程列表、获取网络连接信息等。我们通过字典中的各个字段来获取总内存大小、可用内存大小、已使用内存大小和内存使用率。表示根目录),我们可以获取磁盘的总大小、已使用大小、可用大小和使用率。方法来获取磁盘的使用情况。
使用Linux的dstat命令监控系统性能和资源
在Linux系统中,了解系统的性能和资源使用情况对于有效管理和故障排除至关重要。dstat是一个功能丰富的命令行工具,它提供了实时监控和统计系统性能和资源的能力。本文将介绍如何使用dstat命令来监控关键指标并显示实时统计信息和图表。
使用psutil库监控系统资源的实用指南
psutil是一个跨平台的库,旨在提供系统和进程的相关信息。它可以用于获取CPU、内存、磁盘、网络等资源的使用情况,适用于系统监控、性能分析和资源管理等场景。psutil的设计目标是简单易用,能够在多种操作系统上运行,包括Windows、Linux和macOS。本文介绍了如何使用psutil库监控系统资源,包括CPU、内存、磁盘和网络的使用情况。我们编写了多个函数来获取这些信息,并整合成一个综合监控函数。通过实时监控、
Python对系统数据进行采集监控——psutil
大家好,我是辰哥~ 今天给大家介绍一个可以获取当前系统信息的库——psutil 利用psutil库可以获取系统的一些信息,如cpu,内存等使用率,从而可以查看当前系统的使用情况,实时采集这些信息可以达到实时监控系统的目的。 psutil库 psutil的安装很简单 pip install psutil psutil库可以获取哪些系统信息? psutil有哪些作用 1.内存使用情况 2.磁盘使用情况 3.cpu使用率 4.网络接口发送接收流量 5.获取当前网速 6.系统当前进程 ... 下面通过具体
Python系统监控模块psutil功能与经典用法分析
本文实例讲述了Python系统监控模块psutil功能与经典用法。分享给大家供大家参考,具体如下: 1. psutil模块概述 psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要应用于系统监控,分析和限制系统资源及进程的管理。它实现了同等命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等
MSPM0G3507电赛控制板设计:电机驱动与多传感器融合
微控制器是嵌入式控制系统的核心处理单元,其性能与外设集成度直接决定实时控制能力。基于Arm Cortex-M0+内核的MCU凭借低功耗、高性价比和丰富模拟资源,成为大学生电子设计竞赛等工程实践场景的主流选择。本文围绕MSPM0G3507展开,深入解析双路电机驱动(TB6612FNG)、多源传感采集(MPU6050+ADC电压监测)及抗干扰硬件架构等关键技术,强调电源隔离、信号完整性与鲁棒性设计对72小时封闭竞赛环境的关键支撑作用。典型应用涵盖巡线小车运动控制、姿态解算与蓝牙/Zigbee协同通信,为控制类赛
python 用psutil、pymysql和flask快速打造简易实时网络监控系统
文章目录快速打造简易实时监控系统一、为什么要监控服务器数据二、准备工作1. 获取网卡实时流量信息 - psutil2.存储信息 - mysql (可用mariadb或者mysql)练习:将所有的web日志都 插入到数据库中三、数据展示1.创建数据库表2.获取网卡流量并入库3.web显示4.运行三个脚本,根据提示的ip和端口信息访问页面看效果5.遇到的问题 快速打造简易实时监控系统 一、为什么要监控服务器数据 监控为什么会如此重要? 提前预防故障发生(磁盘、内存、CPU) 发生故障及时了解,并通过历史数据回
告别手动连接!一键搞定Mumu模拟器与Android Studio的ADB配置
本文详细介绍了如何通过编写自动化脚本,一键完成Mumu模拟器与Android Studio的ADB连接配置。告别繁琐的手动命令输入,该脚本能智能检查环境、判断连接状态并自动处理端口转发,显著提升Android开发者的调试与测试效率。
python库(5):Psutil库实现系统和硬件监控工具
psutil(process and system utilities)是一个跨平台库,用于检索运行中进程和系统利用率(包括 CPU、内存、磁盘、网络等)的信息,可以提供丰富的系统监控功能。
FPGA优质开源项目 – UDP万兆光纤以太网通信
本文开源一个FPGA项目:UDP万兆光通信。文章末尾有该工程源码获取方式,有需要的小伙伴可以点赞、分享支持一下~
小红书高时效推荐系统背后的技术升级
在小红书 APP 中,推荐系统的实效性对推荐效果有着特别重要的影响,特别是作为 UGC 平台,小红书的推荐系统如果能更快地捕捉用户与笔记之间的变化和联系,就能够给推荐带来更好的效果。在2021年上半年,首页推荐的召回、粗排、精排的主要模块都保持在天级更新的状态,我们通过持续迭代,将召回 CF 渠道、召回索引更新、召回模型/粗精排模型的训练都做到了分钟级更新,为首页推荐的分发效率带来飞跃式提升,并给业务侧带来非常显著的收益。 小红书站内“最近一天内发布的新笔记”在首页的曝光占比一直很高,这段时间更是快速
如何使用 psutil 监控系统资源
在系统运行中,监控计算机的系统资源(如 CPU 使用率、内存使用情况、磁盘活动等)对于系统优化和故障排查至关重要。`psutil` 是一个非常流行且强大的 Python 库,它提供了一种简便的方式来获取系统的各种资源信息。无论是用于开发应用程序,还是作为系统管理员的工具,`psutil` 都能够帮助我们实时监控和分析系统资源的使用情况。本文介绍如何使用 `psutil` 来监控系统资源,并提供一些实用的示例代码。
BES平台集成第三方音频算法避坑指南:以声加ENC为例,聊聊文件放置、内存分配与授权那些事
本文详细解析了在BES平台上集成声加ENC降噪算法的全流程,包括技术选型、系统架构设计、内存管理及量产授权等关键环节。特别针对BES平台的双核架构和内存限制,提供了文件放置、内存分配与授权验证的实用解决方案,帮助开发者高效实现音频算法集成。
python 使用psutil模块监控系统资源并告警
思路: 利用python psutil库 获取系统资源 监控告警参考zabbix 异常告警,恢复则通知恢复 利用文本增加时间戳和告警标签 加判断 最新的告警时间在20分钟内则不再重复告警,超20分钟未处理再次告警 定义告警标签,True 为正常状态 和False为告警过的状态 告警后更新监控标签 为False,在False状态和资源低于阈值时则判断为已恢复,并重置文本 代码如下: #!/usr/bin/env python # _*_ coding: utf-8 _*_ import p
实战ByteTrack:用C++手把手教你实现多目标跟踪(附完整代码解析)
本文通过C++实战教程,手把手教你实现ByteTrack多目标跟踪算法。文章详细解析了算法核心,包括利用卡尔曼滤波进行状态预测、匈牙利算法完成数据关联,以及ByteTrack独特的三次匹配策略来有效处理低置信度检测框,并提供了完整的项目架构、代码实现与性能优化指南。
[网络安全自学篇] 六十八.WannaCry勒索病毒复现及分析(二)MS17-010利用及病毒解析
这是作者的网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您们喜欢,一起进步。前文分享了通过Python利用永恒之蓝漏洞加载WannaCry勒索病毒,并实现对Win7文件加密的过程,但过程较为复杂,为什么不直接利用永恒之蓝呢?所以,这篇文章将直接分享MSF利用MS17-010漏洞进行反弹Shell,再上传勒索病毒进行实验复现,并详细讲解WannaCry勒索病毒的原理。基础性文章,希望对您有所帮助。
Python中使用psutil查看内存占用的情况(内存)
【代码】Python中使用psutil查看内存占用的情况(内存)
[毕设项目-大模型微调]现代文翻译文言文【基于LLaMA3.1-8B微调】
教你基于LLaMA3.1-8B微调如何做到现代文翻译文言文
psutil获取系统信息
import psutil print(psutil.cpu_count())# CPU逻辑数量 print(psutil.cpu_count(logical=False))# CPU物理核心 # 2说明是双核超线程, 4则是4核非超线程 统计CPU的用户/系统/空闲时间: import psutil print(psutil.cpu_times()) #再实现类似top命令的CP...
蓝牙模块HM-10手册
蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。
Camera2Demo
在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作
Python神器:psutil库使用详解
作为一名Python开发者,psutil库无疑是你的必备工具之一!
IDEA的使用指南
IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.
Python模块之psutil详解
psutil是一个跨平台库,能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要用来做系统监控,性能分析,进程管理。
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
psutil模块
psutil import psutil,datetime #cpu print("cpu_times:\t",psutil.cpu_percent(),"\n") #内存 mem = psutil.virtual_memory() print("mem_total:\t",int(mem.total/1024/1024),"MB") print("mem_free:\t",...
python第三方模块—psutil模块
系统基础信息采集模块作为监控模块的重要组成部分,能够帮助运维人员了解当前系统的健康程度,同时也是衡量业务的服务质量的依据,比如系统资源吃紧,会直接影响业务的服务质量及用户体验,另外获取设备的流量信息,也可以让运维人员更好地评估带宽、设备资源是否应该扩容。运用Python第三方系统基础模块,可以轻松获取服务关键运营指标数据,包括Linux基本性能、块设备、网卡接口、系统...
Python之psutil库的使用
psutil (python system and process utilities) 是一个跨平台的第三方库,能够轻松实现获取系统运行的进程和系统利用率(包扩CPU、内存、磁盘、网络等)信息。它主要用于系统监控、分析、限制系统资源和进程的管理。它实现了同等命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill...
161



被折叠的 条评论
为什么被折叠?



