美文网首页
shell入门11-一个系统性能监控脚本

shell入门11-一个系统性能监控脚本

作者: 万州客 | 来源:发表于2022-12-30 11:58 被阅读0次

    学习,就是不断的敲打键盘吧。

    一个晚上的成果,边和同事开会,边打打字。
    一,代码

    #!/bin/bash
    # 本脚本获取系统各项性能参数指标,并根据预设阈值决定是否给管理员发送邮件进行报警
    # 变量定义列表如下
    # time:时间,local_ip: enp0s3网卡IP,free_mem:剩余内存大小,free_disk:剩余磁盘大小
    # cpu_load:15min平均负载,login_user:登录系统的用户,procs:当前进程数量
    local_time=$(date +"%Y%m%d %H:%M:%S")
    echo "local_time:" $local_time
    local_ip=$(ifconfig enp0s3|grep netmask|tr -s " "|cut -d" " -f3)
    echo "local_ip:" $local_ip
    free_mem=$(cat /proc/meminfo|grep Avai|tr -s " "|cut -d" " -f2)
    echo "free_mem:" $free_mem
    free_disk=$(df|grep "/$"|tr -s " "|cut -d' ' -f4)
    echo "free_disk:" $free_disk
    cpu_load=$(cat /proc/loadavg|cut -d' ' -f3)
    echo "cpu_load:" $cpu_load
    login_user=$(who|wc -l)
    echo "login_user:" $login_user
    procs=$(ps aux|wc -l)
    echo "procs:" $procs
    # 以后使用awk比,tr,cut会更好些更简单些
    
    # vmstat 命令可以查看系统中CPU的中断数,上下文切换数量
    # CPU处理I/O等待时间,用户态及系统态消耗CPU的统计数据
    # vmstat命令输出的前两2行信息是头部信息,第3行信息为开机到当时的平均数据
    # 第4行开始的数据是每秒钟的实时数据,tail -n +4 表示删掉前3行从第4行信息开始显示
    # irq:中断,cs:上下文切换,usertime:用户态
    # CPU,systime:系统态CPU,iowait:等待I/O时间
    
    
    irq=$(vmstat 1 2|tail -n +4|tr -s ' '|cut -d' ' -f12)
    echo "irq:" $irq
    cs=$(vmstat 1 2|tail -n +4|tr -s ' '|cut -d' ' -f13)
    echo "cs: " $cs
    usertime=$(vmstat 1 2|tail -n +4|tr -s ' '|cut -d' ' -f14)
    echo "usertime:" $usertime
    systime=$(vmstat 1 2|tail -n +4|tr -s ' '|cut -d' ' -f15)
    echo "systime:" $systime
    iowait=$(vmstat 1 2|tail -n +4|tr -s ' '|cut -d' ' -f17)
    echo "iowait:" $iowait
    
    # 下面很多命令,因为内容比较长,无法在一行显示,所以使用了\强制换行
    # 使用强制换行符后,允许将一个命令在多行中输入
    
    #当剩余内存不足1GB时发送邮件给root进行报警
    [ $free_mem -lt 1048576 ] && \
    echo "$local_time Free memory not enough.
    Free_mem:$free_mem on $local_ip" | \
    mail -s Warning root@localhost
    # 当剩余磁盘不足10GB时发送邮件给root进行报警
    
    [ $free_disk -lt 10485760 ] && \
    echo "$local_time Free disk not enough.
    root_free_disk:$free_disk on $local_ip" | \
    mail -s Warning root@localhost
    
    # 当CPU的15min平均负载超过4时发送邮件给root进行报警
    result=$(echo "$cpu_load > 4"|bc)
    [ $result -eq 1 ] && \
    echo "$local_time CPU load to high
    CPU 15 averageload:$cpu_load on $local_ip"|\
    mail -s Warning root@localhost
    # 当系统实时在线人数超过3人时发送邮件给root进行报警
    
    [ $login_user -gt 3 ] && \
    echo "$local_time Too many user.
    $login_user users login to $local_ip"|\
    mail -s Warning root@localhost
    # 当实时进程数据大于500时发送邮件给root进行报警
    
    [ $procs -gt 500 ] && \
    echo "$local_time Too many procs.
    $procs proc are runing on $local_ip"|\
    mail -s Warning root@localhost
    
    # 当实时CPU中断大于5000时发送邮件给root进行报警
    [ $irq -gt 5000 ] && \
    echo "$local_time Too many interupts.
    There are $irq interupts on $local_ip"|\
    mail -s Warning root@localhost
    
    # 当实时CPU上下文切换数量大于5000时发送邮件给root进行报警
    [ $cs -gt 5000 ] && \
    echo "$local_time Too many Content Switches.
    $cs of context switches per second on $local_ip"|\
    mail -s Warning root@localhost
    
    # 当用户态进程占用CPU超70%时发送邮件给root进行报警
    [ $usertime -gt 70 ] && \
    echo "$local_time CPU load to high.
    Time spend runing non-kernel code:$usertime on $local_ip"|\
    mail -s Warning root@localhost
    
    # 当内核态进程占用CPU超过70时,报警
    [ $systime -gt 70 ] && \
    echo "systime -gt 70 warning"|\
    mail -s Warning root@localhost
    
    # 当CPU消耗大量时间等待磁盘I/O时,报警
    [ $iowait -gt 40 ] && \
    echo "iowait -gt 40 warning..."
    

    二,输出

    local_time: 20221227 07:44:35
    local_ip: 192.168.1.211
    free_mem: 7614792
    free_disk: 31453900
    cpu_load: 0.04
    login_user: 2
    procs: 159
    irq: 158
    cs:  143
    usertime: 0
    systime: 0
    iowait: 0
    

    相关文章

      网友评论

          本文标题:shell入门11-一个系统性能监控脚本

          本文链接:https://www.haomeiwen.com/subject/nfyaqdtx.html