当前位置: 首页 > news >正文

python监控系统资源使用率并钉钉报警脚本

监控系统资源使用率并钉钉报警

当Linux系统 cpu 内存 SWap交换空间 使用率超过80% 给钉钉发送报警。

#python3版本
[root@localhost 11:35:16]# python3 --version
Python 3.6.8

#pip3版本
[root@localhost 11:35:22]# pip3 --version
pip 9.0.3 from /usr/lib/python3.6/site-packages (python 3.6)

#安装requests模块
pip3 install requests

#创建脚本文件
vim monitor.py

#赋予脚本执行权限
chmod +x monitor.py

#运行脚本:
python3 monitor.py

#设置定时任务
#打开 crontab 编辑器:
crontab -e
#添加以下内容,每分钟运行一次脚本:
* * * * * /usr/bin/python3 /path/to/monitor.py
#将 /path/to/monitor.py 替换为脚本的实际路径。

monitor.py脚本内容

import os
import requests
import json
import socket

# 钉钉 Webhook URL
webhook_url = "钉钉 Webhook URL"

# 获取主机名称
def get_hostname():
    return socket.gethostname()

# 获取 IP 地址
def get_ip_address():
    try:
        # 使用 ifconfig 获取 IP 地址
        cmd = "ifconfig ens160 | grep 'inet ' | awk '{ print $2 }'"
        ip_address = os.popen(cmd).read().strip()
        if ip_address:
            return ip_address
        else:
            return "未知"
    except Exception as e:
        print(f"获取 IP 地址失败: {e}")
        return "未知"

# 获取 CPU 使用率
def get_cpu_usage():
    cmd = "top -bn1 | grep '%Cpu' | awk '{print $2}'"
    result = os.popen(cmd).read().strip()
    print(f"CPU 使用率命令输出: {result}")  # 调试信息
    return float(result)

# 获取内存使用率
def get_memory_usage():
    cmd = "free -m | grep 'Mem'"
    result = os.popen(cmd).read().split()
    memory_total = float(result[1])
    memory_used = float(result[2])
    memory_usage = (memory_used / memory_total) * 100
    print(f"内存使用率: {memory_usage:.2f}%")  # 调试信息
    return memory_usage

# 获取 SWAP 使用率
def get_swap_usage():
    cmd = "free -m | grep 'Swap'"
    result = os.popen(cmd).read().split()
    swap_total = float(result[1])
    swap_used = float(result[2])
    swap_usage = (swap_used / swap_total) * 100
    print(f"SWAP 使用率: {swap_usage:.2f}%")  # 调试信息
    return swap_usage

# 发送钉钉报警
def send_dingding_alert(message):
    headers = {'Content-Type': 'application/json'}
    data = {
        "msgtype": "text",
        "text": {
            "content": f"报警:{message}"  # 加入关键词 "报警"
        }
    }
    print(f"发送消息到钉钉: {message}")  # 调试信息
    response = requests.post(webhook_url, headers=headers, data=json.dumps(data))
    print(f"钉钉响应状态码: {response.status_code}")  # 调试信息
    print(f"钉钉响应内容: {response.text}")  # 调试信息
    return response.status_code

# 主函数
def main():
    print("脚本开始运行...")  # 调试信息
    hostname = get_hostname()
    ip_address = get_ip_address()
    cpu_usage = get_cpu_usage()
    memory_usage = get_memory_usage()
    swap_usage = get_swap_usage()

    if cpu_usage > 80:
        message = f"主机: {hostname} (IP: {ip_address})\n⚠️ CPU 使用率超过 80%: {cpu_usage:.2f}%"
        send_dingding_alert(message)

    if memory_usage > 80:
        message = f"主机: {hostname} (IP: {ip_address})\n⚠️ 内存使用率超过 80%: {memory_usage:.2f}%"
        send_dingding_alert(message)

    if swap_usage > 80:
        message = f"主机: {hostname} (IP: {ip_address})\n⚠️ SWAP 使用率超过 80%: {swap_usage:.2f}%"
        send_dingding_alert(message)

if __name__ == "__main__":
    main()

注意事项1:钉钉Webhook URL

注意事项2:网络接口名称

 注意事项3:报警关键字。

 注意事项4:报警控制 资源利用率。

 运行结果:

python3 monitor.py

 

 Windows 在pycharm 上面执行脚本。

import os
import requests
import json
import socket
import psutil

# 钉钉 Webhook URL
webhook_url = " 钉钉 Webhook URL"

# 获取主机名称
def get_hostname():
    return socket.gethostname()

# 获取 IP 地址
def get_ip_address():
    try:
        hostname = socket.gethostname()
        ip_address = socket.gethostbyname(hostname)
        return ip_address
    except Exception as e:
        print(f"获取 IP 地址失败: {e}")
        return "未知"

# 获取 CPU 使用率
def get_cpu_usage():
    return psutil.cpu_percent(interval=1)

# 获取内存使用率
def get_memory_usage():
    memory_info = psutil.virtual_memory()
    return memory_info.percent

# 获取 SWAP 使用率
def get_swap_usage():
    swap_info = psutil.swap_memory()
    return swap_info.percent

# 发送钉钉报警
def send_dingding_alert(message):
    headers = {'Content-Type': 'application/json'}
    data = {
        "msgtype": "text",
        "text": {
            "content": f"报警:{message}"  # 加入关键词 "报警"
        }
    }
    print(f"发送消息到钉钉: {message}")  # 调试信息
    try:
        response = requests.post(webhook_url, headers=headers, data=json.dumps(data), timeout=10)
        print(f"钉钉响应状态码: {response.status_code}")  # 调试信息
        print(f"钉钉响应内容: {response.text}")  # 调试信息
        return response.status_code
    except requests.exceptions.RequestException as e:
        print(f"发送消息到钉钉失败: {e}")
        return None

# 主函数
def main():
    print("脚本开始运行...")  # 调试信息
    hostname = get_hostname()
    ip_address = get_ip_address()
    cpu_usage = get_cpu_usage()
    memory_usage = get_memory_usage()
    swap_usage = get_swap_usage()

    print(f"CPU 使用率: {cpu_usage}%")
    print(f"内存使用率: {memory_usage}%")
    print(f"SWAP 使用率: {swap_usage}%")

    if cpu_usage > 50:
        message = f"主机: {hostname} (IP: {ip_address})\n⚠️ CPU 使用率超过 50%: {cpu_usage:.2f}%"
        send_dingding_alert(message)

    if memory_usage > 50:
        message = f"主机: {hostname} (IP: {ip_address})\n⚠️ 内存使用率超过 50%: {memory_usage:.2f}%"
        send_dingding_alert(message)

    if swap_usage > 50:
        message = f"主机: {hostname} (IP: {ip_address})\n⚠️ SWAP 使用率超过 50%: {swap_usage:.2f}%"
        send_dingding_alert(message)

if __name__ == "__main__":
    main()

运行结果:

相关文章:

  • C++:string容器(上篇)
  • DeepSeek与浏览器自动化AI Agent构建指南
  • 【Leetcode 每日一题】2597. 美丽子集的数目
  • P10周:Pytorch实现车牌识别
  • 编译Telegram Desktop
  • Flutter——最详细原生交互(MethodChannel、EventChannel、BasicMessageChannel)使用教程
  • Odoo 企业版用户实施手册 第二章 Odoo 实施方法论 2.4 企业需求分析和目标定义
  • 100天精通Python(爬虫篇)——第115天:爬虫在线小工具_Curl转python爬虫代码工具(快速构建初始爬虫代码)
  • 国产编辑器EverEdit - 宏功能介绍
  • deepseek 3FS编译
  • 音视频入门基础:RTP专题(14)——FFmpeg源码中,对H.264的各种RTP有效载荷结构的解析
  • 【C++】:多态
  • redis的淘汰策略
  • Linux15-epoll、数据库
  • k8s概念及k8s集群部署(Centos7)
  • 基于 Python 实现问卷数据分析的详细示例
  • AI编程工具节选
  • 【商城实战(11)】解锁商品搜索与筛选功能,提升用户购物体验
  • 数据结构与算法(两两交换链表中的结点)
  • 鬼泣:动画2
  • 行业网站产品选择/游戏推广员到底犯不犯法
  • 新手网站建设/电脑培训班电脑培训学校
  • 知名高端网站建设服务商/免费换友情链接
  • 中国做的比较好的网站/武汉seo优化排名公司
  • 网站维护上海/电商运营平台
  • 网站未续费到期后打开会怎样/正规的网店培训机构有哪些