nagios基于客户端环境自动修改nrpe.cfg脚本
2014-01-17 02:08
471 查看
公司有个业务大概三十台左右的服务器,各个配置不同,有的是webserver,有的是mysqlserver,也有memcached,searchd(全文索引),通过nrpe监控每台服务器的基本信息,包含load、disk、网卡等等。
load是根据CPU的格式进行计算的,不同的服务器load告警阀值值跟据cpu个数改变。
disk根据不同服务器的磁盘分区进行监控。
网卡也是根据不同的工作模式进行监控,而且不同的服务器有不同个数的网卡。
对于服务的守护进程,也要通过nrpe来监控该进程是否仍在监听端口,另外对于mysql、memcached等缓存命中率,tps、qps等等需要另写脚本来监控。
现在这个脚本只是简单的修改nrpe.cfg配置文件,我会对其继续进行修改,让其自动生成nagios的监控配置文件。
load是根据CPU的格式进行计算的,不同的服务器load告警阀值值跟据cpu个数改变。
disk根据不同服务器的磁盘分区进行监控。
网卡也是根据不同的工作模式进行监控,而且不同的服务器有不同个数的网卡。
对于服务的守护进程,也要通过nrpe来监控该进程是否仍在监听端口,另外对于mysql、memcached等缓存命中率,tps、qps等等需要另写脚本来监控。
现在这个脚本只是简单的修改nrpe.cfg配置文件,我会对其继续进行修改,让其自动生成nagios的监控配置文件。
#!/bin/bash ###################################### #基于客户端系统环境自动生成告警的临界值 #包含网卡、CPU、磁盘、等等 #mail:jianye_jia@163.com #version 1.0 ############## ################ #加载基础算术函数 #math.sh ################# source ./math.sh ######################## #is_runing #判断一个进程是否存在 ####################### is_runing() { # for pid in $(/sbin/pidof "$1"); /sbin/pidof $1 >/dev/null; res=$?; if [ $res -eq 0 ];then echo 0; else echo 1; fi } WARNING=95 CRITICAL=105 DISKCAL=10240 scriptPath="/usr/local/nagios/libexec"; ############################## #提取网卡工作模式, #生成网卡告警信息 #目前对kvm虚拟机网卡信息不友好 ############################## function getNic() { allNicName=`ifconfig | grep HWaddr| awk '{print $1}'`; for nicName in `echo $allNicName` do nicSpeed=`ethtool $nicName| grep Speed | grep -o '[0-9]\+'`; if [ -z $nicSpeed ]; then continue; else sed -i "/check_$nicName/d" /usr/local/nagios/etc/nrpe.cfg; echo "command[check_$nicName]=$scriptPath/check_iftraffic.pl -i $nicName -w $WARNING -c $CRITICAL -b $nicSpeed -u m" >> /usr/local/nagios/etc/nrpe.cfg; fi done } #################### #提取CPU个数 #生成LOAD临界值 #################### function getLoad() { WARNING=90 CRITICAL=100 allCpuNumber=`cat /proc/cpuinfo | grep processor | wc -l`; warningNumber=`awk -v cpuNumber=$allCpuNumber -v warn=$WARNING 'BEGIN{printf "%.2f\n",cpuNumber*warn/100}' `; criticalNumber=`awk -v cpuNumber=$allCpuNumber -v critial=$CRITICAL 'BEGIN{printf "%.2f\n",cpuNumber*critial/100}' `; sed -i '/check_load/d' /usr/local/nagios/etc/nrpe.cfg; echo "command[check_load]=$scriptPath/check_load -w $warningNumber -c $criticalNumber" >> /usr/local/nagios/etc/nrpe.cfg; } #################### #提取磁盘个数 #生成每个DISK临界值 #################### function getDisk() { WARNING=8%; CRITICAL=5%; #去掉第一行,去掉挂载的文件系统,去掉tmpfs partionName=`df -m | grep -v "Filesystem "|grep -v "文件系统"|grep -v tmpfs| grep -v ":" | awk -v partionDISKCAL=$DISKCAL '{if ( $2 > partionDISKCAL ) {print $6} }'` ; #将所有大于10G的分区加入监控项中 sed -i '/check_disk/d' /usr/local/nagios/etc/nrpe.cfg; for pN in `echo $partionName` do echo "command[check_disk_$pN]=$scriptPath/check_disk -w $WARNING -c $CRITICAL -p $pN " >> /usr/local/nagios/etc/nrpe.cfg; done } ################### #提取进程信息 #生成服务监控项 ################### ##NGINX function getProc_nginx() { WARNING="3:5"; CRITICAL="1:10"; is_Nginx=`is_runing nginx`; if [ $is_Nginx -eq 1 ];then return; else sed -i '/check_nginx_proc/d' /usr/local/nagios/etc/nrpe.cfg; echo "command[check_nginx_proc]=$scriptPath/check_procs -w $WARNING -c $CRITICAL -a nginx" >> /usr/local/nagios/etc/nrpe.cfg; fi } ################################# #HTTPD #根据内存总量,单个httpd进程占用内存量 #来计算该服务器中可以承载多少httpd进程 #如果httpd进程占用CPU过多,也要告警 #################################### function getProc_httpd() { getMemory=`free -k | awk '/Mem/{print $2}'`; getSingleHttpdMemory=` ps aux | grep http | awk '$1~/apache|www|/{httpdTotalMemory+=$6}END{print httpdTotalMemory/NR}'`; getCriticalNumber=`awk -v tM=$getMemory -v sM=$getSingleHttpdMemory 'BEGIN{printf "%d",tM/sM/100*90}'`; getWarningNumber=`awk -v tM=$getMemory -v sM=$getSingleHttpdMemory 'BEGIN{printf "%d",tM/sM/100*82}'`; WARNING="10:$getWarningNumber"; CRITICAL="6:$getCriticalNumber"; is_Httpd=`is_runing httpd`; if [ $is_Httpd -eq 1 ];then return; else sed -i '/check_httpd_proc/d' /usr/local/nagios/etc/nrpe.cfg; echo "command[check_httpd_proc]=$scriptPath/check_procs -w $WARNING -c $CRITICAL -a httpd" >> /usr/local/nagios/etc/nrpe.cfg; fi } ############################## #查看是否存在memcached进程 #监控memcachd是否正常工作 #简单telnet ############################ function get_Memcached() { is_Memcached=`is_runing memcached`; echo $is_Memcached; if [ $is_Memcached -eq 1 ];then return; else for port in `netstat -ntlp | grep memcached |awk '{print $4}' | awk -F: '{print $2}' | sort -u` do echo "command[check_memcached_$port]=$scriptPath/check_tcp -H 127.0.0.1 -P $port" >> /usr/local/nagios/etc/nrpe.cfg; done fi } ############################## #查看是否存在mysql进程 #监控mysql是否正常工作 #简单telnet ############################ function get_Mysql() { is_Mysql=`is_runing mysql`; echo $is_Mysql; if [ $is_Mysql -eq 1 ];then return; else for port in `netstat -ntlp | grep mysql |awk '{print $4}' | awk -F: '{print $2}' | sort -u` do echo "command[check_mysql_$port]=$scriptPath/check_tcp -H 127.0.0.1 -P $port" >> /usr/local/nagios/etc/nrpe.cfg; done fi } ############################## #查看是否存在coreseek进程 #监控coreseek是否正常工作 #简单telnet ############################ function get_Coreseek() { is_Coreseek=`is_runing searchd`; echo $is_Coreseek; if [ $is_Coreseek -eq 1 ];then return; else for port in `netstat -ntlp | grep search |awk '{print $4}' | awk -F: '{print $2}' | sort -u` do echo "command[check_coreseek_$port]=$scriptPath/check_tcp -H 127.0.0.1 -P $port" >> /usr/local/nagios/etc/nrpe.cfg; done fi }
相关文章推荐
- 基于nagios的监控环境(二):nrpe监控远程机器
- nagios自动安装脚本(一个脚本实现服务端+客户端自动安装)
- 域环境客户端自动添加共享打印机脚本模板
- windows基于词典自动修改密码(vbs脚本)
- 自动安装脚本-------------基于LVMP搭建Nagios 监控
- ubuntu下自动配置android环境脚本
- 【安卓】数据库基于脚本的"增量更新",每次更新时不需修改java代码、!
- 用批处理网络映射驱动器后自动修改磁盘卷标名脚本
- 基于CSerialPort修改类的串口调试助手源代码(支持中文、自动保存等)
- windows环境下Oracle数据库的自动备份脚本
- 用Fabric自动推送nagios client脚本 推荐
- 搭建selenium java测试环境 use selenium IDE自动录制脚本
- MySQL数据库自动生成并修改随机root密码的脚本
- 【原创】自动修改IP的脚本
- 自动修改linux下/etc/sysconfig/network-scripts/ifcfg-ethX网卡文件的脚本
- tomcat+jenks环境自动部署脚本
- [精华] 利用SHELL脚本修改当前环境变量
- 用SHELL脚本自动化安装Nagios服务器端和客户端的