Linux(三十二) 针对LINUX服务器的指标监控脚本编写
Posted 云来云去-起飞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux(三十二) 针对LINUX服务器的指标监控脚本编写相关的知识,希望对你有一定的参考价值。
目录
一、编写思路
1.1.了解需求
此次功能需求就是对LINUX服务器进行监控,以一台为采集服务端,对局域网内所有的linux设备进行采集监控,监控指标涉及系统运行状态、健康运行时长、CPU利用率、内存利用率等指标。
1.2.构建代码框架
代码的架构,此次按照函数进行分别编写,其中包括获取指标方法、服务器连接方法、邮箱发送方法等,最终以一个主要方法进行调用,增加代码的复用性和可读性。
1.3.获取指标信息
1.3.1.健康运行时长
[root@pxeserver ~]# uptime
14:26:50 up 1 day, 15:34, 3 users, load average: 1.22, 1.15, 0.66
1.3.2.cpu利用率
[root@pxeserver ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 667540 2116 2219396 0 0 3 2 58 3 0 2 97 0 0
1.3.3.内存利用率
[root@pxeserver ~]# free -m
total used free shared buff/cache available
Mem: 3699 882 646 112 2169 2368
Swap: 0 0 0
1.3.4.磁盘已使用率
[root@pxeserver ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda2 199G 12G 188G 6% /
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 109M 1.8G 6% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 1014M 174M 841M 18% /boot
tmpfs 370M 8.0K 370M 1% /run/user/42
tmpfs 370M 40K 370M 1% /run/user/0
/dev/sr0 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64
1.4.技术难点攻关
- 如何搭建采集服务器,同时采集多台服务器的相关指标?
- 如何命令查询中结果截取想要的指标信息?
- 如何将超过阈值的告警信息通过邮件方式发送给管理员?
1.5.成品展示
二、代码编写步骤及解析
第一步:
#定义需要采集的设备列表
arrList=('192.168.1.21' '192.168.1.22' '192.168.1.17' '192.168.1.12' '192.168.1.16' '192.168.1.20')
第二步:
#定义实时日志文件和历史日志文件,用于接收日志
[ -e /var/log/cpu.log ] || touch /var/log/cpu.log
[ -e /var/log/running.log ] || touch /var/log/running.log
[ -e /var/log/mem.log ] || touch /var/log/mem.log
[ -e /var/log/disk.log ] || touch /var/log/disk.log
[ -e /var/log/cpuO.log ] || touch /var/log/cpuO.log
[ -e /var/log/memO.log ] || touch /var/log/memO.log
[ -e /var/log/diskO.log ] || touch /var/log/diskO.log
第三步:
#定义对应指标的阈值
#CPU阈值
cpuMAX=70
#内存阈值
memMax=60
#磁盘空间阈值
diskMax=60
第四步:
#定义邮件发送函数
function mailsend(){
grep "18332222222" /etc/mail.rc &>/dev/null
if [ $? != 0 ];then
yum -y install mailx
echo -e -n "set bsdcompat \\n set from=18332288222@139.com \\n set smtp=smtp.139.com \\n set smtp-auth-user=1833222222@139.com \\n set smtp-auth-password=28690e86cfcbd89e9000 \\n set smtp-auth=login " >> /etc/mail.rc
fi
echo "目前值为$1"%",请注意维护" | mail -s " Ip:$2 $3超过阈值" 18332288915@139.com
echo "$3阈值告警:邮件发送完成"
}
第五:
#获取健康运行时长
function runningTime(){
running=`ssh root@$1 uptime | awk -F, '{print $1}' |awk 'BEGIN{FS="up"}{print $2}' ` #获取客户端的cpu值
echo "$running" | grep day
if [ $? = 0 ];then
running=`ssh root@$1 uptime | awk -F, '{print $2}' ` #获取客户端的cpu值
fi
pp=`echo "$running" | awk -F: '{print $1"小时"$2"分钟"}'`
runNamex="${pp}:$1"" "$runNamex #存放到CPU数组中格式方式如:IP:CPU值 |
echo "时间:$2 IP为:$1的服务器成功获取健康运行时长RUNNINGTIME值"
}
#cpu的监测 获取值
function cpuchek(){
varCpu=`ssh root@$1 vmstat | awk 'NR==3{print $13}'` #获取客户端的cpu值
varNamex="IP:$1:"${varCpu}" "$varNamex #存放到CPU数组中格式方式如:IP:CPU值 |
if [ $varCpu -ge $cpuMAX ];then
mailsend $varCpu $1 cpu #超出阈值将调用邮件发送方法通知
fi
echo "时间:$2 IP为:$1的服务器成功获取CPU值"
}
#内存值获取
function memchek(){
varl=`ssh root@$1 free -m | awk 'NR==2{print $3/$2}' | cut -f 2 -d "."` #获取客户端的内存值
varMem="${varl:0:2}" #通过${xx:1:2} 的字符截取方式进行
varMemN="IP:$1:"${varMem}" "$varMemN
if [ $varMem -ge $memMax ];then
mailsend $varMem $1 内存 #超出阈值将调用邮件发送方法通知
fi
echo "时间:$2 IP为:$1的服务器成功获取内存值"
}
#磁盘检测
function diskcheck(){
varl=`ssh root@$1 df -h | awk 'NR>=2{print $5,$6}' | awk -F[%," "] 'BEGIN{OFS="-"}{print $1,$3}'` #获取客户端的df -h的目录及已用大小
for ds in $varl
do
#echo $ds | awk -F- '{print $2}'
#echo $ds | awk -F- '{print $1}'
varName=`echo $ds | awk -F- '{print $2}'`
varValue=`echo $ds | awk -F- '{print $1}'`
if [ $varValue -ge $diskMax ];then
if [ $varName = '/run/media/root/CentOS' ];then
continue
fi
mailsend $varValue $1 ${varName}":的挂载点" #超出阈值将调用邮件发送方法通知
fi
Datestart=`date "+%Y-%m-%d %H:%M:%S"`
echo "$Datestart IP:$1:$varName:$varValue" > /var/log/disk.log
echo "时间:$Datestart IP为:$1的服务器成功获取$varName的磁盘使用率"
done
}
第六步;
#开始监控所有设备
function Checks(){
echo -e "\\e[1;32m======>>>开始采集。。。。。\\e[0m"
for ((ipname=0;ipname<$arrlength;ipname++))
do
Datestart=`date "+%Y-%m-%d %H:%M:%S"`
cpuchek ${arrList[$ipname]} $Datestart
echo "$varNamex" > /var/log/cpu.log
echo "$Datestart $varNamex" >> /var/log/cpuO.log
Datestart=`date "+%Y-%m-%d %H:%M:%S"`
memchek ${arrList[$ipname]} $Datestart
echo "$varMemN" > /var/log/mem.log
echo "$Datestart $varMemN" >> /var/log/memO.log
diskcheck ${arrList[$ipname]}
Datestart=`date "+%Y-%m-%d %H:%M:%S"`
runningTime ${arrList[$ipname]} $Datestart
echo "$runNamex" > /var/log/running.log
done
echo -e "\\e[1;32m======>>>采集结束。。。。。\\e[0m"
}
三、效果展示
以上是关于Linux(三十二) 针对LINUX服务器的指标监控脚本编写的主要内容,如果未能解决你的问题,请参考以下文章