Shell学习(告警系统配置文件,告警系统监控项目,告警系统邮件引擎(上,中,下),运行告警系统)-2018.12.28

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     #进入目录,执行主程序,写完后保存




猜你喜欢

转载自blog.csdn.net/Chauncey_Qin/article/details/85319406