美文网首页
服务器状态巡检脚本

服务器状态巡检脚本

作者: 阿当运维 | 来源:发表于2020-10-22 14:49 被阅读0次

    功能:1.查看CPU状态 2.内存状态 3.硬盘状态 4.tcp链接状态

    #!/bin/bash
    #查看服务器状态脚本
    
    cpu() {
            #us+sy 用户和系统进程消耗cpu百分比之和
            check_cpu=$(vmstat|awk '{if(NR==3) print$13+$14}')
            #磁盘io响应使用率
            check_io=$(vmstat|awk '{if(NR==3) print$16}')
            echo "CPU使用率为$check_cpu%, 磁盘io响应率为$check_io%"
    }
    
    memory() {
            #总内存,printf 是输出命令 %f格式化为小数,%.1f是后面保留1位小数。如: 1.0,这里/1024是将以G为单位显示
            total=$(free -m|awk '{if(NR==2)printf "%.1f",$2/1024 }')
            #内存使用量=总量-可用
            used=$(free -m|awk '{if(NR==2)printf "%.1f",($2-$NF)/1024 }')
            #可用
            available=$(free -m|awk '{if(NR==2)printf "%.1f",$NF/1024 }')
            echo "内存信息- 总大小为${total}G, 已使用:${used}G,剩余量为${available}G"
    
    }
    disk() {
            #只看根分区/ 和boot分区。所以要awk去匹配文件系统为/dev/开头的,下面devlist输出/,/boot
            #$1代表分区列,如/dev/sda1  $NF-最后一列(代表挂载点一列)如/  /boot
            devlist=$(df -h|awk '/^\/dev/{print $1}')
            for i in $devlist
            do
                    mouted=$(df -h|awk -v i=$i '$1==i{print $NF}')
                    size=$(df -h|awk -v i=$i '$1==i{print $2}')
                    used=$(df -h|awk -v i=$i '$1==i{print $3}')
                    use_free=$(df -h|awk -v i=$i '$1==i{print $5}')
                    echo "硬盘信息- 挂载点: $mouted, 总大小: $size,已使用: $used,使用率:$use_free "
            done
    }
    tcp() {
        #$6是连接数那一列,将状态名存入awk设定的数组中作为key,数组取名s。++代表每遇到一个key,它的value会累加1,END结束,循环输出键值。
            netstat -antp|awk '{s[$6]++}END{for (i in s) print i,"当前连接数为" s[i]}'
    
    }
    main() {
        echo "----------服务器巡检信息---------------"
        cpu
        echo "---------------------------------------"
        memory
        echo "---------------------------------------"
        disk
        echo "---------------------------------------"
        tcp
        echo "---------------------------------------"
    }
    main
    

    脚本中,硬盘部分思路:先df -h查看整体的结构


    image.png

    awk '/^/dev/{print $1}' awk匹配以dev开头的行,得出/,/boot挂载点的分区列表/dev/开头的(这种分区才是我们自己分的)才是主要查看的。此作为遍历池。
    mouted变量是df -h 后用awk -v 赋予变量i 让其等于for循环中的变量i (/dev/sda1等/dev/开头的分区)
    后面来判断,当(第一列-分区列)字符==变量i(/dev/sda1等/dev/开头的分区)的时候,符合条件,输出挂载点那一列。这里S1==i是做了一个判断,awk这里可以不加if 直接进行判断
    后面的size等,一样的道理。只要是想要的哪一行匹配上了,输出那一行,指定的列。
    硬盘部分脚本运行结果


    image.png

    脚本运行结果:


    image.png

    相关文章

      网友评论

          本文标题:服务器状态巡检脚本

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