21.告警系统配置文件
mon.conf内容 #名称不可随意改动,放置于conf文件中
## to config the options if to monitor
## 定义mysql的服务器地址、端口以及user、password
to_mon_cdb=0 ##0 or 1, default 0,0 not monitor, 1 monitor #是否要监控cdb,执行为1,不执行为0
db_ip=10.20.3.13
db_port=3315
db_user=username
db_pass=passwd
## httpd 如果是1则监控,为0不监控
to_mon_httpd=0
## php 如果是1则监控,为0不监控
to_mon_php_socket=0
## http_code_502 需要定义访问日志的路径
to_mon_502=1
logfile=/data/log/xxx.xxx.com/access.log #过滤对象,对那个日志进行操作
## request_count 定义日志路径以及域名
to_mon_request_count=0 #请求数,监控为1,不监控为0
req_log=/data/log/www.discuz.net/access.log
domainname=www.discuz.net
22.告警系统监控项目
load.sh内容 #该文将放置在shares文件中
#!/bin/bash
##Writen by aming##
load=`uptime | awk -F 'average:''{print $2}'|cut -d','-f1|sed's/ //g'|cut -d. -f1`
if [ $load -gt 20 ] && [ $send -eq "1" ] #send是主脚本中定义的发送邮件的主开关
then
echo "$addr `date+%T`load is $load">../log/load.tmp #
/bin/bash../mail/mail.sh $addr\_load $load ../log/load.tmp
fi
echo "`date+%T` load is $load"
502.sh内容 #502涉及到访问日志,访问日志涉及到时间在之前的一分钟以内有多少个502,当多少个502时发送邮件
#! /bin/bash
d=`date -d "-1 min" +%H:%M`
c_502=`grep :$d: $log |grep ' 502 '|wc -l`
if [ $c_502 -gt 10 ] && [ $send == 1 ]; then
echo "$addr $d 502 count is $c_502">../log/502.tmp
/bin/bash ../mail/mail.sh $addr\_502 $c_502 ../log/502.tmp
fi
echo "`date +%T` 502 $c_502"
disk.sh内容 #监控磁盘的使用率
#! /bin/bash
##Writen by aming##
rm -f ../log/disk.tmp #也可以定义变量为英文LANG=en
for r in `df -h |awk -F '[ %]+' '{print $5}'|grep -v Use` #awk使用分割符是,可以使用多个字符作为分割符
do
if [ $r -gt 90 ] && [ $send -eq "1" ]
then
echo "$addr `date +%T` disk useage is $r" >>../log/disk.tmp
fi
if [ -f ../log/disk.tmp ]
then
df -h >> ../log/disk.tmp
/bin/bash ../mail/mail.sh $addr\_disk $r ../log/disk.tmp
echo "`date +%T` disk useage is nook"
[root@Chauncey ~]# awk -F 'openss' '{print $2}' yum.log.bak
h-5.3p1-123.el6_9.x86_64
h-clients-5.3p1-123.el6_9.x86_64
h-server-5.3p1-123.el6_9.x86_64
[root@Chauncey ~]#
else
echo "`date +%T` disk useage is ok"
fi
23.告警系统邮件引擎(上)
mail.sh的作用在于
mail.sh内容 //其中mail.py内容到这里下载https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail.py
log=$1 #第一次执行该脚本,$1指502中定义的第一个参数
t_s=`date +%s` #当前时间的时间戳
t_s2=`date -d "2 hours ago" +%s` #两个小时之前的时间戳,为了让下边的脚本执行
if [ ! -f /tmp/$log ] #如果日志不存在就生成日志,将两个小时之前的时间戳写入该文件
then
echo $t_s2 > /tmp/$log
fi
t_s2=`tail -1 /tmp/$log|awk '{print $1}'` #最后一样写入时间戳,第二次执行时时上一小时的时间戳
echo $t_s>>/tmp/$log
v=$[$t_s-$t_s2] #两个时间戳的比值差
echo $v
if [ $v -gt 3600 ] #大于一个小时
then
./mail.py $1 $2 $3 #告警
echo "0" > /tmp/$log.txt #执行计数器,写入日志
else
if [ ! -f /tmp/$log.txt ] #如果小于3600执行以下部分,如果不存在写入数子0
then
echo "0" > /tmp/$log.txt
fi
nu=`cat /tmp/$log.txt`
nu2=$[$nu+1] #该日志的目的在于计数,记录告警次数
echo $nu2>/tmp/$log.txt #将计数器的数值写入文件
if [ $nu2 -gt 10 ]
then
./mail.py $1 "trouble continue 10 min $2" "$3"
echo "0" > /tmp/$log.txt
fi
fi
#每个子监控项目都会有两个日志文件,一个记录时间戳,一个记录计数器
26.运行告警系统
在/usr/loacal/sbin/mon/mail
* * * * * * cd /usr/local/sbin/mon/bin; bash main.sh #进入目录,执行主程序,写完后保存