当前位置:首页 > 科技  > 软件

探索Zabbix API(三):导出主机组资源使用率

来源: 责编: 时间:2023-12-20 09:22:49 290观看
导读今天我们来讲一下探索zabbixAPI的最后一章,结合前两章的内容,导出指定主机组的资源使用情况。01、使用场景通过该脚本,系统管理员和运维团队可以定期分析系统中特定主机组的性能数据,包括主机的基本信息和 CPU 使用率。这

今天我们来讲一下探索zabbixAPI的最后一章,结合前两章的内容,导出指定主机组的资源使用情况。

01、使用场景

0NR28资讯网——每日最新资讯28at.com

0NR28资讯网——每日最新资讯28at.com

0NR28资讯网——每日最新资讯28at.com

通过该脚本,系统管理员和运维团队可以定期分析系统中特定主机组的性能数据,包括主机的基本信息和 CPU 使用率。这有助于识别系统中的性能瓶颈、监测系统资源的使用情况,并及时采取措施进行优化。0NR28资讯网——每日最新资讯28at.com

0NR28资讯网——每日最新资讯28at.com

0NR28资讯网——每日最新资讯28at.com

02、导出数据的方法介绍

0NR28资讯网——每日最新资讯28at.com

0NR28资讯网——每日最新资讯28at.com

0NR28资讯网——每日最新资讯28at.com

0NR28资讯网——每日最新资讯28at.com

0NR28资讯网——每日最新资讯28at.com

1.时间函数,用途取监控时间范围0NR28资讯网——每日最新资讯28at.com

0NR28资讯网——每日最新资讯28at.com

x = (datetime.datetime.now() - datetime.timedelta(hours=12)).strftime("%Y-%m-%d %H:%M:%S")y = (datetime.datetime.now()).strftime("%Y-%m-%d %H:%M:%S")z = (time.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

函数解析:0NR28资讯网——每日最新资讯28at.com

x: 表示当前时间减去 12 小时的时间,以字符串形式表示。这一时间字符串的格式为 "%Y-%m-%d %H:%M:%S",即年-月-日 时:分:秒。0NR28资讯网——每日最新资讯28at.com

y: 表示当前时间,以字符串形式表示,同样使用 "%Y-%m-%d %H:%M:%S" 格式。0NR28资讯网——每日最新资讯28at.com

z: 使用 time.strftime 函数获取当前时间的字符串表示,格式为 "%Y-%m-%d %H-%M-%S",即年-月-日 时-分-秒。0NR28资讯网——每日最新资讯28at.com

timestamp函数首先使用 time.strptime 函数将时间字符串转换为结构化的时间元组。然后,通过 time.mktime 函数将时间元组转换为时间戳,并使用 str 函数将时间戳转换为字符串。0NR28资讯网——每日最新资讯28at.com

0NR28资讯网——每日最新资讯28at.com

0NR28资讯网——每日最新资讯28at.com

2.获取指定监控项的ID0NR28资讯网——每日最新资讯28at.com

0NR28资讯网——每日最新资讯28at.com

Cpu_load="system.cpu.util[]"def get_cpu_utilization(host_id, auth):    data = {        "jsonrpc": "2.0",        "method": "item.get",        "params": {            "output": "extend",            "hostids": host_id,            "search": {                "key_": Cpu_load              },            "sortfield": "name"        },        "auth": auth,        "id": 1    }    response = requests.post(url=ApiUrl, headers=header, jsnotallow=data)    result = json.loads(response.content)    items = result["result"]

函数解析:0NR28资讯网——每日最新资讯28at.com

函数首先获取与主机关联的监控项,然后从中找到 CPU 使用率相关的监控项。0NR28资讯网——每日最新资讯28at.com

Cpu_load:表示要获取的主机监控项的key值(可以在对应主机的监控项中查看,这里选的是CPU使用率)0NR28资讯网——每日最新资讯28at.com

get_cpu_utilization(host_id, auth): 这个函数用于获取指定主机的 CPU 使用率。它首先通过 Zabbix API 中的 item.get 方法获取主机的监控项列表,然后从中找到与 CPU 使用率相关的监控项,并获取其历史数据。最终,返回一个包含 CPU 使用率历史数据的列表。0NR28资讯网——每日最新资讯28at.com

host_id: 主机的ID,表示要获取 CPU 使用率的主机。0NR28资讯网——每日最新资讯28at.com

auth: 认证令牌,用于通过 Zabbix API 进行身份验证。0NR28资讯网——每日最新资讯28at.com

0NR28资讯网——每日最新资讯28at.com

0NR28资讯网——每日最新资讯28at.com

3.获取历史数据函数0NR28资讯网——每日最新资讯28at.com

0NR28资讯网——每日最新资讯28at.com

def get_item_history(item_id, auth):    data = {        "jsonrpc": "2.0",        "method": "history.get",        "params": {            "output": "extend",            "itemids": item_id,            "history": 0,  # 0代表数值型数据            "sortfield": "clock",            "sortorder": "DESC",            "limit": 1        },        "auth": auth,        "id": 1    }    response = requests.post(url=ApiUrl, headers=header, jsnotallow=data)    result = json.loads(response.content)    history_data = result["result"]    return history_data

函数解析:0NR28资讯网——每日最新资讯28at.com

函数通过 Zabbix API 发送请求,拿到历史数据,然后将其返回供后续使用。0NR28资讯网——每日最新资讯28at.com

get_item_history(item_id, auth): 这个函数用于获取指定监控项(item)的历史数据。它构建了一个 JSON-RPC 请求,其中包括监控项的 item_id,并通过 Zabbix API 中的 history.get 方法获取历史数据。该函数返回一个包含历史数据的列表。0NR28资讯网——每日最新资讯28at.com

item_id: 监控项的ID,表示要获取历史数据的监控项。0NR28资讯网——每日最新资讯28at.com

0NR28资讯网——每日最新资讯28at.com

0NR28资讯网——每日最新资讯28at.com

4.获取主机信息喝资源使用率并导入以主机组名命名的CSV文件中0NR28资讯网——每日最新资讯28at.com

0NR28资讯网——每日最新资讯28at.com

def export_host_info(token, start, end, group_names, group_name_num2):    filename = f'{group_name_num2}.csv'    with open(filename, 'w', newline='', encoding='utf-8-sig') as f:        writer = csv.DictWriter(f, fieldnames=["Group", "Hostname", "IP", "CPU使用率"])        writer.writeheader()        for group in group_names:            if group['name'] == group_name_num2:                group_id = group['groupid']                group_name = group['name']                hosts = get_hosts_in_group(group_id, token)                for host in hosts:                    hostname = host['name']                    ip = host['interfaces'][0]['ip']                    cpu_utilization = get_cpu_utilization(host['hostid'], token)                    cpu_value = cpu_utilization[0]['value'] if cpu_utilization else "N/A"                    writer.writerow({"Group": group_name, "Hostname": hostname, "IP": ip, "CPU使用率": cpu_value})

函数解析:0NR28资讯网——每日最新资讯28at.com

filename: 通过使用用户选择的主机组名(group_name_num2)作为文件名的一部分创建 CSV 文件的名称。打开 CSV 文件,并使用 csv.DictWriter 对象创建一个 CSV 写入器,定义了列名为 ["Group", "Hostname", "IP", "CPU使用率"]。0NR28资讯网——每日最新资讯28at.com

写入 CSV 文件的表头行。遍历主机组信息,找到用户选择的主机(group_name_num2)。获取该主机组内的所有主机信息,遍历每个主机。对于每个主机,获取主机名(hostname)、IP地址(ip)和对应的 CPU 使用率(cpu_value)。0NR28资讯网——每日最新资讯28at.com

将这些信息写入主机组命名的 CSV 文件。0NR28资讯网——每日最新资讯28at.com

0NR28资讯网——每日最新资讯28at.com

0NR28资讯网——每日最新资讯28at.com

5.打印所有主机组名,根据用户输入模糊匹配列表输出,供用户参考输入。根据用户的输入获取准确的主机组名0NR28资讯网——每日最新资讯28at.com

0NR28资讯网——每日最新资讯28at.com

def get_zabbix_data():    token = get_token()    start, end = timestamp(x, y)    # Get and display the list of host groups    host_group_list = []    group_names = get_group_name(token)    for index, group in enumerate(group_names, start=1):        host_group_list.append(f"{index}.{group['name']}")    print(host_group_list)    # User input and selection    group_name = input("请输入zabbix主机组名称: ")    result = fuzzy_match_list(group_name, host_group_list)    print(result)    group_name_num = input("请输入要查询的主机组序号: ")    # Get user-selected host group information    group_name_num1 = host_group_list[int(group_name_num) - 1]    group_name_num2 = group_name_num1.split(".")[1]    print(group_name_num2)    return token, start, end, group_names, group_name_num2    #调用 get_zabbix_data 函数获取认证令牌、时间范围、主机组列表和用户选择的主机组名。token, start, end, group_names, group_name_num2 = get_zabbix_data()#调用 export_host_info 函数,将获取的信息写入 CSV 文件。export_host_info(token, start, end, group_names, group_name_num2)

函数解析:0NR28资讯网——每日最新资讯28at.com

调用 get_token 获取 Zabbix API 的认证令牌 token。0NR28资讯网——每日最新资讯28at.com

调用 timestamp(x, y) 获取时间范围的起始时间戳 start 和结束时间戳 end。0NR28资讯网——每日最新资讯28at.com

获取并输出主机组列表,用户输入所需的主机组名称。0NR28资讯网——每日最新资讯28at.com

使用 fuzzy_match_list 函数对用户输入的主机组名称进行模糊匹配,输出匹配结果。0NR28资讯网——每日最新资讯28at.com

用户输入要查询的主机组序号,计算用户想要的主机组的序号(group_name_num1),然后裁剪掉序号前面的部分得到用户选择的主机组名(group_name_num2)。0NR28资讯网——每日最新资讯28at.com

最后使用两段代码完成调用。0NR28资讯网——每日最新资讯28at.com

token, start, end, group_names, group_name_num2 = get_zabbix_data()0NR28资讯网——每日最新资讯28at.com

export_host_info(token, start, end, group_names, group_name_num2)0NR28资讯网——每日最新资讯28at.com

0NR28资讯网——每日最新资讯28at.com

0NR28资讯网——每日最新资讯28at.com

03、结论

0NR28资讯网——每日最新资讯28at.com

0NR28资讯网——每日最新资讯28at.com

0NR28资讯网——每日最新资讯28at.com

文章描写了 Zabbix API 的脚本通过与用户交互,动态获取 Zabbix 中主机组的信息,对用户选择的特定主机组,获取该主机组内主机的基本信息以及 CPU 使用率,并将这些信息导出到 CSV 文件中。通过 Zabbix 的认证令牌,以及时间范围的设置,使得用户可以根据自己的需求灵活地查询和导出监控数据。从而更好地了解和管理系统的性能。0NR28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-50025-0.html探索Zabbix API(三):导出主机组资源使用率

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Java中“100=100”为True,而"1000=1000"为False?

下一篇: 掌握Python的高级用法:技巧、技术和实用性示例

标签:
  • 热门焦点
  • 6月iOS设备好评榜:第一蝉联榜首近一年

    作为安兔兔各种榜单里变化最小的那个,2023年6月的iOS好评榜和上个月相比没有任何排名上的变化,仅仅是部分设备好评率的下降,长年累月的用户评价和逐渐退出市场的老款机器让这
  • 5月iOS设备性能榜:M1 M2依旧是榜单前五

    和上个月一样,没有新品发布的iOS设备性能榜的上榜设备并没有什么更替,仅仅只有跑分变化而产生的排名变动,刚刚开始的苹果WWDC2023,推出的产品也依旧是新款Mac Pro、新款Mac Stu
  • 0糖0卡0脂 旭日森林仙草乌龙茶优惠:15瓶到手29元

    旭日森林无糖仙草乌龙茶510ml*15瓶平时要卖为79.9元,今日下单领取50元优惠券,到手价为29.9元。产品规格:0糖0卡0脂,添加草本仙草汁,清凉爽口,富含茶多酚,保留
  • Rust中的高吞吐量流处理

    作者 | Noz编译 | 王瑞平本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 19个 JavaScript 单行代码技巧,让你看起来像个专业人士

    今天这篇文章跟大家分享18个JS单行代码,你只需花几分钟时间,即可帮助您了解一些您可能不知道的 JS 知识,如果您已经知道了,就当作复习一下,古人云,温故而知新嘛。现在,我们就开始今
  • 这款新兴工具平台,让你的电脑效率翻倍

    随着信息技术的发展,我们获取信息的渠道越来越多,但是处理信息的效率却成为一个瓶颈。于是各种工具应运而生,都在争相解决我们的工作效率问题。今天我要给大家介绍一款效率
  • 消息称小米汽车开始筛选交付中心:需至少120个车位

    IT之家 7 月 7 日消息,日前,有微博简介为“汽车行业从业者、长三角一体化拥护者”的微博用户 @长三角行健者 发文表示,据经销商集团反馈,小米汽车目前
  • 荣耀Magicbook V 14 2021曙光蓝版本正式开售,拥有触摸屏

    荣耀 Magicbook V 14 2021 曙光蓝版本正式开售,搭载 i7-11390H 处理器与 MX450 显卡,配备 16GB 内存与 512GB SSD,重 1.48kg,厚 14.5mm,具有 1.5mm 键盘键程、
Top