zabbix实现邮件报警--发送对应graph图片 推荐
2012-12-19 16:14
573 查看
由于最近在研究zabbix,学习python,于是就拿python练练手,写了下面这个脚本
脚本作用:发送tigger内容并附加发送tirgger所对应的graph
脚本思路:通过zabbix传递的"Default subject"取出触发的tirgger对应的主机host,以及对应的graphname,通过host和graphname在数据库中查询出所对应的graphid,之后通过graphid使用curl通过web页面下载对应graph的图片,最后将图片作为邮件内容发送出去。
脚本依赖:由于获取host和graphname依赖于zabbix传递的参数形式及内容,所以需要做如下设置
设置1:修改tirgger名字和graph名字对应,grap名字中不包含tirgger中所使用的宏,如:
tirgger名:Running processes on {HOST.NAME}
graph名:Running processes on
设置2:创建Actions时,"Default subject"和"Recovery subject"要设置为:"{HOST.NAME1} {TRIGGER.STATUS}: {TRIGGER.NAME}"
设置3:在zabbix上创建一个具有只读权限的用户,在zabbix数据库上创建一个具有查询权限的用户
脚本进度:由于个人技能还未达到一定的层次,该脚本在手动执行是正常的,但是在zabbix的Action触发调用时,却不能成功执行,希望有兴趣的朋友给我一些建议和指导,或者为我指出哪里考虑不周全导致的脚本不能正常执行。希望能够得到广大IT爱好者的帮助与建议。
感谢:VV http://www.178-go.com 提供的SQL语句帮助
邮件内容:
希望得到广大IT爱好者的建议与指导。
脚本作用:发送tigger内容并附加发送tirgger所对应的graph
脚本思路:通过zabbix传递的"Default subject"取出触发的tirgger对应的主机host,以及对应的graphname,通过host和graphname在数据库中查询出所对应的graphid,之后通过graphid使用curl通过web页面下载对应graph的图片,最后将图片作为邮件内容发送出去。
脚本依赖:由于获取host和graphname依赖于zabbix传递的参数形式及内容,所以需要做如下设置
设置1:修改tirgger名字和graph名字对应,grap名字中不包含tirgger中所使用的宏,如:
tirgger名:Running processes on {HOST.NAME}
graph名:Running processes on
设置2:创建Actions时,"Default subject"和"Recovery subject"要设置为:"{HOST.NAME1} {TRIGGER.STATUS}: {TRIGGER.NAME}"
设置3:在zabbix上创建一个具有只读权限的用户,在zabbix数据库上创建一个具有查询权限的用户
脚本进度:由于个人技能还未达到一定的层次,该脚本在手动执行是正常的,但是在zabbix的Action触发调用时,却不能成功执行,希望有兴趣的朋友给我一些建议和指导,或者为我指出哪里考虑不周全导致的脚本不能正常执行。希望能够得到广大IT爱好者的帮助与建议。
感谢:VV http://www.178-go.com 提供的SQL语句帮助
#!/usr/bin/python # # When: 2012/12/17 # Who: czlinux@163.com # import os,sys,smtplib,MySQLdb from email.MIMEMultipart import MIMEMultipart from email.MIMEText import MIMEText from email.MIMEImage import MIMEImage ###### Variable declaration hostname=os.popen('echo $HOSTNAME').read() mysql_server="127.0.0.1" mysql_user="scripts" mysql_pass="135246" db_name="zabbix" zabbix_url="XXXXXXXXXX" zabbix_user="XXXXX" zabbix_pass="XXXXXX" cookie="/tmp/cookie" image_path="/tmp/zabbix-graph/" Stime=os.popen('date +%Y%m%d%H%M%S').read().rstrip() Period=3600 Width=1222 mail_server="127.0.0.1" mail_port=25 mail_from="root"+"@"+"%s" % hostname.rstrip() tag = 0 ###### get Host def _getHost(Subject): Host = Subject.split(" ")[0] return Host ###### get Graphname def _getgraphname(Subject): tmp1 = Subject.split(" ") tmp2 = tmp1[2:-1] Graphname = " ".join(tmp2) return Graphname ###### get graphid by Graphname and Host def _getgraphid(Graphname,Host): db = MySQLdb.connect(mysql_server,mysql_user,mysql_pass,db_name) cursor = db.cursor() sql = "select graphs.graphid from hosts,items,graphs,graphs_items where hosts.host= '%s' and graphs.name = '%s' and hosts.hostid=items.hostid and items.itemid=graphs_items.itemid and graphs.graphid=graphs_items.graphid;" % (Host,Graphname) cursor.execute(sql) results = cursor.fetchall() db.close() for id in results: graphid = int(id[0]) return graphid ###### get graph using by curl def _getgraph(graphid): os.popen("""curl -c '%s' -b '%s' -d "request=&name='%s'&password='%s'&autologin=1&enter=Sign+in" '%s'/index.php""" % (cookie,cookie,zabbix_user,zabbix_pass,zabbix_url)) os.popen("""curl -b '%s' -F "graphid=%d" -F "period=%d" -F "stime='%s'" -F "width=%d" '%s'/chart2.php > '%s''%s''.png'""" % (cookie,graphid,Period,Stime,Width,zabbix_url,image_path,Stime)) image_name = '%s.png' % Stime return image_name ###### Creating email content def _content(Subject,body,mail_to,*img): msgRoot = MIMEMultipart() msgRoot['From'] = mail_from msgRoot['To'] = mail_to msgRoot['Subject'] = Subject msgText = MIMEText(body) msgRoot.attach(msgText) if tag == 0: image_path = img[0] image_name = img[1] f = open('%s%s' % (image_path,image_name),'rb') msgimg = MIMEImage(f.read()) f.close() msgimg.add_header('Content-Disposition', 'attachment', filename = image_name) msgRoot.attach(msgimg) return msgRoot ###### definition sendmail function def send_mail(mail_server,mail_port,mail_from,mail_to,content): mail=smtplib.SMTP(mail_server,mail_port) mail.sendmail(mail_from,mail_to,content) mail.quit() ###### definition main function def main(mail_to,Subject,body): Host = _getHost(Subject) if tag == 0: Graphname = _getgraphname(Subject) graphid = _getgraphid(Graphname,Host) image_name = _getgraph(graphid) msgRoot = _content(Subject,body,mail_to,image_path,image_name) else: msgRoot = _content(Subject,body,mail_to) send_mail(mail_server,mail_port,mail_from,mail_to,msgRoot.as_string()) if __name__ == "__main__": if "Zabbix agent" in Subject: tag = 1 main(sys.argv[1],sys.argv[2],sys.argv[3])
邮件内容:
希望得到广大IT爱好者的建议与指导。
相关文章推荐
- Python脚本通过邮件发送zabbix报警图片
- asp.net 实现发送邮件(根据国家读取对应国家语言的邮件内容)
- zabbix使用sendEmail实现邮件报警
- zabbix创建触发器、action,发送报警邮件
- 在 Laravel 5.1 中使用SMTP驱动实现邮件发送(含附件和图片)详细教程
- zabbix 配置发送邮件报警
- Zabbix使用msmtp+mutt发送邮件报警
- Spring实现邮件发送之添加附件、内嵌图片
- zabbix使用sendEmail实现邮件报警
- zabbix使用sendEmail实现邮件报警
- zabbix创建触发器、action,发送报警邮件
- 发送带嵌入图片邮件之SMTP实现和ESMTP实现
- zabbix报警发送邮件配置
- zabbix邮件报警发送至qq邮箱
- Zabbix利用msmtp+mutt发送邮件报警
- zabbix配置发送报警邮件
- zabbix使用sendEmail实现邮件报警
- zabbix使用sendEmail实现邮件报警
- zabbix创建触发器、action,发送报警邮件
- Zabbix使用外部邮箱服务器发送邮件报警