Linux系统配置检查脚本

 事情的原委:统计记录机房服务器资源配置等信息,由于没有监控系统,当时就是很繁琐的使用Linux命令查看记录,这导致浪费大量时间浪费在这种繁琐的工作上,时间就是金钱,为了避免以后有类似的事情发生,利用空闲时间把这个脚本写出来了,主要用于查看Linux服务器当前配置以及资源使用情况,有同样需求的小伙伴建议直接拿去复用!!

还实现了输出系统当前占有内存、CPU 最高的Top10信息 方便运维人员判断进程是否正常,每执行一次会打印结果并输出到日志文件中。
内存使用率是使用bc命令计算的 要保证系统已经有bc命令了。

[root@haimati shell]# cat polling.sh 
#!/bin/bash
<< Comment
作者: 秦子腾
邮箱: qinziteng05@163.com
日期: 2022-5-14 18:35
Comment

clear
LogFileName=polling.$(date +%F-%T)
EchoFormat=$(for (( i=0;i<30;i++ ));do echo -n "=";done)
# 系统信息
SystemInfo(){
printf "${EchoFormat} 系统信息 ${EchoFormat}\n"
printf "系统类型: %-10s\n" $(uname -a| awk '{print $NF}')
printf "发行版本: %-10s\n" "$(cat /etc/redhat-release)"
printf "内核信息: %-10s\n" $(uname -r)
printf "主机名称: %-10s\n" $(uname -n)
printf "语言编码: %-10s\n" ${LANG}
printf "当前系统时间: %-10s %-10s\n" $(date +%F) $(date +%T)
printf "当前系统负载: %-4s %-1s\n" $(uptime | awk -F: '{print $5 }'|awk -F, '{print $1,"%"}')
printf "系统运行天数: %-10s\n" $(uptime |awk '{print $3}')
printf "当前在线用户数量: %-3s\n" $(w|tail -n +3|wc -l)
printf "SELinux : %-10s\n" $(grep "SELINUX=[d|e|p]" /etc/selinux/config |awk -F= '{print $2}')
}

# CPU信息
CpuInfo(){
MemonyId=$(top -b -n1|awk 'NR==3'|awk -F, '{print $4}'| cut -c 1-5)
MemonyUse=$(echo "100-${MemonyId}" |bc)
printf "${EchoFormat} CPU信息 ${EchoFormat}\n"
printf "逻辑CPU核数: %-3s\n" $(grep "processor" /proc/cpuinfo|sort -u|wc -l)
printf "物理CPU核数: %-3s\n" $(grep "physical id" /proc/cpuinfo |sort -u|wc -l)
printf "CPU架构: %-3s\n" $(uname -m)
printf "CPU设置型号: %-3s\n" "$(grep "model name" /proc/cpuinfo |awk -F: '{print $2}'|sort -u|cut -c 2-50)"
printf "使用CPU占比: %-1s %-1s\n" ${MemonyUse} %
printf "空闲CPU占比: %-1s %-1s\n" ${MemonyId} %
printf "占用CPU Top10信息:\n\n"
ps -eo user,pid,pcpu,pmem,args --sort=-pcpu  |head -n 10
}

# Memory信息
MemoryInfo(){
printf "${EchoFormat} 内存信息 ${EchoFormat}\n"
printf "总共内存: %-1s\n" $(free -mh|awk "NR==2"|awk '{print $2}')
printf "使用内存: %-1s\n" $(free -mh|awk "NR==2"|awk '{print $3}')
printf "剩余内存: %-1s\n" $(free -mh|awk "NR==2"|awk '{print $4}')
printf "内存使用占比: %-1s %-1s\n" $(free | grep -i mem |awk '{print $6/$2*100}'|cut -c1-5) %
printf "占用内存 Top10信息:\n\n"
ps -eo user,pid,pcpu,pmem,args --sort=-pmem  |head -n 10
}

# Swap信息
SwapInfo(){
printf "${EchoFormat} Swap信息 ${EchoFormat}\n"
printf "总共Swap: %-1s\n" $(free -mh|awk "NR==3"|awk '{print $2}')
printf "已使用Swap: %-1s\n" $(free -mh|awk "NR==3"|awk '{print $3}')
printf "剩余Swap: %-1s\n" $(free -mh|awk "NR==3"|awk '{print $4}')
}

# 网络信息
NetworkInfo(){
printf "${EchoFormat} 网络信息 ${EchoFormat}\n"
printf "IP地址: %-1s %-1s %-1s %-1s\n" $(ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:")
printf "网关: %-1s %-1s %-1s %-1s\n" $(ifconfig -a|grep "netmask"|grep -v 127.0.0.1|awk '{print $4}') 
printf "DNS: %-1s %-1s %-1s %-1s %-1s\n" $(grep "nameserver" /etc/resolv.conf | awk '{print $2}')
if (ping -c2 -w2 www.baidu.com &>/dev/null);then
	printf "网络连通性: %s\n" YES
else
	printf "网络连通性: %s\n" NO
fi

printf "路由表信息:\n\n"
route -n|tail -n +2
}

All(){
SystemInfo 
CpuInfo
MemoryInfo
SwapInfo
NetworkInfo
}
All >${LogFileName};less ${LogFileName}

最后实现效果:

优化:
1、可以做个计划任务每天自动执行,记录当前系统信息;
2、实现每天将巡检结果 发邮件到运维人员邮箱;

posted @ 2022-05-14 20:03  乱七八糟博客备份  阅读(410)  评论(0编辑  收藏  举报