设为首页 加入收藏

TOP

Python 实现Zabbix自动发送报表(一)
2014-11-23 22:10:06 来源: 作者: 【 】 浏览:33
Tags:Python 实现 Zabbix 自动 发送 报表

实现将Zabbix中的screens中的图片以邮件的方式发送到管理员邮箱,大家都知道Zabbix的screens一般是定义管理员比较关注的监控指标好方便浏览,那么我们就根据管理员自定义的screens name获取相关图信息的。


一些Zabbix相关教程集合


简介


首先我们来看下图片的url (右击screens中随便一张图片,选复制图片地址)


http://zabbix.xxx.com/chart2.php graphid=524&screenid=16&width=400&height=156&updateProfile=1&profileIdx=web.screens&profileIdx2=16&period=86400&stime=20150629172712&sid=f6dd0d127bba0123&curtime=1404120808037


可以看到上面的url后面有很多的参数,当然我们需要的没有那么多,简化后的url如下


http://zabbix.xxx.com/chart2.php graphid=524&screenid=16&width=400&height=156&period=86400



简化后我们只需要5个参数


graphid # 图片的ID,对应的值为某一个graph的唯一标识


screenid # screenID,对应的值为某一个screen的唯一标识


width # 图片的宽度,对应的值为图片的宽度(可根据需要自己定义)


height # 图片的高度,对应的值为图片的高度(可根据需要自己定义)


period # 图片展示数据的时钟周期 单位为 秒 (86400 =1天)



通过上面的信息我们知道要通过zabbix获取screen中的图片需要的参数下面我们需要做的就是通过screen name到数据库中查询相关参数即可


1、根据管理员自定义的screens name在数据库中查询此screen的ID (screens 表)


2、根据所查到的screenID查询此screen中所包含的resourceid (resourceid==graphid)(screens_items 表)


3、通过1、2两步查到的参数获取图片并保存至zabbix服务器上的web目录并生成html代码


4、通过smtplib模块把html代码发送到管理员邮箱


大概的流程是这样的,代码如下,代码中所涉及的参数变量根据自己的环境做出相应的配置即可


cat zabbix_send_report.py


#! /usr/bin/env python


#coding=utf-8


# Andy_f


import time,os


import urllib


import urllib2


import cookielib


import MySQLdb


import smtplib


from email.mime.text import MIMEText



screens = ["xxx","xxx"]


#


save_graph_path = "/var/www/zabbix/reports/%s"%time.strftime("%Y-%m-%d")


if not os.path.exists(save_graph_path):


os.makedirs(save_graph_path)


# zabbix host


zabbix_host = "zabbix.xxx.com"


# zabbix login username


username = "admin"


# zabbix login password


password = "zabbix"


# graph width


width = 600


# graph height


height = 100


# graph Time period, s


period = 86400


# zabbix DB


dbhost = "xxx.xxx.xxx.xxx"


dbport = 3306


dbuser = "zabbix"


dbpasswd = "xxxxx"


dbname = "zabbix"


# mail


to_list = ["xxx@xxx.com","aaa@xxx.com"]


smtp_server = "smtp.163.com"


mail_user = "xxxx"


mail_pass = "xxxxx"


domain = "163.com"



def mysql_query(sql):


try:


conn = MySQLdb.connect(host=dbhost,user=dbuser,passwd=dbpasswd,port=dbport,connect_timeout=20)


conn.select_db(dbname)


cur = conn.cursor()


count = cur.execute(sql)


if count == 0:


result = 0


else:


result = cur.fetchall()


return result


cur.close()


conn.close()


except MySQLdb.Error,e:


print "mysql error:" ,e



def get_graph(zabbix_host,username,password,screen,width,height,period,save_graph_path):


screenid_list = []


global html


html = ''


for i in mysql_query("select screenid from screens where name='%s'"%(screen)):


for screenid in i:


graphid_list = []


for c in mysql_query("select resourceid from screens_items where screenid='%s'"%(int(screenid))):


for d in c:


graphid_list.append(int(d))


for graphid in graphid_list:


login_opt = urllib.urlencode({


"name": username,


"password": password,


"autologin": 1,


"enter": "Sign in"})


get_graph_opt = urllib.urlencode({


"graphid": graphid,


"screenid": screenid,


"width": width,


"height": height,


"period": period})


cj = cookielib.CookieJar()


opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))


首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++智能指针--auto_ptr指针 下一篇在 AngularJS 应用中通过 JSON 文..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: