创建一个脚本,名字叫sys_watch.sh。此脚本来源于《Linux shell 核心编程指南》,丁明一版本。 此脚本主要内容为: 遇到的问题: 如果mail -s 邮箱命令报错,send-mail: fatal: parameter inet_interfaces: no local interface found for ::1 解决方案来源:https://blog.csdn.net/u013303402/article/details/53484093 1)vim /etc/postfix/main.cf 2)设置inet_interfaces = all 3)重启service postfix restart
脚本如下: [root@yaomm test]# vi sys_watch.sh #/bin/bash
# 系统监控脚本
# 系统时间 local_time=$(date +'Y%m%d %H:%M:%S')
# 本机ip awk {'print $2'}==>获取第2组数据 local_ip=$(ifconfig eth0 | grep netmask | awk {'print $2'} )
# 可用内存 /proc/meminfo文件中存放了内存使用信息 free_mem=$(cat /proc/meminfo | grep Avai | awk {'print $2'} )
# 可用磁盘 grep '/$' ==> 获取以/结尾的行 free_disk=$(df | grep '/$' | awk {'print $3'})
# cpu负载 cpu_load=$(cat /proc/loadavg | awk {'print $3'} ) # 统计登录用户 login_user=$(who | wc -l)
# 统计运行进程 procs=$(ps aux | wc -l)
#---------------以下为vmstat统计数据 # cpu中断 irq=$( vmstat 1 2 | tail -n +4 | awk {'print $12'} )
# 上下文切换 cs=$( vmstat 1 2 | tail -n +4 | awk {'print $13'} )
# 用户态 usertime=$( vmstat 1 2 | tail -n +4 | awk {'print $14'})
# 系统态 systime=$( vmstat 1 2 | tail -n +4 | awk {'print $15'})
# I/O 等待 iowait=$( vmstat 1 2 | tail -n +4 | awk {'print $17'})
#------------------以下为阈值比较命令,\分割长语句,当做一条命令
# 剩余内存不足1G时发送邮件报警 if [[ $free_mem -lt 1048576 ]];then
# 打印内存及ip发送邮件 echo '$local_time free memory not enough. \ free_mem:$free_mem on $local_ip' \ | mail -s Warning root@localhost fi
# 剩余磁盘不足10G时发送邮件报警 if [[ $free_mem -lt 1048576 ]];then
# 打印内存及ip发送邮件 echo '$local_time free disk not enough. \ free_disk:$free_disk on $local_ip' \ | mail -s Warning root@localhost fi
# cpu 15分钟平均负载超过4时发送邮件 # cpu_load有浮点数,不能直接比较,需要用bc取整 #result=$(echo '$cpu_load > 4' | bc) if [[ $cpu_load > 4 ]];then
# 打印cpu负载发送邮件 echo '$local_time cpu load to high. \ cpu 15 avgload:$free_mem on $local_ip' \ | mail -s Warning root@localhost fi
# 在线人数超过3时告警 if [[ $login_user -gt 3 ]];then
# 打印发送邮件 echo '$local_time too many user. \ $login_user users login to $local_ip' \ | mail -s Warning root@localhost fi
# 进程数量大于500时发送告警 if [[ $procs -gt 500 ]];then
# 打印发送邮件 echo '$local_time cpu Too many procs. \ $procs proc are runing on $local_ip' \ | mail -s Warning root@localhost fi
# 其他,限于篇幅、时间,不再一一写出 # cpu中断大于5000告警
# cpu上下文切换大于5000告警
# 用户态进程占用cpu超过70%告警
# 内核态进程占用cpu超过70%告警
# cpu消耗大量时间在等待磁盘I/O超过40%告警
|