告警系统主脚本
vim main.
sh
#!/bin/
bash
# 是否发送邮件的开关
export send=
1 #定义在所有子脚本里
# 过滤ip地址
export addr=`/sbin/
ifconfig |
grep -A1
"ens33: "|
awk '/inet/ {print $2}'`
dir=`
pwd`
# 只需要最后一级目录名
last_dir=`
echo $
dir|
awk -F
'/' '{print $NF}'`
# 下面的判断目的是,保证执行脚本的时候,我们在bin目录里,不然监控脚本、邮件和日志很有可能找不到
if [ $last_dir ==
"bin" ] || [ $last_dir ==
"bin/" ];
then
conf_file=
"../conf/mon.conf"
else
echo "you shoud cd bin dir"
exit
fi
exec 1>>../log/mon.log
2>>../log/
err.log
echo "`date +"%F %T
"` load average"
/bin/bash ../shares/load.
sh
#先检查配置文件中是否需要监控502
if grep -q
'to_mon_502=1' $conf_file;
then
export log=`
grep 'logfile=' $conf_file |
awk -F
'=' '{print $2}' |
sed 's/ //g'`
/bin/bash ../shares/
502.
sh
fi
告警系统配置文件
vim ../conf/
mon.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
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
req_log=/data/log/www.discuz.net/
access.log
domainname=www.discuz.net
报警系统监控项目
vim /shares/load.
sh
#! /bin/
bash
load=`
uptime |
awk -F
'average:' '{print $2}'|
cut -d
',' -f1|
sed 's/ //g' |
cut -d. -
f1`
if [ $load -gt
10 ] && [ $send -eq
"1" ]
then
echo "$addr `date +%T` load is $load" >../log/
load.tmp
/bin/bash ../mail/mail.
sh aming_test@
163.com
"$addr\_load:$load" `
cat ../log/
load.tmp`
fi
echo "`date +%T` load is $load"
vim /shares/
502.
sh
#! /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"
vim /shares/disk.
sh
#! /bin/
bash
rm -f ../log/
disk.tmp
for r
in `
df -h |
awk -F
'[ %]+' '{print $5}'|
grep -
v Use`
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"
else
echo "`date +%T` disk useage is ok"
fi
告警系统核心
• mail.py
#!/usr/bin/
env python
#-*- coding: UTF-
8 -*-
import os,sys
reload(sys)
sys.setdefaultencoding('utf8')
import getopt
import smtplib
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from subprocess import *
def sendqqmail(username,password,mailfrom,mailto,subject,content):
gserver =
'smtp.qq.com'
gport =
25
try:
msg = MIMEText(unicode(content).encode(
'utf-8'))
msg['from'] =
mailfrom
msg['to'] =
mailto
msg['Reply-To'] =
mailfrom
msg['Subject'] =
subject
smtp =
smtplib.SMTP(gserver, gport)
smtp.set_debuglevel(0)
smtp.ehlo()
smtp.login(username,password)
smtp.sendmail(mailfrom, mailto, msg.as_string())
smtp.close()
except Exception,err:
print "Send mail failed. Error: %s" %
err
def main():
to=sys.argv[
1]
subject=sys.argv[
2]
content=sys.argv[
3]
##定义QQ邮箱的账号和密码
sendqqmail('1234567@qq.com',
'aaaaaaaaaa',
'1234567@qq.com',to,subject,content)
if __name__ ==
"__main__":
main()
#####脚本使用说明######
#1. 首先定义好脚本中的邮箱账号和密码
#2. 脚本执行命令为:python mail.py 目标邮箱
"邮件主题" "邮件内容"
• mail.sh内容
log=$
1
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 ]
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
执行告警系统
crontab -
e
* * * * * cd /usr/local/sbin/mon/bin; bash main.
sh
转载于:https://www.cnblogs.com/zhaocundang/p/8972105.html