zabbix手动生成监控报表并定时发送短信

优采云 发布时间: 2020-08-13 07:06

  实现思路:

  

  zabbix提供了一个获取风波的api,可以依据此api获取zabbix原创报案数据 将获取到的原创数据进行统计去重,统计触发器出现次数,并把重复的触发器删掉,将须要用到的数据统一放在一个列表上将第二步的列表进行遍历,并传入到HTML中,或者也可以使用pandas直接把数据建模,然后手动生成HTML表格将生成的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 = "%s %s %s %s"%(name, host, severity, count)

tables = tables + "%s"%td

base_html="""

zabbix监控告警

告警级别: 1 表示:信息 2 表示:告警 3 表示:一般严重 4 表示:严重 5 表示:灾难

主机触发器告警级别告警次数%s

zabbix告警统计

""" %tables

return base_html

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

  发送报表电邮

  将生成的HTML通过短信发送

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线