zoukankan      html  css  js  c++  java
  • 项目上使用的每月1日自动导出Zabbix性能数据的python脚本

    基于zabbix-manager

    python2.7

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # __author__ = "life"
    # Email: batistuta1977@163.com
    # Date: 2018/5/23

    import smtplib,datetime,os,sys,time
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.mime.application import MIMEApplication
    from email.header import Header

    date_rang=() # 保存查询性能数据的日期范围

    def get_date_range():
        cur_date = datetime.datetime.now() # 获取今天的日期
        weekday = cur_date.weekday() # 获取当前星期几
        # print weekday
        # 获取查找星期一日期要减去的天数,0表示星期一
        Monday = cur_date - datetime.timedelta(days=weekday + 7) # 找出星期一的日期
        date_Mon = Monday.strftime("%Y-%m-%d") # 获取周一的日期
        Friday = Monday + datetime.timedelta(days=4) # 获取星期一加上四天,星期五
        date_Fri = Friday.strftime("%Y-%m-%d") # 获取星期五的日期
        # print date_Mon
        # print date_Fri
        return date_Mon,date_Fri

    def send_mail():
        smtp_server = "mail.bluetek.com.cn"
        cur_date = datetime.datetime.now().strftime("%Y-%m-%d")
        # print cur_date
        subject = "weekly performance of servers report" + cur_date
        # print subject
        Sender = 'liudong@bluetek.com.cn'
        #to_receiver = ['mujj@bluetek.com.cn','wangym@bluetek.com.cn','zhangyh@bluetek.com.cn']
        #to_CC = ['menghl@bluetek.com.cn','liudong@bluetek.com.cn']
        to_receiver = ['liudong@bluetek.com.cn','wangym@bluetek.com.cn','zhangyh@bluetek.com.cn']
        to_CC = []
        Receiver = to_receiver + to_CC
        username = 'liudong@bluetek.com.cn'
        password = 'Zhrldalyx061010'

        #下面的toccfrom最好写上,不然只在sendmail中,可以发送成功,但看不到发件人、收件人信息
        msgroot = MIMEMultipart('related')
        msgroot['Subject'] = subject
        msgroot['To'] = ','.join(to_receiver)
        msgroot['Cc'] = ','.join(to_CC)
        msgroot['from'] = Sender

        # MIMEText有三个参数,第一个对应文本内容,第二个对应文本的格式,第三个对应文本编码

        os.chdir('/usr/local/reports/') #Crontab的路径不正确,导致自动执行失败的测试
        thebody = MIMEText(subject,'plain','utf-8')
        msgroot.attach(thebody)

        xlsxpart = MIMEApplication(open('cpuusage.xls','rb').read())
        xlsxpart.add_header('Content-Disposition', 'attachment', filename='cpuusage.xls')
        msgroot.attach(xlsxpart)

        xlsxpart = MIMEApplication(open('Freemem.xls','rb').read())
        xlsxpart.add_header('Content-Disposition', 'attachment', filename='Freemem.xls')
        msgroot.attach(xlsxpart)

        xlsxpart = MIMEApplication(open('Freedisk.xls','rb').read())
        xlsxpart.add_header('Content-Disposition', 'attachment', filename='Freedisk.xls')
        msgroot.attach(xlsxpart)

        try:
            client = smtplib.SMTP()
            client.connect(smtp_server)
            client.login(username, password)
            client.sendmail(Sender, Receiver, msgroot.as_string())
            client.quit()
            print 'Report邮件发送成功!'
        except smtplib.SMTPRecipientsRefused:
            print 'Recipient refused'
        except smtplib.SMTPAuthenticationError:
            print 'Auth error'
        except smtplib.SMTPSenderRefused:
            print 'Sender refused'
        except smtplib.SMTPException, e:
            print e.message

    def gen_report_files(date_range):
        Start_date = ' "' + date_range[0]
        # print Start_date
        End_date = ' "' + date_range[1]
        # print End_date
        cmd_cpu = 'nohup zabbix_api --report "CPU usage"' + Start_date + " 00:00:00"" +
             End_date + ' 24:59:00" --xls /usr/local/reports/cpuusage.xls > /dev/null'
        # print cmd_cpu
        os.popen(cmd_cpu)
        cmd_mem = 'nohup zabbix_api --report "Free Mem %"' + Start_date + " 00:00:00"" +
             End_date + ' 23:59:00" --xls /usr/local/reports/Freemem.xls > /dev/null'
        # print cmd_mem
        os.popen(cmd_mem)
        cmd_disk = 'nohup zabbix_api --report "Free disk space on"' + Start_date + " 00:00:00"" +
             End_date + ' 23:59:00" --xls /usr/local/reports/Freedisk.xls > /dev/null'
        # print cmd_disk
        os.popen(cmd_disk)

    def rm_files():
        # time.sleep(60)
        os.popen('rm -fr *.xls')

    if __name__ == '__main__':
        date_rang = get_date_range()
        # print date_range
        # print date_range[0]
        # print date_range[1]
        gen_report_files(date_rang)
        time.sleep(30)
        send_mail()
        rm_files()

    月报脚本:

    [root@NEVS-ZABBIX-P reports]# cat Monthly-report.py 
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # __author__ = "life"
    # Email: batistuta1977@163.com
    # Date: 5/28/18
    
    import smtplib,datetime,os,sys
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.mime.application import MIMEApplication
    from email.header import Header
    
    date_range=()
    
    def get_date_range():
        last_month_date_first = datetime.datetime(datetime.date.today().year,datetime.date.today().month-1,1).strftime("%Y-%m-%d")
        # print(last_month_date_first)
        last_month_date_last = datetime.datetime(datetime.date.today().year,datetime.date.today().month,1) - datetime.timedelta(1)
        last_month_date_last = last_month_date_last.strftime("%Y-%m-%d")
        # print last_month_date_last
        return last_month_date_first,last_month_date_last
    
    def gen_report_files(date_range):
        Start_date = ' "' + date_range[0]
        # print Start_date
        End_date = ' "' + date_range[1]
        # print End_date
        cmd_cpu = 'nohup zabbix_api --report "CPU usage"' + Start_date + " 00:00:00"" + 
              End_date + ' 23:59:00" --xls /usr/local/reports/cpuusage_monthly.xls > /dev/null'
        # print cmd_cpu
        os.popen(cmd_cpu)
        cmd_mem = 'nohup zabbix_api --report "Free Mem %"' + Start_date + " 00:00:00"" + 
              End_date + ' 23:59:00" --xls /usr/local/reports/Freemem_monthly.xls > /dev/null'
        # print cmd_mem
        os.popen(cmd_mem)
        cmd_disk = 'nohup zabbix_api --report "Free disk space on"' + Start_date + " 00:00:00"" + 
              End_date + ' 23:59:00" --xls /usr/local/reports/Freedisk_monthly.xls > /dev/null'
        print cmd_disk
        os.popen(cmd_disk)
    
        cmd_icmp = 'nohup zabbix_api --report "ICMP loss"' + Start_date + " 00:00:00"" + 
              End_date + ' 23:59:00" --xls /usr/local/reports/ICMP_monthly.xls > /dev/null'
        #print cmd_icmp
        os.popen(cmd_icmp)
    
    def send_mail():
        os.chdir('/usr/local/reports/')
        smtp_server = "mail.bluetek.com.cn"
        cur_date = datetime.datetime.now().strftime("%Y-%m-%d")
        # print cur_date
        subject = "Monthly performance of servers report " + cur_date
        # print subject
        Sender = 'liudong@bluetek.com.cn'
        to_receiver = ['mujj@bluetek.com.cn','wangym@bluetek.com.cn','zhangyh@bluetek.com.cn']
        to_CC = ['menghl@bluetek.com.cn','liudong@bluetek.com.cn']
        Receiver = to_receiver +  to_CC
        username = 'liudong@bluetek.com.cn'
        password = 'Zhrldalyx061010'
    
        #下面的toccfrom最好写上,不然只在sendmail中,可以发送成功,但看不到发件人、收件人信息
        msgroot = MIMEMultipart('related')
        msgroot['Subject'] = subject
        msgroot['To'] = ','.join(to_receiver)
        msgroot['Cc'] = ','.join(to_CC)
        msgroot['from'] = Sender    
    
        thebody = MIMEText(subject,'plain','utf-8')
        msgroot.attach(thebody)
    
        xlsxpart = MIMEApplication(open('cpuusage_monthly.xls','rb').read())
        xlsxpart.add_header('Content-Disposition', 'attachment', filename='cpuusage_monthly.xls')
        msgroot.attach(xlsxpart)
    
        xlsxpart = MIMEApplication(open('Freemem_monthly.xls','rb').read())
        xlsxpart.add_header('Content-Disposition', 'attachment', filename='Freemem_monthly.xls')
        msgroot.attach(xlsxpart)
    
        xlsxpart = MIMEApplication(open('Freedisk_monthly.xls','rb').read())
        xlsxpart.add_header('Content-Disposition', 'attachment', filename='Freedisk_monthly.xls')
        msgroot.attach(xlsxpart)
        
        xlsxpart = MIMEApplication(open('ICMP_monthly.xls','rb').read())
        xlsxpart.add_header('Content-Disposition', 'attachment', filename='Freedisk_monthly.xls')
        msgroot.attach(xlsxpart)    
    
        try:
            client = smtplib.SMTP()
            client.connect(smtp_server)
            client.login(username, password)
            client.sendmail(Sender, Receiver, msgroot.as_string())
            client.quit()
            print 'Report邮件发送成功!'
        except smtplib.SMTPRecipientsRefused:
            print 'Recipient refused'
        except smtplib.SMTPAuthenticationError:
            print 'Auth error'
        except smtplib.SMTPSenderRefused:
            print 'Sender refused'
        except smtplib.SMTPException, e:
            print e.message
    
    if __name__ == '__main__':
        date_range = get_date_range()
        # print date_range
        print 'begin generating reports in /root/reports...'
        gen_report_files(date_range)
        send_mail()

    定时执行

    [root@NEVS-ZABBIX-P reports]# crontab -l
    0 2 * * 1 source ~/.bashrc && /usr/bin/python /usr/local/reports/auto_report.py
    0 3 1 * * source ~/.bashrc && /usr/bin/python  /usr/local/reports/Monthly-report.py
  • 相关阅读:
    sql性能查询
    ASP.Net Web应用程序与EXCEL交互时遇到的权限问题
    Connection strings for Excel 2007
    获取异常的具体出处dbms_utility.format_error_backtrace
    C#获取Excel架构信息的方法
    Oracle强杀进程
    C#游标溢出(访问数据库)解决方案。
    Visual C# 2008 调试技巧一
    【POI】修改Excel内容
    【Eclipse】在Eclipse工具中自定义类注释
  • 原文地址:https://www.cnblogs.com/ld1977/p/9099697.html
Copyright © 2011-2022 走看看