# -*- 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. HTTPS All In One

    HTTPS All In One HTTPS & web security HTTPS Hypertext Transfer Protocol Secure HTTPS is an exten ...

  2. 析构函数 & 构造函数

    析构函数 & 构造函数 C++ 析构函数(destructor) 与构造函数相反,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统自动执行析构函数. 析构函数往往用来做"清理 ...

  3. js var & let & const All In One

    js var & let & const All In One js var & let & const 区别对比 var let const 区别 是否存在 hois ...

  4. js types & primitive & object

    js types & primitive & object js 数据类型 typeof null // "object" typeof undefined // ...

  5. Web SQL& IndexedDB

    Web SQL& IndexedDB https://developer.mozilla.org/en/docs/Web/API/IndexedDB_API https://mdn.githu ...

  6. Linux & terminal color & command line color

    Linux & terminal color & command line color how to change Linux terminal color https://askub ...

  7. LGTM & code review

    LGTM & code review LGTM is an acronym meaning looks good to me, frequently used when reviewing d ...

  8. VAST维萨币二月发行,高倍币重现江湖!

    市场长期的历史经验表明,经营盈利能力最好的企业,经常是那些现在的经营方式与5年前甚至10年前几乎完全相同的企业.这个经营模式放到币圈也是一样的,2020年的挖矿是最火的,这个模式现在在市场也同样受用. ...

  9. HttpDns 原理是什么

    本文转载自HttpDns 原理是什么 什么是 DNS DNS(Domain Name System,域名系统),DNS 服务用于在网络请求时,将域名转为 IP 地址.能够使用户更方便的访问互联网,而不 ...

  10. TERSUS无代码开发(笔记06)-简单实例手机端页面设计

    手机端的设计 1.页面说明 2.默认页面===>提交请假单(上面页面双击进入,页面主要编辑区) 2.1默认页面===>提交请假单===>头部区(页面部份主要编辑区01) 2.1.1默 ...