zabbix实现邮件报警--发送对应graph图片

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:
由于最近在研究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语句帮助
 

  
  
  1. #!/usr/bin/python 
  2. # 
  3. # When: 2012/12/17 
  4. # Who: czlinux@163.com 
  5. # 
  6.  
  7. import os,sys,smtplib,MySQLdb 
  8. from email.MIMEMultipart import MIMEMultipart 
  9. from email.MIMEText import MIMEText 
  10. from email.MIMEImage import MIMEImage 
  11.  
  12. ######  Variable declaration 
  13. hostname=os.popen('echo $HOSTNAME').read() 
  14.  
  15. mysql_server="127.0.0.1" 
  16. mysql_user="scripts" 
  17. mysql_pass="135246" 
  18. db_name="zabbix" 
  19.  
  20. zabbix_url="XXXXXXXXXX" 
  21. zabbix_user="XXXXX" 
  22. zabbix_pass="XXXXXX" 
  23.  
  24. cookie="/tmp/cookie" 
  25. image_path="/tmp/zabbix-graph/" 
  26. Stime=os.popen('date +%Y%m%d%H%M%S').read().rstrip() 
  27. Period=3600 
  28. Width=1222 
  29.  
  30. mail_server="127.0.0.1" 
  31. mail_port=25 
  32. mail_from="root"+"@"+"%s" % hostname.rstrip() 
  33.  
  34. tag = 0 
  35.  
  36. ###### get Host 
  37. def _getHost(Subject): 
  38.         Host = Subject.split(" ")[0
  39.         return Host 
  40.  
  41. ###### get Graphname 
  42. def _getgraphname(Subject): 
  43.         tmp1 = Subject.split(" "
  44.         tmp2 = tmp1[2:-1
  45.         Graphname = " ".join(tmp2) 
  46.         return Graphname 
  47.  
  48. ###### get graphid by Graphname and Host 
  49. def _getgraphid(Graphname,Host): 
  50.         db = MySQLdb.connect(mysql_server,mysql_user,mysql_pass,db_name) 
  51.         cursor = db.cursor() 
  52.         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) 
  53.         cursor.execute(sql) 
  54.         results = cursor.fetchall() 
  55.         db.close() 
  56.         for id in results: 
  57.                 graphid = int(id[0]) 
  58.         return graphid 
  59.  
  60. ###### get graph using by curl 
  61. def _getgraph(graphid): 
  62.         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)) 
  63.         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)) 
  64.         image_name = '%s.png' % Stime 
  65. return image_name 
  66.  
  67. ###### Creating email content 
  68. def _content(Subject,body,mail_to,*img): 
  69.         msgRoot = MIMEMultipart() 
  70.         msgRoot['From'] = mail_from 
  71.         msgRoot['To'] = mail_to 
  72.         msgRoot['Subject'] = Subject 
  73.  
  74.         msgText = MIMEText(body) 
  75.         msgRoot.attach(msgText) 
  76.  
  77.         if tag == 0
  78.                 image_path = img[0
  79.                 image_name = img[1
  80.                 f = open('%s%s' % (image_path,image_name),'rb'
  81.                 msgimg = MIMEImage(f.read()) 
  82.                 f.close() 
  83.                 msgimg.add_header('Content-Disposition''attachment', filename = image_name) 
  84.                 msgRoot.attach(msgimg) 
  85.         return msgRoot 
  86.  
  87. ######  definition sendmail function 
  88. def send_mail(mail_server,mail_port,mail_from,mail_to,content): 
  89.         mail=smtplib.SMTP(mail_server,mail_port) 
  90.         mail.sendmail(mail_from,mail_to,content) 
  91.         mail.quit() 
  92.  
  93. ###### definition main function 
  94. def main(mail_to,Subject,body): 
  95.         Host = _getHost(Subject) 
  96.         if tag == 0
  97.                 Graphname = _getgraphname(Subject) 
  98.                 graphid = _getgraphid(Graphname,Host) 
  99.                 image_name = _getgraph(graphid) 
  100.                 msgRoot = _content(Subject,body,mail_to,image_path,image_name) 
  101.         else
  102.                 msgRoot = _content(Subject,body,mail_to) 
  103.         send_mail(mail_server,mail_port,mail_from,mail_to,msgRoot.as_string()) 
  104.  
  105. if __name__ == "__main__"
  106.         if "Zabbix agent" in Subject: 
  107.                 tag = 1 
  108.         main(sys.argv[1],sys.argv[2],sys.argv[3]) 
 
邮件内容:
 

 

 

希望得到广大IT爱好者的建议与指导。







本文转自 向阳草米奇 51CTO博客,原文链接:http://blog.51cto.com/grass51/1094098,如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
监控
zabbix设置邮件报警
zabbix设置邮件报警
112 0
|
1月前
|
运维 监控 BI
zabbix强大的报警系统
zabbix强大的报警系统
61 8
|
5月前
|
监控 关系型数据库 MySQL
一文吃透企业级elk技术栈:11. zabbix报警实现
一文吃透企业级elk技术栈:11. zabbix报警实现
|
8月前
|
监控 前端开发
Zabbix使用外部邮箱服务器发送邮件报警
Zabbix使用外部邮箱服务器发送邮件报警
|
8月前
|
监控 关系型数据库 应用服务中间件
zabbix自定义监控、钉钉、邮箱报警
zabbix自定义监控、钉钉、邮箱报警,实验准备,安装,添加监控对象,添加自定义监控项,监控mariadb,监控NGINX,钉钉报警设置,邮件报警
366 0
|
运维 监控
【运维知识进阶篇】zabbix5.0稳定版详解2(自定义监控+报警+图形+模板)(四)
【运维知识进阶篇】zabbix5.0稳定版详解2(自定义监控+报警+图形+模板)(四)
176 0
|
运维 监控 小程序
【运维知识进阶篇】zabbix5.0稳定版详解2(自定义监控+报警+图形+模板)(三)
【运维知识进阶篇】zabbix5.0稳定版详解2(自定义监控+报警+图形+模板)(三)
108 0
|
运维 监控 测试技术
【运维知识进阶篇】zabbix5.0稳定版详解2(自定义监控+报警+图形+模板)(二)
【运维知识进阶篇】zabbix5.0稳定版详解2(自定义监控+报警+图形+模板)(二)
217 0
|
运维 监控 网络协议
【运维知识进阶篇】zabbix5.0稳定版详解2(自定义监控+报警+图形+模板)(一)
【运维知识进阶篇】zabbix5.0稳定版详解2(自定义监控+报警+图形+模板)
340 0
|
缓存 监控 应用服务中间件
【zabbix】生产环境zabbix只能收到邮件不能看到图形化页面
【zabbix】生产环境zabbix只能收到邮件不能看到图形化页面

推荐镜像

更多