import
time,datetime
import
re,os
import
sys
import
zabbix_sendmail
from
zabbix_sendmail
import
SendmailError
import
subprocess
import
logging
from
logging.handlers
import
RotatingFileHandler
reload
(sys)
sys.setdefaultencoding(
'utf-8'
)
LOGFILE
=
"/apps/svr/zabbix_server/scripts/logs/out.log"
MAXLOGSIZE
=
100
*
1024
*
1024
BACKUPCOUNT
=
4
log
=
logging.getLogger(
'zabbix_exec_command'
)
log.setLevel(logging.DEBUG)
formatter
=
logging.Formatter(
'%(asctime)s - %(levelname)s: %(message)s'
)
fh
=
RotatingFileHandler(LOGFILE,maxBytes
=
MAXLOGSIZE,backupCount
=
BACKUPCOUNT)
ch
=
logging.StreamHandler()
fh.setFormatter(formatter)
ch.setFormatter(formatter)
log.addHandler(fh)
log.addHandler(ch)
def
get_2hour_ago():
a
=
os.popen(
"date +%Y%m%d%H -d '2 hours ago'"
).readlines()[
0
]
b
=
a.strip()
return
b
def
run_command(ip,command):
cmd
=
"zabbix_get -s "
+
ip
+
" -k 'system.run[\""
+
command
+
"\"]'"
return
os.popen(cmd).readlines()
mailcontent
=
""
if
__name__
=
=
"__main__"
:
to_list
=
[]
to_mobile
=
[]
if
len
(sys.argv) !
=
8
:
print
"show usage: %s serverip itemid itemname hostname itemkey itemvalue triggerstatus"
%
(sys.argv[
0
])
sys.exit(
1
)
mailcontent
=
ip,itemid,itemname,hostname
=
sys.argv[
1
],sys.argv[
2
],sys.argv[
3
],sys.argv[
4
]
itemkey,itemvalue,triggerstatus
=
str
(sys.argv[
5
]).replace(
" "
,"
"),str(sys.argv[6]).replace("
","
"),sys.argv[
7
]
log.info(
"报警信息:IP:%s,监控项:%s,主机名:%s,监控key:%s"
%
(ip,itemname,hostname,itemkey))
time_start
=
get_2hour_ago()
mailcontent
+
=
"<div class='divtd'> 监控项:%s , 主机名:%s ,IP:%s ,当前值: %s </div><br />"
%
(itemname,hostname,ip,itemvalue)
mailcontent
+
=
"<div class='divtd'>内存信息:</div> <div class='.body'>"
for
line
in
run_command(ip,
"free -m"
):
line
=
line.strip()
mailcontent
+
=
"%s<br />"
%
line
mailcontent
+
=
"<br /></div>"
mailcontent
+
=
"<div class='divtd'>IO信息:</div> <div class='.body'>"
for
line
in
run_command(ip,
"iostat -xn 1 1"
):
line
=
line.strip()
mailcontent
+
=
"%s<br />"
%
line
mailcontent
+
=
"<br /></div>"
mailcontent
+
=
"<div class='divtd'>负载信息:</div> <div class='.body'>"
for
line
in
run_command(ip,
"sar -q 1 3"
):
line
=
line.strip()
mailcontent
+
=
"%s<br />"
%
line
mailcontent
+
=
"<br /></div>"
mailcontent
+
=
"<div class='divtd'>CPU信息:</div> <div class='.body'>"
for
line
in
run_command(ip,
"mpstat -P ALL"
):
line
=
line.strip()
mailcontent
+
=
"%s<br />"
%
line
mailcontent
+
=
"<br /></div>"
mailcontent
+
=
"<div class='divtd'>系统日志:</div> <div class='.body'>"
for
line
in
run_command(ip,
"/usr/bin/sudo tail -20 /var/log/messages"
):
line
=
line.strip()
mailcontent
+
=
"%s<br />"
%
line
mailcontent
+
=
"<br /></div>"
to_list
=
[
"xxxx"
]
mailcontent
+
=
"<div class='divtd'>历史数据:</div> <div class='.body'>"
mailcontent
+
=
"<table style='border-collapse: collapse; width: 96%;'>"
mailcontent
+
=
%
(itemid,time_start)
mailcontent
+
=
"</tr> </table>"
mailcontent
+
=
print
mailcontent
log.debug(
"监控邮件内容:%s"
%
mailcontent)
log.info(
"邮件收件人:%s,短信收件人列表:%s"
%
(to_list,to_mobile))
mail_sub
=
"Zabbix监控报警|当前状态:%s,监控项:%s,监控主机:%s "
%
(triggerstatus,itemname,hostname)
log.info(
"开始发送邮件,邮件主题:%s"
%
mail_sub)
try
:
zabbix_sendmail.send_mail_withoutSSL(to_list,mail_sub,mailcontent)
log.info(
"报警邮件发送成功"
)
except
SendmailError,e:
log.error(
"报警邮件发送失败,失败信息:%s"
%
(
str
(e)))
网友评论