免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4950 | 回复: 7
打印 上一主题 下一主题

[Zabbix] zabbix发screen报表 [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-04-12 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-01 15:48 |只看该作者 |倒序浏览
本帖最后由 51itpub 于 2015-07-01 17:02 编辑

领导要求:每天收到服务器负荷报表,参照网上Python的脚本,但发出来的邮件都是红叉叉:



这是什么原因?

晕,这里禁了贴URL。

zabbix_screen_error.PNG (31.9 KB, 下载次数: 124)

收到的邮件

收到的邮件

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-04-12 06:20:00
2 [报告]
发表于 2015-07-01 15:53 |只看该作者
不能贴URL,把参照的这段代码贴在这里:

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))

                        login_url = r"URL://%s/index.php"%zabbix_host

                        save_graph_url = r"URL://%s/chart2.php"%zabbix_host

                        opener.open(login_url,login_opt).read()

                        data = opener.open(save_graph_url,get_graph_opt).read()

                        filename = "%s/%s.%s.png"%(save_graph_path,screenid,graphid)

                        html += '<img width="600" height="250" src="URL://%s/%s/%s/%s.%s.png">'%(zabbix_host,save_graph_path.split("/")[len(save_graph_path.split("/"))-2],save_graph_path.split("/")[len(save_graph_path.split("/"))-1],screenid,graphid)

                        f = open(filename,"wb")

                        f.write(data)

                        f.close()





def send_mail(username,password,smtp_server,to_list,sub,content):

    print to_list

    me = "运维"+"<"+username+"@"+domain +">"

    msg = MIMEText(content,_subtype="html",_charset="utf8")

    msg["Subject"] = sub

    msg["From"] = me

    msg["To"] = ";".join(to_list)

    try:

        server = smtplib.SMTP()

        server.connect(smtp_server)

        server.login(username,password)

        server.sendmail(me,to_list,msg.as_string())

        server.close()

        print "send mail Ok!"

    except Exception, e:

        print e



if __name__ == '__main__':

    for screen in screens:

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

    send_mail(mail_user,mail_pass,smtp_server,to_list,"test email",html)

设置crontab 每天早上上班前执行一次

crontab -e

45 08 * * * python /root/zabbix_send_report.py

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-04-12 06:20:00
3 [报告]
发表于 2015-07-01 15:56 |只看该作者
我把关健字H^T^TP:换成RUL:了,在上面的代码里。

我目前的判断是html里只有html代码,但实际的图片没有发出来。图片在服务上能正常生成。

论坛徽章:
2
2015年亚冠纪念徽章
日期:2015-07-05 23:06:04IT运维版块每日发帖之星
日期:2015-07-06 22:20:00
4 [报告]
发表于 2015-07-05 21:38 |只看该作者
首先:save_graph_path = "/var/www/zabbix/reports/××ד
这下面是否正常生成了图片?

其次
URL://%s/%s/%s/%s.%s.png
直接访问该路径可以看到图片吗?

论坛徽章:
0
5 [报告]
发表于 2015-07-10 12:14 |只看该作者
跑个nginx 然后根路径配置到你的save_graph_path   然后 你本地试试能不能ip访问到 然后在跑report脚本试试

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-04-12 06:20:00
6 [报告]
发表于 2015-07-21 15:35 |只看该作者

这个问题,后来的排查是生产的html所指的图片路径与生成图片的路径不一样.

论坛徽章:
7
寅虎
日期:2014-08-15 12:54:11狮子座
日期:2014-10-28 23:42:142015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:48:00IT运维版块每日发帖之星
日期:2015-08-04 06:20:00IT运维版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-10-10 06:20:00
7 [报告]
发表于 2015-07-22 09:21 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-04-12 06:20:00
8 [报告]
发表于 2015-07-22 13:34 |只看该作者
回复 7# bun


    这个百度一下呀,到处都是。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP