CPU使用率超过80%或硬盘超过85%邮件报警脚本

本文部分取自:老男孩教育每日一题-2017-04-17:使用Shell或Python写一个脚本,CPU使用率超过80%或硬盘超过85%邮件报警

使用Shell或Python写一个脚本,CPU使用率超过80%或硬盘超过85%邮件报警。

一、Shell

1.1 知识点1

CPU监控:top -n 1 查看1次就退出

Cpu(s): 0.3%us,  0.3%sy,  0.0%ni, 99.3%id,  0.0%wa, 0.0%hi,  0.0%si,  0.0%st

99.3%id  是未使用的CPU,剩余的都是使用的。

获取使用率

top -n 1|awk -F '[, %]+' 'NR==3 {print 100-$11}'

1.2 知识点2

磁盘监控先监控

df -h|awk -F '[ %]+'  '/\/$/{print $5}'

1.3 知识点3

使用bc进行含有小数的大小判断

[root@oldboy ~]# echo "0.1>0.01"|bc
1
[root@oldboy ~]# echo "0.1>0.2"|bc
0
[root@oldboy ~]# echo "5.6>10.3"|bc
0

具体步骤

1) 配置/etc/mail.rc支持发邮件

http://oldboy.blog.51cto.com/2561410/1706911

2) 脚本

[root@oldboy scripts]# cat check.sh
#!/bin/bash
LANG=en_US.UTF-8
cpuUsed=`top -n 1|awk -F '[, %]+' 'NR==3 {print100-$11}'`
diskUsed=$(df -h|awk -F '[ %]+'  '/\/$/{print $5}')
logFile=/tmp/jiankong.log
  
function Sendmail(){
    mail -s"监控报警" user@oldboyedu.com <$logFile
}
  
function check(){
    if [ `echo"$cpuUsed>80"|bc` -eq 1 -o $diskUsed -ge 85 ];then
       echo"CPU使用率:${cpuUsed}%,磁盘使用率:${diskUsed}%">$logFile
      Sendmail
    fi
}
  
function main(){
    check
}
 
main

3) 加入定时任务,每5分钟执行一次。

二、Python3

2.1 yagmail 和 psutil

已在python3测试,运行前请确认环境已安装模块 psutil 和 yagmail。

了解 yagmail 模块请参考我的另一篇博文《Socket编程(下)以及Python发送邮件》第二部分。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time    : 2018/6/15 16:15
# @Author  : zhouyuyao
# @File    : demon2.py

import psutil     # python获取系统信息模块,需要额外安装
import yagmail    # 发送邮件

cpuUsed = psutil.cpu_percent(interval=1)         # CPU使用率
diskUsed = psutil.disk_usage('/').percent        # 磁盘使用率

def send_mail(recipient):
    args = {
        "user": "xxxxxxxx@163.com",              # SMTP登录名
        "password": "xxxxxxxx",                  # SMTP密码
        "host": "smtp.163.com", 
        "port": "465"
    }
    emailList = ["xxxxxxxx@qq.com"]              # 收件方,多个为列表
    emailCc = ['xxx@xxxxxx.cn']                 # 抄送收件方,多个为列表
    contenntS = recipient
    email = yagmail.SMTP(**args)                 # 建立SMTP连接
    email.send(to=emailList, subject="监控报警", contents=contenntS, attachments="报警文件.txt", cc=emailCc)   # to为收件方,subject为主题,contents为正文,attachments为附件,cc为抄送收件方

def check():
    if cpuUsed <= 80 or diskUsed >= 85:
        send_mail("CPU使用率:{}%,磁盘使用率:{}%".format(cpuUsed, diskUsed))

if __name__ == '__main__':
    check()

fc9985782aab27c548ce8004eb75a86c3df.jpg

2.2 smtplib 和 psutil

该脚本需要安装 pip3 install psutil

[root@linux-node1 ~]# cat check.py 
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import psutil   # python获取系统信息模块,需要额外安装
import smtplib  # 发送邮件
from email.mime.text import MIMEText  # 构造纯文本邮件
from email.utils import formataddr # 格式化邮件地址
 
cpuUsed=psutil.cpu_percent(interval=1)
diskUsed=psutil.disk_usage('/').percent
 
def structural_mail(text, recipient):
    msg = MIMEText(text, 'plain', 'utf-8')
    msg['From'] = formataddr(["张耀", 'user@oldboyedu.com'])  # 发件人
    msg['To'] = formataddr([recipient, recipient])  # recipient收件人
    msg['Subject'] = "监控报警"  # 主题
    return msg
 
 
def send_mail(text, recipient):
    from_addr = '发送邮箱账号'
    password = '密码'
    smtp_server = 'smtp.exmail.qq.com'
    smtp_port = 25
    to_addr = []  # 可以一次发给多个人,因此传入一个列表
    to_addr.append(recipient)
 
    msg = structural_mail(text, recipient)
 
    server = smtplib.SMTP(smtp_server, smtp_port)
    server.login(from_addr, password) 
    server.sendmail(from_addr, to_addr, msg.as_string())
 
 
def check():
    if cpuUsed <= 80 or diskUsed >= 85:
       send_mail('CPU使用率:{}%,磁盘使用率:{}%'.format(cpuUsed, diskUsed),'12345678@qq.com')
 
if __name__ == '__main__':
    check()

155b33ffac93c4b1de481175401a3991140.jpg

 

转载于:https://my.oschina.net/u/3314358/blog/1830801

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值