首页 > 其他分享 >4、zabbix 调用API 发送邮件,告警周报统计

4、zabbix 调用API 发送邮件,告警周报统计

时间:2023-12-26 16:25:43浏览次数:31  
标签:count name auth list2 zabbix API result 告警 severity

#coding=utf-8
import requests,json,codecs,datetime,time,pandas
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr
from smtplib import SMTP
import smtplib
ApiUrl = 'http://192.168.1.2/api_jsonrpc.php'
header = {"Content-Type":"application/json"}
user="Admin"
password="zabbix"
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 gettoken():
    data = {"jsonrpc": "2.0",
                "method": "user.login",
                "params": {
                    "user": user,
                    "password": password
                },
                "id": 1,
                "auth": None
            }
    auth=requests.post(url=ApiUrl,headers=header,json=data)
    return json.loads(auth.content)['result']
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
def logout(auth):
    data={
        "jsonrpc": "2.0",
        "method": "user.logout",
        "params": [],
        "id": 1,
        "auth": auth
    }
    auth=requests.post(url=ApiUrl,headers=header,json=data)
    return json.loads(auth.content)

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']
    triggers=[]
    a={}
    for i in triname:
        triggers.append(i['name'])
    for i in triggers:
        a[i]=triggers.count(i)
    #for i in triname:
    #    i['count']=a[i['name']]
    
    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)
        
    # host=[i['host'] for i in list2]
    # name=[i['name'] for i in list2]
    # severity=[i['severity'] for i in list2]
    # count=[i['count'] for i in list2]
    # result=[]
    # result.append(host)
    # result.append(name)
    # result.append(severity)
    # result.append(count)
    #print(result)
    #return result
    return list2
def convertohtml(result):
    d = {}
    title=['主机','触发器','告警级别','告警次数']
    index = 0
    for t in title:
        d[t]=result[index]
        index = index+1
    df = pandas.DataFrame(d)
    df = df[title]
    h = df.to_html(index=False)
    return h
def datatohtml(list2):
    tables = ''
    for i in range(len(list2)):
        host,name,severity,count = list2[i]['host'], list2[i]['name'], list2[i]['severity'], list2[i]['count']
        td = "<td>%s</td> <td>%s</td> <td>%s</td> <td>%s</td>"%( host,name, 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
def sendmail(base_html):
    from_addr = '[email protected]'
    password = '没有故事的陈师傅'
    to_addr = '[email protected]'
    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)
auth=gettoken()
timestamp=timestamp(x,y)
getevent=getevent(auth,timestamp)
base_html=datatohtml(getevent)
sendmail(base_html)
logout(auth)

标签:count,name,auth,list2,zabbix,API,result,告警,severity
From: https://www.cnblogs.com/k8s-pod/p/17928378.html

相关文章

  • 安防LiteCVR监控视频云平台支持按时间查询告警列表消息
    随着人们对安全监控的需求不断提高,传统的监控设备已经无法满足人们的需求。因此,高清监控设备的出现成为了行业发展的必然趋势。高清监控设备不仅可以提供更清晰的画面,还可以提供更准确的监控信息。这也使得高清监控设备在安防监控领域的应用越来越广泛。LiteCVR视频平台基于云......
  • grep -Ev '#|^$' zabbix_server.conf 显示配置文件 命令
    grep-Ev'#|^$'zabbix_server.confroot@k8s-node01:/etc/zabbix#grep-Ev'#|^$'zabbix_server.confLogFile=/var/log/zabbix/zabbix_server.logLogFileSize=0PidFile=/run/zabbix/zabbix_server.pidSocketDir=/run/zabbixDBName=zabbixDBUser=......
  • 淘宝/天猫商品API:实时数据获取与安全隐私保护的指南
    一、引言随着电子商务的快速发展,淘宝/天猫等电商平台已成为商家和消费者的重要交易场所。对于电商企业而言,实时掌握店铺商品的销售情况、库存状态等信息至关重要。然而,手动管理和更新商品信息既费时又费力。因此,淘宝/天猫提供的商品API成为商家实时获取商品数据的关键工具。本文将......
  • 免费IDEA插件推荐-Apipost-Helper
    IDEA插件市场中的API调试插件不是收费(FastRequest)就是不好用(apidoc、apidocx等等)今天给大家介绍一款国产的API调试插件:Apipost-Helper,完全免费且好看好用!这款插件由Apipost团队开发的,其官方介绍是:用于IDEA项目快速生成API文档,快速查询接口、接口代码功能,并支持在IDEA中进行API调......
  • zabbix
    1、zabbix的安装1.1zabbix服务端安装1.1.1获取yum源阿里云:Wgethttps://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm安装:rpm–ivhzabbix-release-4.4-1.el7.noarch.rpm1.1.2启动可选rpm的软件仓库yum-yinstallyum-utils#安装......
  • ArcGIS API for JavaScript 4.x 免登录调用arcgis online私有服务
    APIkeys|ArcGISDevelopers 前言 本来以为普通用户调用服务只能依靠登录,仔细研究了一下可以通过key来实现免登录调用服务。背景最近在做一个BIM结合GIS的Demo,先通过arcgispro将.rvt文件配准到实际位置,然后打包成slpk文件,拖拽到arcgisonline发布出来,最后在前端加载。 ......
  • 使用代码生成工具快速开发应用-结合后端Web API提供接口和前端页面快速生成,实现通用的
    在前面随笔《在Winform应用中增加通用的业务编码规则生成》,我介绍了基于Winform和WPF的一个通用的业务编码规则的管理功能,本篇随笔介绍基于后端WebAPI接口,实现快速的Vue3+ElementPlus前端界面的开发整合,同样是基于代码生成工具实现快速的前端代码的生成处理。1、通用的业务编码规......
  • 自动化和API接口可以应用在哪些工作场景中?
    随着科技的不断进步和发展,新一代的网络安全技术也在不断涌现。其中,VMLogin指纹浏览器以其独特的自动化和API接口功能,为各行各业的网络安全和数据隐私保护提供了可靠的解决方案。一、自动化功能:任何具有重复性的工作可以在VMLogin通过自动化完成。您可以使用Selenium、Puppeteer、RE......
  • 界面控件DevExpress v23.2全新发布 - 全新升级的UI本地化API
    DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpressDashboardeXpressApp框架、适用于VisualStudio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress今年第一个重要版本v23.1正式发布,该版本拥有众多新产品和数十个具有高影响力......
  • Ubuntu环境下SomeIP/CommonAPI环境搭建详细步骤
    环境搭建1.Boost安装下载Boost源码:https://www.boost.org/users/download/编译安装首先安装编译所需依赖sudoapt-getinstallbuild-essentialg++sudoapt-getinstallinstallpython-devautotools-devsudoapt-getinstallinstalllibicu-devbuild-essentialsudoapt-......