# -*- coding:utf-8 -*-
import json
import requests
import time,datetime
import csv,chardet

def getToken(url, post_headers, url_user, url_password):
post_data = {
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": url_user,
"password": url_password
},
"id": 1
}
ret = requests.post(url, data=json.dumps(post_data), headers=post_headers)
return json.loads(ret.text).get("result")

def getEvent(url, post_headers, auth,allgroupid_list, time_start, time_end):
post_data = {
"jsonrpc": "2.0",
"method": "event.get",
"params": {
"output": "extend",
#"time_from": "1615132800",
#"time_till": "1615737599",
"time_from": time_start,
"time_till": time_end,
"select_acknowledges": "extend",
"selectTags": "extend",
"selectSuppressionData": "extend",
"groupids": allgroupid_list,
"sortfield": ["clock", "eventid"],
"value": 1, #1表示告警事件,0表示恢复事件
"severities": [5,4,3,2], #5:一级,4:二级,3:三级,2:四级,
"sortorder": "DESC"
},
"auth": auth,
"id": 1
}
ret = requests.post(url, data = json.dumps(post_data), headers = post_headers)
ret_dict = json.loads(ret.text)
print(ret_dict.get("result"))
for i in ret_dict.get("result"):
print(i)
print(len(ret_dict.get("result")))
return ret_dict

def eventAllExportCsv(data,csvfile):
data_list = data.get("result")
severity = []
f = open(csvfile, 'w', newline='')
csv_write = csv.writer(f)
row0 = ["eventid","clock","name","severity"] #csv第一行标题
csv_write.writerow(row0)
for i in data_list:
severity.append(i.get("severity"))
eventlevel = i.get("severity")
if eventlevel == "5":
eventlevel = "一级"
elif eventlevel == "4":
eventlevel = "二级"
elif eventlevel == "3":
eventlevel = "三级"
elif eventlevel == "2":
eventlevel = "四级"
else:
eventlevel = "未知"
eventtime = time.localtime(int(i.get("clock")))
eventtime = time.strftime("%Y-%m-%d %H:%M:%S", eventtime)
#print(i.get("eventid") + " " + eventtime + " " + i.get("name") + " " + eventlevel)
csv_write.writerow([i.get("eventid"),eventtime,i.get("name"),eventlevel])
return severity

def severityCountAddToCsv(severity,csvfile):
f = open(csvfile, 'a+', newline='')
csv_write = csv.writer(f)
csv_write.writerow([])
csv_write.writerow(["告警等级","总数"])
csv_write.writerow(["一级告警", str(severity.count('5'))])
csv_write.writerow(["二级告警", str(severity.count('4'))])
csv_write.writerow(["三级告警", str(severity.count('3'))])
csv_write.writerow(["四级告警", str(severity.count('2'))])

def typeCountAddToCsv(typeDict,csvfile):
f = open(csvfile, 'a+', newline='')
csv_write = csv.writer(f)
csv_write.writerow([])
csv_write.writerow(["监控对象类型","总数"])
for key in typeDict:
csv_write.writerow([key, typeDict[key]])

def typeGroupCount(typegroupname):
typegroupid_list = getHostGroupId(url, post_headers, auth, typegroupname)
intcount = {}
for i in range(len(typegroupid_list)):
eventdata = getEvent(url, post_headers, auth, typegroupid_list[i], time_start, time_end)
strkey = typegroupname[i]
intcount[strkey] = len(eventdata.get("result"))
newadd = {}
venter_data = 0
storage_data = 0
hardware_data = 0
for key in intcount:
if "06-" in key:
storage_data += intcount[key]
elif "10-" in key:
hardware_data += intcount[key]
elif "12-" in key or "Hypervisors" in key:
venter_data += intcount[key]
elif "01-" in key:
newadd_key = "Linux系统"
newadd_value = intcount[key]
elif "02-" in key:
newadd_key = "Windows系统"
newadd_value = intcount[key]
elif "Oracle" in key:
newadd_key = "Oracle"
newadd_value = intcount[key]
elif "Mysql" in key:
newadd_key = "Mysql"
newadd_value = intcount[key]
else :
pass
newadd[newadd_key] = newadd_value
newadd["服务器硬件"] = hardware_data
newadd["venter"] = venter_data
newadd["存储"] = storage_data
print(newadd)
return newadd

def appgroupCount(appgroupname):
appgroupid_list = getHostGroupId(url, post_headers, auth, appgroupname)
intcount = {}
bqx_totalcount = []
zab_totalcount = []
ac_totalcount = []
portal_totalcount = []
sap_totalcount = []
srm_totalcount = []
bk_totalcount = []
plm_totalcount = []
bom_totalcount = []
bigdata_totalcount = []
carnet_totalcount = []
for i in range(len(appgroupid_list)):
eventdata = getEvent(url, post_headers, auth, appgroupid_list[i], time_start, time_end)
strkey = appgroupname[i]
appcount = []
for j in eventdata.get("result"):
appcount.append(j.get("severity"))
if "50-" in appgroupname[i]:
strkey = "XXX系统"
bqx_totalcount += appcount
intcount[strkey] = bqx_totalcount
elif "13-" in appgroupname[i]:
strkey = "ACXX"
ac_totalcount += appcount
intcount[strkey] = ac_totalcount
elif "20-" in appgroupname[i]:
strkey = "XX门户网站"
portal_totalcount += appcount
intcount[strkey] = portal_totalcount
elif "30-" in appgroupname[i]:
strkey = "XXX系统"
sap_totalcount += appcount
intcount[strkey] = sap_totalcount
elif "31-" in appgroupname[i]:
strkey = "XXX系统"
srm_totalcount += appcount
intcount[strkey] = srm_totalcount
elif "32-" in appgroupname[i]:
strkey = "XX运维平台"
bk_totalcount += appcount
intcount[strkey] = bk_totalcount
elif "40-" in appgroupname[i]:
strkey = "XX系统"
plm_totalcount += appcount
intcount[strkey] = plm_totalcount
elif "45-" in appgroupname[i]:
strkey = "XX系统"
bom_totalcount += appcount
intcount[strkey] = bom_totalcount
elif "51-" in appgroupname[i]:
strkey = "大数据平台"
bigdata_totalcount += appcount
intcount[strkey] = bigdata_totalcount
elif "70-" in appgroupname[i]:
strkey = "XXX"
carnet_totalcount += appcount
intcount[strkey] = carnet_totalcount
elif "11-" in appgroupname[i]:
strkey = "Zabbix系统"
zab_totalcount = appcount
intcount[strkey] = zab_totalcount
else:
pass
print(intcount)
for key in intcount:
intcount[key] = [intcount[key].count("5"),intcount[key].count("4"),intcount[key].count("3"),intcount[key].count("2")]
print(intcount)
return intcount

def appCountAddToCsv(appDict, csvfile):
f = open(csvfile, 'a+', newline='')
csv_write = csv.writer(f)
csv_write.writerow([])
csv_write.writerow(["应用系统", "一级", "二级", "三级", "四级"])
for key in appDict:
csv_write.writerow([key, appDict[key][0], appDict[key][1], appDict[key][2], appDict[key][3]])

def getHostGroupId(url, post_headers, auth, hostgroupname):
post_data = {
"jsonrpc": "2.0",
"method": "hostgroup.get",
"params": {
"output": "extend",
"filter": {
"name": hostgroupname
}
},
"auth": auth,
"id": 1
}
ret = requests.post(url, data = json.dumps(post_data), headers = post_headers)
print("ret:",json.loads(ret.text))
print("result:", json.loads(ret.text).get("result"))
groupid_list = []
groupid_dict = {}
for i in json.loads(ret.text).get("result"):
groupid_list.append(i.get("groupid"))
strkey = i.get("name")
strvalue = i.get("groupid")
groupid_dict[strkey] = strvalue

print("groupid_dict:",groupid_dict)
return groupid_list

if __name__ == '__main__':
url = 'http://xx.xx.xx.xx/api_jsonrpc.php' #zabbix监控系统接口地址
post_headers = {'Content-Type': 'application/json'}
url_user = "******"
url_passwd = "******"
auth = getToken(url,post_headers,url_user,url_passwd) #获取token值
print(auth)
date = datetime.datetime.now() #获取当前时间
time_start = date - datetime.timedelta(days=date.weekday() + 7) # 上周开始时间
time_end = date - datetime.timedelta(days=date.weekday() + 1) # 上周结束时间
time_start =time.strptime(time_start.strftime("%Y-%m-%d")+" 00:00:00", "%Y-%m-%d %H:%M:%S")
time_end = time.strptime(time_end.strftime("%Y-%m-%d")+" 23:59:59", "%Y-%m-%d %H:%M:%S")
time_start = int(time.mktime(time_start))
time_end = int(time.mktime(time_end))

# 导出过去一周所有告警到csx文件
#csvfile = "过去一周监控告警统计" + time.strftime('_%Y%m%d%H%M%S', time.localtime(time.time())) + ".csv"
allgroupname = ["01-Linux生产系统", "02-Windows生产系统", "06-存储-A10负载均衡监控", "06-存储-光纤交换机监控", \
"06-存储-存储日志监控", "09-信息管理中心-系统运维部-DBA组-Mysql", "09-信息管理中心-系统运维部-DBA组-Oracle", \
"10-服务器硬件监控-Dell", "10-服务器硬件监控-H3C", "10-服务器硬件监控-华为", "10-西安机房服务器硬件监控-H3C",\
"12-信息管理中心-系统运维部-Vcenter", "20-宝能门户网站", "Hypervisors"]
getEvent(url, post_headers, auth, "116", time_start, time_end)
allgroupid_list = getHostGroupId(url, post_headers, auth, allgroupname)
eventdata = getEvent(url, post_headers, auth, allgroupid_list, time_start, time_end)
severity_list = eventAllExportCsv(eventdata,csvfile)
print(eventdata.get("result"))
print(len(eventdata.get("result")))

# #按告警等级统计,统计追加到csv文件
severityCountAddToCsv(severity_list,csvfile)

#按对象类型统计,统计追加到csv文件
typegroupname = ["01-Linux生产系统", "02-Windows生产系统","06-存储-A10负载均衡监控", "06-存储-光纤交换机监控", \
"06-存储-存储日志监控", "09-信息管理中心-系统运维部-DBA组-Mysql", "09-信息管理中心-系统运维部-DBA组-Oracle", \
"10-服务器硬件监控-Dell", "10-服务器硬件监控-H3C", "10-服务器硬件监控-华为", "10-西安机房服务器硬件监控-H3C", \
"12-信息管理中心-系统运维部-Vcenter", "Hypervisors"]
typeDict = typeGroupCount(typegroupname)
typeCountAddToCsv(typeDict,csvfile)

# 按应用系统统计,统计追加到csv文件
appgroupname = ["11-信息管理中心-系统运维部-zabbix监控平台", "13-信息管理中心-系统管控部-AC日志", "20-宝能门户网站", \
"30-信息管理中心-研发管理部-SAP系统", "31-信息管理中心_系统运营部-SRM-直采系统", \
"31-信息管理中心_系统运营部-SRM-间采系统", "32-信息管理中心_系统运营部-蓝鲸智云平台", \
"40-信息管理中心_信息运营部-PLM系统", "45-信息管理中心_研究总院IT部-BOM管理系统", "50-宝汽销-系统运维部", \
"50-宝汽销-系统运维部-Mysql", "51-信息管理中心_研究院-大数据平台", "70-前海七剑-研究院-车联网"]
appDict = appgroupCount(appgroupname)
appCountAddToCsv(appDict, csvfile)

自动统计zabbix过去一周监控告警的更多相关文章

  1. python自动统计zabbix系统监控覆盖率

    脚本主要功能: 1)通过zabbix api接口采集所有监控主机ip地址: 2)通过cmdb系统(蓝鲸)接口采集所有生产主机IP地址.主机名.操作系统.电源状态: 3)以上2步返回数据对比,找出未监控 ...

  2. Zabbix添加web页面监控告警

    一,选择添加了web监控的主机 二,创建一个告警触发器 三,定义监控项 设置完毕假如网站down就会触发告警 怎么设置web监控以及触发告警action参考 Zabbix使用SMTP发送邮件报警并且制 ...

  3. Zabbix中获取各用户告警媒介分钟级统计

    任务内容: 获取Zabbix各用户告警媒介分钟级统计,形成趋势图,便于观察各用户在每分钟收到的告警数量,在后续处理中,可以根据用户在某时间段内(例如3分钟内)收到的邮件总数,来判断是否有告警洪水的现象 ...

  4. 24 Zabbix系统配置日志监控告警--关键字触发

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 24 Zabbix系统配置日志监控告警--关键字触发 trapper是被监控主机主动发送数据给za ...

  5. 运维监控-Zabbix Server 使用微信 WeChat 告警

    运维监控-Zabbix Server 使用微信 WeChat 告警 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 微信公众号告警每个一天只支持1000次告警,如果超出这个次数了就不 ...

  6. zabbix监控告警Received empty response from Zabbix Agent Assuming that agent dropped connection

    zabbix监控告警Received empty response from Zabbix Agent Assuming that agent dropped connection错误 查看zabbi ...

  7. zabbix模板的自动发现规则(ldd)实现被监控项自动发现

    zabbix模板的自动发现规则(ldd)实现被监控项自动发现 自动发现规则(ldd)用途说明 在zabbix自带的linux模板的自动发现规则中,有一个Mounted filesystem disco ...

  8. Zabbix的集中式监控

    相对于传统的ZABBIX硬件系统级监控(CPU,内存,硬盘,网卡),应用级的监控就显得有些复杂了. 如果对不同的应该来不同的应用,配置会很多的. 如果我们能在一个指定的AGENT上监控所有的APACH ...

  9. 分布式监控告警平台Centreon快速使用

    一. Centreon概述 Centreon是一款功能强大的分布式IT监控系统,它通过第三方组件可以实现对网络.操作系统和应用程序的监控:首先,它是开源的,我们可以免费使用它:其次,它的底层采用nag ...

随机推荐

  1. 使用 js 实现十大排序算法: 基数排序

    使用 js 实现十大排序算法: 基数排序 基数排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  2. GitHub GraphQL API v4 & GitHub REST API v3

    GitHub, GraphQL API, v4 ,REST API, v3, GraphQL, https://developer.github.com/v4/ https://developer.g ...

  3. Expose Loader & shit jquery

    Expose Loader webpack https://github.com/xgqfrms/FEIQA/issues/31#issuecomment-418255126 require(&quo ...

  4. bind & this & new & arrow function

    bind & this & new & arrow function this bind call apply new arrow function arrow functio ...

  5. convert image to base64 in javascript

    convert image to base64 in javascript "use strict"; /** * * @author xgqfrms * @license MIT ...

  6. ES-Next & ECMAScript 2019

    ES-Next & ECMAScript 2019 Data Types 8 种 js 基本数据类型 8 zhon The latest ECMAScript standard defines ...

  7. nodejs 查看进程表

    psaux tasklist system-tasks const { exec } = require("child_process"); const isWindows = p ...

  8. HGAME apache

    HGAME apache Linux下六十四位可执行文件 IDA找主函数 输入长度为35的字符串,经过一次函数处理,之后if条件函数的返回值为1,就能判定输入就是flag 函数sub_1447的参数 ...

  9. 移动端时间回显iphone出现的问题

    new Date(item.startTime.replace(/-/g, '/') dateFormat('hh:mm', new Date(item.startTime.replace(/-/g, ...

  10. js如何判断一假则假,全真则真

    思路:初始化flag参数为true,一旦有一个为假,则将flag赋值为false,最后返回. 代码如下: checkSupplyWt(list){ var flag = true; list.forE ...