shell脚本
一、监控系统cpu的情况
使用top命令查看linux系统cpu使用情况:
#抓取cpu的总核数
grep -c 'model name' /proc/cpuinfo
#使用top命令查看linux系统cpu使用情况:(-b -n 1 表只需要1次的输出结果)
top -b -n 1 | grep Cpu
us:用户态使用的cpu时间比
sy:系统态使用的cpu时间比
ni:用做nice加权的进程分配的用户态cpu时间比
id:空闲的cpu时间比
wa:cpu等待磁盘写入完成时间
hi:硬中断消耗时间
si:软中断消耗时间
st:虚拟机偷取时间
查看截取空闲cpu的百分比数值命令(只取整数部分 | cut -f 1 -d "."):
top -b -n 1 | grep Cpu | awk '{print $8}' | cut -f 1 -d "."
编写cpu监控的脚本文件 cpu-usage.sh:
#!/bin/bash
#获取空闲CPU百分比 取整数部分
cpuUsage=$(top -b -n 1 | grep Cpu | awk '{print $8}' | cut -f 1 -d ".")
#cpu剩余告警阀值
max=20
# 如果cpu空闲使用率小于等于 max
if [[ ${cpuUsage} -le ${max} ]]; then
# $1 监控服务器ip
echo "$1 上CPU剩余 : $cpuUsage %,使用率已经超过 $max %, 时间: $(date) ,请及时处理" | mail -s "$1 CPU 使用告警!" xxx@qq.com
fi
脚本启动命令:
# 用bash 而不是sh命令启动;ip 为监控服务器ip
bash cpu-usage.sh ip
二、监控服务器内存使用情况
查看服务磁盘使用情况:
# 查看服务器磁盘使用情况
df -h
#返回值说明
Filesystem 指定文件系统的名称
Size 总内存
Used 已用内存
Avail 可用内存
Use% 内存使用率
Mounted on 指定的文件系统的挂载点,即目录
编写磁盘内存监控的脚本文件 disk-usage-alert.sh:
#!/bin/bash
# 获取服务器Filesystem 为 /dev/sda1 (即 / 目录)的内存使用率
used=$(df -Ph | grep '/dev/sda1' | awk {'print $5'})
# 磁盘使用率告警阀值
max=65%
if [ ${used%?} -ge ${max%?} ]; then
echo "$1 上磁盘内存剩余 : $cpuUsage %,使用率已经超过 $max %, 时间: $(date) ,请及时处理" | mail -s "$1 磁盘内存使用告警!" xxx@qqq.com
fi
脚本启动命令:
# 用bash 而不是sh命令启动;ip 为监控服务器ip
bash disk-usage-alert.sh ip
三、定时任务执行shell脚本
添加定时任务,以下两种方式均可
# 1.修改 crontab 文件
vi /etc/crontab
# 2.crontab命令添加
crontab -e
定时任务 :
# */30 * * * * 每隔30分钟执行一次定时任务
# /opt/disk-monitor/disk-usage-alert.sh shell脚本路径
# 192.168.1.1 监控服务器ip
*/30 * * * * root bash /opt/disk-monitor/disk-usage-alert.sh 192.168.1.1
四、发送邮件mail的python脚本:mail.py
#!/usr/bin/env python
#-*- coding: UTF-8 -*-
import os,sys
reload(sys)
sys.setdefaultencoding('utf8')
import getopt
import smtplib
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from subprocess import *
def sendqqmail(username,password,mailfrom,mailto,subject,content):
# 邮箱的服务地址
gserver = 'smtp.exmail.qq.com'
gport = 465
try:
# 发送邮件内容
msg = MIMEText(content ,'plain', 'utf-8')
# 发件人
msg['from'] = mailfrom
# 收件人
msg['to'] = mailto
msg['Reply-To'] = mailfrom
msg['Subject'] = subject
msg['Accept-Language']='zh-CN'
msg['Accept-Charset']='ISO-8859-1,utf-8'
smtp = smtplib.SMTP_SSL(gserver, gport)
smtp.set_debuglevel(0)
smtp.login(username,password)
smtp.sendmail(mailfrom, mailto.split(','), msg.as_string())
smtp.close()
except Exception,err:
print "Send mail failed. Error: %s" % err
def main():
to=sys.argv[1]
subject=sys.argv[2]
content=sys.argv[3]
print ('content:'+content)
#定义QQ邮箱的账号和密码,你需要修改成你自己的账号和密码
sendqqmail('发件人邮箱账号','发件人邮箱密码','发件人邮箱账号',to,subject,content)
if __name__ == "__main__":
main()