Ansible:服务器巡检_2、Linux 服务器巡检脚本

规划中平台是具备一定的通用性和可扩展性,所以在写脚本时引入了参数,以便实现代码的复用

**1、Linux 基础信息巡检**点击查看代码
sys_check(){
        echo "主机名称:`hostname`"
        #echo "操作系统:`cat /etc/*-release|awk 'END{print}'`"
        echo "操作系统:`cat /etc/*-release|awk 'END{print}'|cut -d = -f 2|sed                                                                                                                                                              's/"//g'`"
        echo "系统内核:`uname -r`"
        #echo "SELinux:`/usr/sbin/sestatus | grep 'SELinux status:' | awk '{pri                                                                                                                                                             nt $3}'`"
        echo "系统语言:`echo $LANG |awk -F "." '{print $1}'`"
        echo "系统编码:`echo $LANG |awk -F "." '{print $2}'`"
        echo "当前时间:`date +%F_%T`"
        echo "启动时间:`who -b | awk '{print $3,$4}'`"
        echo "运行时间:`uptime | awk '{print $3 " " $4}' | sed 's/,//g'`"
        }

cpu_Info(){
        echo "CPU架构:`uname -m`"
        echo "CPU型号:`cat /proc/cpuinfo | grep "model name" | uniq|awk -F":" '                                                                                                                                                             {print $2}'`"
#        echo "CPU数量:`cat /proc/cpuinfo | grep "physical id"|sort|uniq|wc -l`                                                                                                                                                              颗"
 #       echo "CPU核心:`cat /proc/cpuinfo | grep "cpu cores"|sort|uniq|awk -F "                                                                                                                                                             :" '{print $2}'` 核"
        echo "CPU线程:`cat /proc/cpuinfo | grep "processor" | awk '{print $3}'                                                                                                                                                              | sort | uniq | wc -l` 线程"

        }

cpu_Check(){
        Check_Res=`sar -u 1 5 |grep Average`
        echo "CPU用户占比:`echo $Check_Res|awk '{printf $3}'`%"
        echo "CPU内核占比:`echo $Check_Res|awk '{printf $5}'`%"
        echo "ResCheck_CPURate:`echo $Check_Res|awk '{printf $3+$5}'`%"
        echo "CPU可用占比:`echo $Check_Res|awk '{printf $8}'`%"
        }


mem_check(){
        free_total=`free -m | grep Mem|awk '{printf $2}'`
        free_used=`free -m | grep -v Swap|awk 'END{printf $3}'`
        #free_available=`free -m | grep Mem|awk '{printf $4}'`
        #used_baifen=`echo "scale=2;$free_used/$free_total*100"|bc`
        echo "内存合计:`free -g | awk "NR==2"| awk '{print $2}'` GB "
        echo "内存used:`free -g | grep -v Swap | awk 'END{print $3}'` GB"
        #echo "内存buff/cache:`free -g | awk "NR==2"| awk '{print $6}'` GB"
        #echo "内存使用:`free -m | awk "NR==2"| awk '{printf ("%.2f
", ($3+$6)                                                                                                                                                             /1024)}'` GB 占比 `echo "scale=2;$free_used/$free_total*100"|bc`%"
        echo "ResCheck_MemRate: `echo "scale=2;($free_used/$free_total)*100"|bc                                                                                                                                                             `%"
        # echo "内存使用:`free -mh | awk "NR==2"| awk '{print $3+$6}'` G占比 `e                                                                                                                                                             cho "scale=2;$free_used/$free_total*100"|bc`%"
        #echo "内存可用:`free -g | awk "NR==2"| awk '{print $4}'` GB 占比 `echo                                                                                                                                                              "scale=2;$free_available/$free_total*100"|bc`% "
        #echo "内存可用:`free -g | awk "NR==2"| awk '{print $4}'` GB 占比 `echo                                                                                                                                                              "scale=2;$free_available/$free_total*100"|bc`% "
        }

disk_Check(){

        echo "`df -h | sort |grep -E "/sd|/mapper" |awk '{print "ResCheck_DiskRa                                                                                                                                                             te:分区" $1  ," 合 计"$2" 已用" $3 " 剩余"$4 " 使用占比 " $5}'`"

       # echo "`df -h | sort |grep /sd |awk '{print "ResCheck_DiskRate:分区" $1                                                                                                                                                               ," 合计"$2" 已用" $3 " 剩余"$4 " 使用占比 " $5}'`"
        }

ip_Addr(){

        echo "`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6 |awk -F " "                                                                                                                                                              'BEGIN {count=0} {count=count+1; print "IP地址" count ":" $2}'`"
}



sys_check
cpu_Info
cpu_Check
mem_check
disk_Check
ip_Addr

执行效果如图:

**2、服务器端口检查** 点击查看代码
port_Check(){
#        local service_port=50456
        service_port=$1
        Temp_S=`netstat -naut| grep -v tcp6 |grep "0.0.0.0:$service_port "`
        if [ -z "$Temp_S" ]; then
                echo "ResCheck_Port:$service_port  Unknown"
        fi

        if [ -n "$Temp_S" ]; then
                #echo `echo $Temp_S|awk '{  print "ResCheck_Port:" service_port " " $6}' service_port=$service_port `
                echo "ResCheck_Port:$service_port  LISTEN"
        fi


}
port_Check $1

效果图:

**3、检查远程主机端口状态**点击查看代码
[root@hfeboasmg01 script]# cat remotePort_check.sh
remotePort_Check(){
#        local service_port=50456
        Host=$1
        Port=$2
        #Temp_S=`netstat -naut| grep -v tcp6 |grep "0.0.0.0:$service_port "`
        #nc -z -v -w 5 $Host $Port &> /dev/null
        nc -z -v -w 5 $Host $Port
        res=$?
        #Do whatever you want

        if [ $res -eq 0 ]; then
                echo ResCheck_remotePort: port $Port on $Host is open
        else
                echo ResCheck_Port:port $Port on $Host is closed
        fi
        }
remotePort_Check $1 $2

效果图: ![](https://img2020.cnblogs.com/blog/1326813/202110/1326813-20211012190003265-2129476964.png) 备注:上图时一个错误示范,需要nc 的支持,但不影响说明。
**4、服务状态检查**点击查看代码
service_Check(){
        #返回服务状态

        service_name=$1
        #local service_name="sshd"
        echo `systemctl  status $service_name |grep Active |awk '{print "ResCheck_Service:" service_name " " $2}' service_name=$service_name`
        }


service_Check $1
~

效果图: ![](https://img2020.cnblogs.com/blog/1326813/202110/1326813-20211012190312285-294882904.png)
**5、网站可用性检查** 点击查看代码
url_Check(){
        #通过端口的返回值判断状态

        url_path=$1

        #local url_path="https://asts.cxmt.com:8080"
        #echo `curl -k -s --head $url_path |awk 'NR==1 {print "ResCheck_URL:" url_path " "$2$3}' url_path=$url_path`
        url_checkRes=`curl  --connect-timeout 3 -k -s --head $url_path`
        if [ "$url_checkRes" ]; then
              echo `curl -k -s --head $url_path |awk 'NR==1 {print "ResCheck_URL:" url_path " "$2$3}' url_path=$url_path`
        else
              echo "ResCheck_URL:$url_path  Unreachable "
        fi
        }

url_Check $1

效果图:

至此,linux 平台的几个巡检脚本基本完成了

原文地址:https://www.cnblogs.com/vmsky/p/15399126.html