zoukankan      html  css  js  c++  java
  • zabbix监控的主机数量与主机名

    #!/usr/bin/env python2.7
    #encoding:utf-8
    #__author__ = 'zzling'
    import MySQLdb
    import time,datetime
    import os,sys
    import urllib,urllib2
    import cookielib
    import smtplib
    from prettytable import PrettyTable 
    from email.header import Header
    from email.MIMEText import MIMEText
    from email.mime.image import MIMEImage
    from email.mime.multipart import MIMEMultipart
    
    zabbix_host = 'ip'
    username = 'admin'
    password = 'pass'
    width = 1100
    height = 250
    period = 86400
    EMAIL_DOMAIN = '163.com'
    EMAIL_USERNAME = 'name'
    EMAIL_PASSWORD = '密码'
    
    conn =MySQLdb.connect(host='localhost',user='user',passwd='passwd',port=端口,db='zabbixdb')
    cursor = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)
    
    def get_last_day():
        today = datetime.date.today()
        today_time = str(time.mktime(today.timetuple()))
        oneday = datetime.timedelta(days=1) 
        yesterday = today-oneday
        yesterday_time = str(time.mktime(yesterday.timetuple()))
        today_timStamp = today_time.split('.',2)[0]
        yesterday_timeStamp = yesterday_time.split('.',2)[0]
        today_time = int(today_timStamp)
        today_timeArray = time.localtime(today_time)
        today_StyleTime = time.strftime("%Y%m%d",today_timeArray)
        yesterday_time = int(yesterday_timeStamp)
        yesterday_timeArray = time.localtime(yesterday_time)
        yesterday_StyleTime = time.strftime("%Y%m%d",yesterday_timeArray)
        return today_timStamp,yesterday_timeStamp,yesterday_StyleTime,today_StyleTime
    
    def get_hostid():
        sql='''select hostid from hosts where host like 'aggregate_all'; '''
        cursor.execute(sql)
        hostid = cursor.fetchall()
        return hostid
    
    def get_itemid():
        getid = get_hostid()
        hostid = getid[0].get('hostid')
        sql='''select itemid,name from items where hostid = %s;''' % hostid
        cursor.execute(sql)
        itemid = cursor.fetchall()
        num = len(itemid)
        itemid_list = []
        for i in range(num):
            every_itemid = itemid[i].get('itemid')
            itemid_list.append(every_itemid)
        return itemid_list,itemid
    
    def get_graphid():
        itemids = get_itemid()[0]
        num = len(itemids)
        graphid_list = []
        for i in range(num):
           itemid = itemids[i]
           sql = '''select graphid from graphs_items where itemid = %s;''' % itemid
           cursor.execute(sql)
           data = cursor.fetchall()
           nums = len(data)
           for i in range(nums):
               graphid = data[i].get('graphid')
               graphid_list.append(graphid)
        ids = list(set(graphid_list))
        return ids
    
    def get_data():
        time_cur = get_last_day()
        today_time = time_cur[0]
        ytd_time = time_cur[1]
        itemids = get_itemid()[0]
        name = get_itemid()[1]
        num = len(itemids)
        data_dict = {}
        for i in range(num):
            nameserver = name[i]['name']
        every_id = itemids[i]
            sql='''SELECT clock,min(value),avg(value),max(value) FROM history_uint WHERE itemid=%s and clock > %s and clock < %s''' % (every_id,ytd_time,today_time)
            cursor.execute(sql)
            data = cursor.fetchall()
            data_dict[nameserver] = data
        cursor.close()
        conn.close()
        return data_dict
    
    #def format_output():
    #    data = get_data()
    #    yesterday_date = get_last_day()[2]
    #    today_date = get_last_day()[3]
    #    date=yesterday_date + "~" + today_date
    #    formats = PrettyTable(["date","items", "min", "avg", "max"])
    #    formats.align["item"] = "l"
    #    formats.padding_width = 1
    #    for k in data:
    #        value = data[k][0]
    #        if 'traffic' in k:
    #       maxs = "%.2f" % float(value.get("max(value)")/float(1000000))
    #           mins = "%.2f" % float(value.get("min(value)")/float(1000000))
    #           avgs = "%.2f" % float(float(value.get("avg(value)"))/float(1000000))
    #       print date,k,maxs,mins,avgs
    #           formats.add_row([date,k,mins,avgs,maxs])
    #        else:
    #           maxs = "%.2f" % float(value.get("max(value)")/float(1000))
    #           mins = "%.2f" % float(value.get("min(value)")/float(1000))
    #           avgs = "%.2f" % float(float(value.get("avg(value)"))/float(1000))           
    #           print date,k,maxs,mins,avgs
    #           formats.add_row([date,k,mins,avgs,maxs])
    #    return formats
    
    
    def handler_data():
        data = get_data()
        final_data = {}
        for k in data:
            value = data[k][0]
            if 'traffic' in k:
               maxs = "%.2f" % float(value.get("max(value)")/float(1000000)) + "M"
               mins = "%.2f" % float(value.get("min(value)")/float(1000000)) + "M"
               avgs = "%.2f" % float(float(value.get("avg(value)"))/float(1000000)) + "M"
               final_data[k]=mins,avgs,maxs
            else:
               maxs = "%.2f" % float(value.get("max(value)")/float(1000)) + "K"
               mins = "%.2f" % float(value.get("min(value)")/float(1000)) + "K"
               avgs = "%.2f" % float(float(value.get("avg(value)"))/float(1000)) + "K"          
               final_data[k]=mins,avgs,maxs
        return final_data
    
    def format_data():
        dicts_data = handler_data()
        list_items = []
        MINS = []
        AVGS = []
        MAXS = []
        for i in range(len(dicts_data)):
            list_items.append(dicts_data.keys()[i])
            MINS.append(list(dicts_data.get(dicts_data.keys()[i]))[0])
            AVGS.append(list(dicts_data.get(dicts_data.keys()[i]))[1])
            MAXS.append(list(dicts_data.get(dicts_data.keys()[i]))[2])
        return list_items,MINS,AVGS,MAXS
            
    stime = get_last_day()[2] + '000000'
    curtime = get_last_day()[0] + '000' 
    date_time = get_last_day()
    title = date_time[2] + "~" + date_time[3]
    graphid_list = get_graphid()
    final_data = list(format_data())
    items = final_data[0]
    MIN = final_data[1]
    AVG = final_data[2]
    MAX = final_data[3]
    def Save_Graph(zabbix_host,username,password,width,height,period,stime,curtime):
        for graphid in graphid_list:
            #print graphid
            login_opt = urllib.urlencode({
            "name": username,
            "password": password,
            "autologin": 1,
            "enter": "Sign in"})
            get_graph_opt = urllib.urlencode({
            "graphid": graphid,
            "screenid": '16',
            "width": width,
            "height": height,
            "period": period,
            "stime": stime,
            "curtime": curtime})
            cj = cookielib.CookieJar()
            opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
            login_url = r"http://%s/index.php"%zabbix_host
            save_graph_url = r"http://%s/chart2.php"%zabbix_host
            opener.open(login_url,login_opt).read()
            data = opener.open(save_graph_url,get_graph_opt).read()
            names = title + "." + str(graphid)
            filename = "/opt/get_report/pic/%s.jpeg"%str(names)
            f = open(filename,"wb")
            f.write(data)
            f.close()
    
    def send_mail(to_list):
      me = 'Zabbix <%s@%s>' % (EMAIL_USERNAME, EMAIL_DOMAIN)
      def _create_msg():
        msg = MIMEMultipart('alternatvie')
        msg['Subject'] = '%s 节点会话数和流量负载汇总 '% title
        msg['From'] = me
        msg['To'] = ';'.join(to_list)
        zbxText = MIMEText("""
    <html>
    <body>
    <table border="1" cellpadding="0" cellspacing="0" width="100%">
    <tr>
    <td align="center">会话数</td>
    </tr>
    <tr>
    <td><img src="cid:image0"></td>
    </tr>
    </table>
    
    <table border="1" cellpadding="0" cellspacing="0" width="100%">
    <tr>
    <td align="center">流量负载</td>
    </tr>
    <tr>
    <td><img src="cid:image1"></td>
    </tr>
    </table>
    
    <table border="1" width="100%">
    <tr>
        <td width="300" height="40">date</td>
        <td width="300" height="40">items</td>
        <td width="300" height="40">min</td>
        <td width="300" height="40">avg</td>
        <td width="300" height="40">max</td>
    </tr>
    <tr>
        <td height="40">{date}</td>
        <td height="40">{item0}</td>
        <td height="40">{MIN0}</td>
        <td height="40">{AVG0}</td>
        <td height="40">{MAX0}</td>
    </tr>
    <tr>
        <td height="40">{date}</td>
        <td height="40">{item1}</td>
        <td height="40">{MIN1}</td>
        <td height="40">{AVG1}</td>
        <td height="40">{MAX1}</td>
    </tr>
    <tr>
        <td height="40">{date}</td>
        <td height="40">{item2}</td>
        <td height="40">{MIN2}</td>
        <td height="40">{AVG2}</td>
        <td height="40">{MAX2}</td>
    </tr>
    <tr>
        <td height="40">{date}</td>
        <td height="40">{item3}</td>
        <td height="40">{MIN3}</td>
        <td height="40">{AVG3}</td>
        <td height="40">{MAX3}</td>
    </tr>
    <tr>
        <td height="40">{date}</td>
        <td height="40">{item4}</td>
        <td height="40">{MIN4}</td>
        <td height="40">{AVG4}</td>
        <td height="40">{MAX4}</td>
    </tr>
    <tr>
        <td height="40">{date}</td>
        <td height="40">{item5}</td>
        <td height="40">{MIN5}</td>
        <td height="40">{AVG5}</td>
        <td height="40">{MAX5}</td>
    </tr>
    <tr>
        <td height="40">{date}</td>
        <td height="40">{item6}</td>
        <td height="40">{MIN6}</td>
        <td height="40">{AVG6}</td>
        <td height="40">{MAX6}</td>
    </tr>
    <tr>
        <td height="40">{date}</td>
        <td height="40">{item7}</td>
        <td height="40">{MIN7}</td>
        <td height="40">{AVG7}</td>
        <td height="40">{MAX7}</td>
    </tr>
    </table>
    </body>
    </html>
        """.format(date=title,item0=items[0],item1=items[1],item2=items[2],item3=items[3],item4=items[4],item5=items[5],item6=items[6],item7=items[7],MIN0=MIN[0],MIN1=MIN[1],MIN2=MIN[2],MIN3=MIN[3],MIN4=MIN[4],MIN5=MIN[5],MIN6=MIN[6],MIN7=MIN[7],AVG0=AVG[0],AVG1=AVG[1],AVG2=AVG[2],AVG3=AVG[3],AVG4=AVG[4],AVG5=AVG[5],AVG6=AVG[6],AVG7=AVG[7],MAX0=MAX[0],MAX1=MAX[1],MAX2=MAX[2],MAX3=MAX[3],MAX4=MAX[4],MAX5=MAX[5],MAX6=MAX[6],MAX7=MAX[7]),'html','utf-8')
        msg.attach(zbxText)
        
        for n in range(len(graphid_list)):
            names = title + "." + str(graphid_list[n])
            zbx_img = open(r'/opt/get_report/pic/%s.jpeg'%names, 'rb')
            msgImage = MIMEImage(zbx_img.read())
            zbx_img.close()
            msgImage.add_header('Content-ID', '<image%s>'%n)
            msg.attach(msgImage)
        return msg
      try:
        server = smtplib.SMTP()
        server.connect('smtp.%s' % EMAIL_DOMAIN)
        server.login('%s@%s' % (EMAIL_USERNAME, EMAIL_DOMAIN), EMAIL_PASSWORD)
        server.sendmail(me, to_list, _create_msg().as_string())
        server.close()
        print 'send mail Ok!'
      except Exception, e:
        print e
    if __name__ == '__main__':
        Save_Graph(zabbix_host,username,password,width,height,period,stime,curtime)
        send_mail(['my mail'])

     获取报警信息:select clock,message from alerts where clock > 1479657600 and clock < 1479744000G;

  • 相关阅读:
    利用深度学习网络自动给图像上色的文章和相关工程实现
    Perceptual Losses for Real-Time Style Transfer and Super-Resolution and Super-Resolution 论文笔记
    (转) Dissecting Reinforcement Learning-Part.2
    (转) 多模态机器翻译
    编译caffe的Python借口,提示:ImportError: dynamic module does not define module export function (PyInit__caffe)
    (转)How Hash Algorithms Work
    深度学习 目标检测算法 SSD 论文简介
    (转)能根据文字生成图片的 GAN,深度学习领域的又一新星
    (转) Face-Resources
    (转) AdversarialNetsPapers
  • 原文地址:https://www.cnblogs.com/ylqh/p/6088820.html
Copyright © 2011-2022 走看看