Linux(三十二) 针对LINUX服务器的指标监控脚本编写

Posted 云来云去-起飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux(三十二) 针对LINUX服务器的指标监控脚本编写相关的知识,希望对你有一定的参考价值。

目录

 

一、编写思路

1.1.了解需求

1.2.构建代码框架

1.3.获取指标信息

      1.3.1.健康运行时长

      1.3.2.cpu利用率

      1.3.3.内存利用率

      1.3.4.磁盘已使用率

1.4.技术难点攻关

1.5.成品展示

二、代码编写步骤及解析

三、效果展示


一、编写思路

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服务器的指标监控脚本编写的主要内容,如果未能解决你的问题,请参考以下文章

LINUX随笔三十二 linux获取文件创建时间

Linux学习(三十二)screen

第三十二课 linux内核链表剖析

Linux学习总结(三十二)lamp之php安装

学习三十二

Linux学习笔记(三十二)iptables filter表案例 iptables nat表应用