线上使用zabbix报警脚本(含图片)
生活随笔
收集整理的這篇文章主要介紹了
线上使用zabbix报警脚本(含图片)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
分享一個線上使用的自定義zabbix報警腳本,腳本思路大致如下:
????1.使用爬蟲獲取報警圖片(前提是要獲得報警的item)
????2.將圖片與郵件內容整合
????3.發送郵件
????4.日志記錄
腳本內容如下:
#!/usr/bin/python #coding:utf-8import?sys,time,re,os,glob import?smtplib from?email.mime.text?import?MIMEText from?email.mime.p_w_picpath?import?MIMEImage from?email.mime.multipart?import?MIMEMultipart import?urllib,urllib2,cookielib import?zlibmail_host?=?'************'????????????#?郵件發送方相關信息 mail_user?=?'************' mail_pass?=?'************' mail_postfix?=?'************'zabbix_user?=?"********"????????????#?zabbix-web相關信息 zabbix_pass?=?"********" url?=?"http://***********/" alartscript_path="/**********/alertscripts/"????????#?郵件腳本及日志位置 line?=?"ItemID"me?=?"zabbix"+'<'+mail_user+'>'#########?利用爬蟲獲取圖片,保證cookie的可用性 def?get_graph(itemID):login_url?=?url?+?"index.php"post_value?=?{"request":"","name":zabbix_user,"password":zabbix_pass,"autologin":"1",????????????????#注意這個是否記住密碼的選項,將造成生成的cookie長度不一樣,短的能查看到圖但沒有數據"enter":"Sign?in"}post_data?=?urllib.urlencode(post_value)headers?=?{"User-Agent":"Mozilla/5.0?(Windows?NT?10.0;?WOW64;?rv:43.0)?Gecko/20100101?Firefox/43.0","Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Encoding":"gzip,?deflate","Accept-Language":"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3","Connection":"Keep-Alive","Host":"**************","Referer":login_url,###########這個cookie很重要,要求當前cookie正在瀏覽器上正常使用,才能順利取圖"Cookie":"********?zbx_sessionid=*********"}request?=?urllib2.Request(login_url,post_data,headers)cj?=?cookielib.CookieJar()opener?=?urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))urllib2.install_opener(opener)result?=?opener.open(request)print?result.info()??????????????????????????????????????????????#查看下內容信息,如果是gzip要解壓寫入文件result_html?=?zlib.decompress(result.read(),?16+zlib.MAX_WBITS)global?graph_url????????????????????????????#?構建用于訪問圖片的URLgraph_url?=?url+"chart.php"+"?itemids="+str(itemID)graph_data?=?urllib2.urlopen(graph_url)print?graph_data.info()#.get('Content-Encoding')#graph_html?=?zlib.decompress(graph_data.read(),?16+zlib.MAX_WBITS)print?graph_data.info().get('Content-Type')p_w_picpath_data?=?graph_data.read()if?graph_data.info().get('Content-Type')?==?"p_w_picpath/png":p_w_picpath_file?=?open('last_%s.pnj'%itemID,'wb')p_w_picpath_file.write(p_w_picpath_data)p_w_picpath_file.close()else:trigged?=?open('zabbix.png','rb')????????????#?如果獲取圖片data失敗,打開一張事先準備好的圖,這里使用的是zabbix的logo,在郵件中很直接的反應出獲取圖片失敗p_w_picpath_data?=?trigged.read()trigged.close()print?"Graph_URL:",graph_urlreturn?p_w_picpath_datadef?mail_con(txtData,p_w_picpathData):????????????????????#?重寫郵件內容(添加圖片)msg?=?MIMEMultipart('related')msg['Subject']?=?subjectmsg['From']?=?memsg['to']?=?receivercon_txt?=?MIMEText(txtData,_subtype='html',_charset='utf-8')msg.attach(con_txt)con_img?=?MIMEImage(p_w_picpathData)con_img.add_header('Content-ID','digglife')????????#?將要發送的圖片嵌入到郵件頭部,重寫郵件內容msg.attach(con_img)return?msg.as_string()def?send_mail(receiver,subject,contents):????????????????#?郵件發送,并將結果記錄logfile?=?open('alarm_mail.log','a')try:s?=?smtplib.SMTP()s.connect(mail_host)s.login(mail_user,mail_pass)s.sendmail(me,receiver,contents)s.close()log?=?time.ctime()?+?"\tOK\t"?+?subject?+"\t"+?receiver?+?"\n"except?Exception,e:log?=?time.ctime()?+?"\tFail\t"?+?subject?+"\t"+?receiver?+?"\n"logfile.write("\n"+"\t"+graph_url+"\n")logfile.write(log)logfile.close()if?__name__?==?"__main__":cur_pwd?=?os.getcwd()print?cur_pwdos.chdir(alartscript_path)????????????????#?zabbix-server工作的路徑為/,在這里切換郵件腳本路徑,可以寫入日志和圖片處理,減少出錯old_pnjs?=?glob.glob('last_*.pnj')for?old_file?in?old_pnjs:os.remove(old_file)receiver?=?sys.argv[1]subject?=?sys.argv[2]src_mail_con?=?sys.argv[3]try:ItemID?=?re.match(r'.*ItemID:(\d+)[^\d]+.*',src_mail_con.replace('\n',''),re.S).group(1)????????#?利用正則從郵件內容中獲取itemIDexcept:ItemID?=?0000????????????????#?item為0000的是一張空圖,減少異常情況print?"ItemID:",ItemIDImageData?=?get_graph(ItemID)MailCon?=?mail_con(src_mail_con,ImageData)send_mail(receiver,subject,MailCon)腳本中‘********’部分出于個人信息安全進行隱藏,讀者可根據具體環境修改(發件箱信息,zabbix-web登陸信息及cookie)
腳本首先要獲得報警itemID,以及郵件內容放置圖片信息,因此還要自定義報警郵件內容,如下:
?郵件內容: ?
????<body>故障通知<br/>觸發器:?{TRIGGER.NAME}<br/>主機名:{HOST.NAME}({IPADDRESS})<br/>狀態:?{TRIGGER.STATUS}<br/>告警級別:?{TRIGGER.SEVERITY}<br/>URL:?{TRIGGER.URL}<br/><br/>告警項目:<br/><br/>{ITEM.NAME1}?({HOST.NAME1}:{ITEM.KEY1}):?{ITEM.VALUE1}<br/><br/><div?style="line-height:1.7;color:#000000;font-size:14px;font-family:Arial"><img?src="cid:digglife"?orgwidth="1016"?orgheight="376"?data-p_w_picpath="1"?style="width:?780px;?height:?288px;"></div>ItemID:{ITEM.ID}<br/>EventID:?{EVENT.ID}<br/>告警時間:{EVENT.DATE}?{EVENT.TIME}?<br/><br/>詳細信息:<a?href="http://*******/history.php?action=showgraph&itemids[]={ITEM.ID}"?target="_blank">登錄查看</a><br/></body>效果如下:
????QQ郵箱接收郵件,顯示內容:
????日志記錄:
轉載于:https://blog.51cto.com/11424123/1771220
總結
以上是生活随笔為你收集整理的线上使用zabbix报警脚本(含图片)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第14课:Spark RDD解密
- 下一篇: 路由器学习之静态路由实验