一个Linux主机巡检脚本

功能:

        对Linux主机的物理资源消耗进行监测和统计,对运行在本机上的服务进程进行监测和统计,列出本机上的账户有效期

使用场景:

       在没有 Promethes、zabbix、夜莺等监控工具的条件下,通过 crontab 排程应用本程序完成对主机上的关键信息的采集和输出,一遍分析当前主机的物理资源与业务程序的运行状态。

**************************************************************************************************************

#!/bin/bash
echo "################################################### README INFO ##############################################################"
echo "### Purpose: Carrying Out A Routine Inspection & Monitoring the Program Running-Status and the Consumed Hardware Resource  ###"
echo "### Made By: PomanTeng                                                                                                     ###"
echo "### E-mail: [email protected]                                                                                       ###"
echo "### WeChat: 1807479153                                                                                                     ###"
echo "### Version Identification Number:V2.1.0                                                                                   ###"
echo "### Procedure Identification Number:20230916                                                                               ###"
echo "##############################################################################################################################"

# Check the current OS user

[[ $(id -u) -gt 0 ]] && echo "请用root用户执行此脚本!" && exit 1

source /etc/profile

source ~/.bash_profile

echo "     "
echo -e "现在时刻 :\n \n $(date)"
echo "     "

echo "     "
echo "当前OS及其依托的基础设备类型 :"
echo "     "
cat /etc/*release* | awk '/release/' | uniq
echo "     "
hostnamectl | awk '/Chassis|Virtualization/'
echo "     "

# Defining the Manufacturer-Variables

manufacturer=$(dmidecode -s system-manufacturer)

productName=$(dmidecode -s system-product-name)

productSN=$(dmidecode -s system-serial-number)

biosVendor=$(dmidecode -s bios-vendor)

biosVersion=$(dmidecode -s bios-version)

cpuSpecification=$(dmidecode -s processor-version | uniq)

# Defining Variable "sysversion"


sysversion=$(cat /etc/*release* | grep "release" | uniq)

# Defining the Metric-Variables

cpuTop50=$(ps -aux | head -n 1 | awk -F " " -v OFS='     ' '{print $2,$3,$11}' ; ps -aux | sort -k3nr | head -n 50 | awk -F " " -v OFS='     ' '{print $2,$3,$11}')

memTop50=$(ps -aux | head -n 1 | awk -F " " -v OFS='     ' '{print $2,$4,$11}' ; ps -aux | sort -k4nr | head -n 50 | awk -F " " -v OFS='     ' '{print $2,$4,$11}')

cpuConsumedTotal=`ps -aux | head -n 1 | awk -F " " '{print $3}' ; ps -aux | awk '{sum+=$3}END{print sum}'`

rootUsed=$(df | awk '$NF=="/" {var=$3}END{print var/1024/1024" GB"}')

rootRemain=$(df | awk '$NF=="/" {var=$4}END{print var/1024/1024" GB"}')

rootPercent=$(df | awk '$NF=="/" {print $5}')

dataUsed=$(df | awk '$NF=="/app" {var=$3}END{print var/1024/1024" GB"}')

dataRemain=$(df | awk '$NF=="/app" {var=$4}END{print var/1024/1024" GB"}')

dataPercent=$(df | awk '$NF=="/app" {print $5}')

bondRX=$(ifconfig | grep -A 8 "bond1" | grep "RX packets")

bondTX=$(ifconfig | grep -A 8 "bond1" | grep "TX packets")

sysLoad=$(top | head -n 5)

vmstatLoad=$(vmstat -wt)

memUsed=$(free -h | awk -F " " '{print $3}' | awk -F " " 'NR==2')

memRemain=$(free -h | awk -F " " '{print $7}' | awk -F " " 'NR==2')

swapUsed=$(free -h | awk -F " " '{print $3}' | awk -F " " 'NR==3')

swapRemain=$(free -h | awk -F " " '{print $4}' | awk -F " " 'NR==3')

localIP=$(ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}' | awk 'NR==1')


listeningPortProgram=$(netstat -tlunp | awk -F " " 'NR == 1 {next} {print $0}')

portList=$(netstat -tlunp -e | awk -F " " 'NR==1 {next} {print $0}' | awk -F " " '{print $4}' | awk -F ":" '{print $NF}')


netstat -tlunp -e | awk -F " " 'NR==1 {next} {print $0}' | awk -F " " '{print $4}' | awk -F ":" '{print $NF}' | awk -F " " 'NR==1 {next} {print $0}' > ./portList.txt

# Defining the Function "get_Port-Program" to get the port and the corresponding program

get_Port_Program(){

                    cat ./portList.txt | while read lines

                                           do
                                                for var in "$lines"
                                                    do
                                                         echo "&&&&& Separator BEGIN &&&&&"

                                                         echo -e "Current Port is : " $var
                                                         
                                                        
                                                         echo -e "PID and Program is : " pwdx $(lsof -i:$var | awk '/LISTEN?/' | awk -F " " '{print $2}' | uniq)

                                                         echo "&&&&& Separator END &&&&&"
                                                       
                                                    done
                                             done

}

####################################################################################################################################################################################################

# Defining the Function "excute_Main" to get the Routine Inspection-Result

excute_Main(){

    cat << EOF

设备制造商:
    ${manufacturer}

设备供货型号:
    ${productName}

设备供货序列号:
    ${productSN}

BIOS制造商:
    ${biosVendor}

BIOS版本号:
    ${biosVersion}

板载CPU规格:
    ${cpuSpecification}

操作系统版本:
    ${sysversion}

当前主机的 Local IP:
    ${localIP}

CPU消耗总计:
    ${cpuConsumedTotal}

CPU消耗前50的程序:
    ${cpuTop50}

内存消耗前50的程序:
    ${memTop50}

内存消耗使用量:
    ${memUsed}

内存消耗剩余量:
    ${memRemain}

交换空间消耗使用量:
    ${swapUsed}

交换空间消耗剩余量:
    ${swapRemain}

根分区的使用量:
    ${rootUsed}

根分区的剩余量:
    ${rootRemain}

根分区的使用百分比:
    ${rootPercent}

数据分区的使用量:
    ${dataUsed}

数据分区的剩余量:
    ${dataRemain}

数据分区的使用百分比:
    ${dataPercent}

Bond接收的数据量:
    ${bondRX}

Bond发送的数据量:
    ${bondTX}

操作系统负载:
    ${sysLoad}

    &&&&& Separator &&&&&

    ${vmstatLoad}

正在监听的服务:
    ${listeningPortProgram}

EOF

}

#########################################################################################################################################

# Execute Functions

excute_Main

rm -rf ./portList.txt

############################################################################################################################################

echo "***** 本机运行的业务程序 *****"
echo "     "

echo -e "`ps -ef | grep "tiance" | grep -v "grep" | awk '{ for(i=1; i<=7; i++){ $i="" }; print NR $0 }'`"
echo "     "

echo "***** 本机业务程序的端口状态 *****"
echo "     "

echo -e "$(ss -tlunp | grep "tiance"  | grep -v "grep" | awk -F " " '{print NR $5,$7}')"
echo "     "

####################################################################################################################################################

echo "***** 系统用户失效日期 *****"

echo "     "

cat /etc/passwd | awk -F ":" '{print $1}' | while read line; do echo "$line" && chage -l $line | grep "Password expires" --color=always ;done

echo "     "

exit

你可能感兴趣的:(linux,运维,服务器)