Zabbix自动生成报表并发送邮件

简介: Zabbix自动生成报表并发送邮件

实现思路:


640.png


  1. zabbix提供了一个获取事件的api,可以根据此api获取zabbix原始报警数据
  2. 将获取到的原始数据进行统计去重,统计触发器出现次数,并把重复的触发器删除,将需要用到的数据统一放到一个列表中
  3. 将第二步的列表进行遍历,并传入到HTML中,或者也可以使用pandas直接把数据建模,然后自动生成HTML表格
  4. 将生成的HTML作为邮件内容发送


定义获取的时间间隔


x=(datetime.datetime.now()-datetime.timedelta(minutes=30)).strftime("%Y-%m-%d %H:%M:%S")
y=(datetime.datetime.now()).strftime("%Y-%m-%d %H:%M:%S")
def timestamp(x,y):
    p=time.strptime(x,"%Y-%m-%d %H:%M:%S")
    starttime = str(int(time.mktime(p)))
    q=time.strptime(y,"%Y-%m-%d %H:%M:%S")
    endtime= str(int(time.mktime(q)))
    return starttime,endtime


这里是获取的30分钟的报警数据


获取事件数据


def getevent(auth,timestamp):
    data={
        "jsonrpc": "2.0",
        "method": "event.get",
        "params": {
            "output": [
                "name",
                "severity"
            ],
            "value":1,
            "time_from":timestamp[0],
            "time_till":timestamp[1],
            "selectHosts":[
                #"hostid",
                "name"
            ]
        },
        "auth": auth,
        "id": 1
    }
    getevent=requests.post(url=ApiUrl,headers=header,json=data)
    triname=json.loads(getevent.content)['result']


通过zabbix api获取需要用到的事件内容,其中包含报警主机名,主机id,触发器,触发器严重性


将获取到的数据进行处理


triggers=[]
a={}
for i in triname:
     triggers.append(i['name'])
for i in triggers:
     a[i]=triggers.count(i)
list2=[]
print(triname)
#print(a)
for key in a:
     b={}
     b['name']=key
     b['host']=[i['hosts'][0]['name'] for i in triname if i['name']==key][0]
     b['severity']=[i['severity'] for i in triname if i['name']==key][0]
     b['count']=a[key]
     list2.append(b)
return list2


这里是将重复出现的触发器进行去重并统计出现次数,将获取到的触发次数以及以前的信息都放到同一个表里,并传给HTML


将数据发送给HTML


def datatohtml(list2):
    tables = ''
    for i in range(len(list2)):
        name,host,severity,count = list2[i]['name'], list2[i]['host'], list2[i]['severity'], list2[i]['count']
        td = "<td>%s</td> <td>%s</td> <td>%s</td> <td>%s</td>"%(name, host, severity, count)
        tables = tables + "<tr>%s</tr>"%td
    base_html="""
    <!DOCTYPE html>
    <html>
    <head> 
    <meta charset="utf-8"> 
    <title>zabbix监控告警</title> 
    </head>
    <body>
    <table width="900" border="0">
    <tr>
    <td colspan="2" style="background-color:#FFA500;">
    <h4>告警级别: 1 表示:信息 2 表示:告警 3 表示:一般严重 4 表示:严重 5 表示:灾难</h4>
    </td>
    </tr>
    <tr>
    <td style="background-color:#FFD700;width:100px;">
    <TABLE BORDER=1><TR><TH>主机</TH><TH>触发器</TH><TH>告警级别</TH><TH>告警次数</TH></TR>%s</TABLE>
    </td>
    </tr>
    <tr>
    <td colspan="2" style="background-color:#FFA500;text-align:center;">
    zabbix告警统计</td>
    </tr>
    </table>
    </body>
    </html>
    """ %tables
    return base_html


将传入的列表进行遍历并传入HTML表格中


发送报表邮件


将生成的HTML通过邮件发送


def sendmail(base_html):
    from_addr = 'wanger@qq.com'
    password = '没有故事的陈师傅'
    to_addr = 'wanger@163.com'
    smtp_server = 'smtp.qq.com'
    msg = MIMEText(base_html, 'html', 'utf-8')
    msg['From'] = from_addr
    msg['To'] = to_addr
    msg['Subject'] = Header('Zabbix本周监控报表', 'utf-8').encode()
    try:
        server=SMTP(smtp_server,"25")   #创建一个smtp对象
        #server.starttls()    #启用安全传输模式
        server.login(from_addr,password)  #邮箱账号登录
        server.sendmail(from_addr,to_addr,msg.as_string())  #发送邮件  
        server.quit()   #断开smtp连接
    except smtplib.SMTPException as a:
        print (a)


实现效果如下:


640.jpg


如果需要每周定时发送,可将其放入Linux的定时任务中,完整脚本阅读原文或者访问GitHub:https://github.com/sunsharing-note/zabbix/blob/master/zhoubao.py 获取

欢迎各位一起交流,对脚本提出指导意见

相关文章
|
监控 BI API
利用ZABBIX进行服务器自动巡检并导出报表
利用ZABBIX进行服务器自动巡检并导出报表
利用ZABBIX进行服务器自动巡检并导出报表
|
监控 网络安全 开发工具
Zabbix配置动作执行远程命令和发送邮件
当zabbix有事件发生,我们可以根据事件来执行相应的动作,根据事件来源可以分为触发器动作,自动发现动作,自动注册动作,内部事件动作,自动发现动作在之前的自动发现那里讲过了,这里介绍一下触发器动作,当触发器事件达到执行动作的必要条件,会执行相应的动作。
Zabbix配置动作执行远程命令和发送邮件
|
Python
ZABBIX告警脚本——python发送邮件
自定义Zabbix告警,首先需要编写告警脚本,告警脚本需要支持3个参数: 1.告警接收人 2.主题 3.内容
401 0
ZABBIX告警脚本——python发送邮件
|
监控 BI Perl
zabbix生成月度统计报表
!/bin/bash ############################## @version 0.1 @date 2017-12-31 ############################## USER1="zabbix327" PASSW...
2498 0
|
监控 BI Perl
Zabbix 创建月度统计报表脚本(学习笔记十六)
一、脚本: #!/bin/bash ############################## # @version 0.1 # @date 2017-12-31 ############################## USER1="zabbi...
1270 0
|
运维 监控 关系型数据库
|
监控 测试技术 数据安全/隐私保护