java占用磁盘多_CPU使用率超过80%或硬盘超过85%邮件报警脚本

  • Post author:
  • Post category:java


使用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

}

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()

ccae1ce2506153dd1c6814affb627c7c.png

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()

7fc2a4bc5fd9a07c2f658831b2206791.png



版权声明:本文为weixin_31971181原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。