项目上使用的每月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'
#下面的to\cc\from最好写上,不然只在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' #下面的to\cc\from最好写上,不然只在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