如何从Aruba AirWave获取设备性能指标及代码修改建议
修改Aruba AirWave API代码以获取设备性能指标
要从Aruba AirWave获取特定设备的CPU使用率、连接数、内存使用率等指标,需要基于现有代码调整接口调用逻辑——原代码仅获取AP基础列表,性能指标需要访问单设备详情接口。以下是具体修改方案:
1. 新增常量定义
添加设备详情的URL模板,AirWave通过设备LAN MAC地址定位单设备详情接口:
# 设备详情XML模板,{lan_mac}替换为目标AP的LAN MAC地址 DEVICE_DETAIL_URL = 'https://aruba-airwave.example.com/ap_detail.xml?mac={lan_mac}'
2. 新增函数获取单设备性能指标
编写专门函数,根据AP的LAN MAC地址请求详情接口并解析指标:
def get_device_metrics(session, lan_mac): """获取单个AP的CPU、内存、客户端连接数指标""" detail_url = DEVICE_DETAIL_URL.format(lan_mac=lan_mac) output = session.get(detail_url, headers=HEADERS) tree = ET.fromstring(output.content) metrics = {} # 解析CPU使用率(节点路径需根据AirWave实际XML结构调整) cpu_node = tree.find('./performance/cpu_usage') metrics['cpu_usage'] = cpu_node.text if cpu_node is not None else 'N/A' # 解析内存使用率 mem_node = tree.find('./performance/memory_usage') metrics['memory_usage'] = mem_node.text if mem_node is not None else 'N/A' # 解析客户端总连接数 client_node = tree.find('./clients/total') metrics['client_count'] = client_node.text if client_node is not None else '0' return metrics
3. 整合指标到AP列表数据中
修改get_ap_list函数,遍历每个AP时调用指标获取函数,将指标合并到AP字典:
def get_ap_list(session): """获取AP列表及对应性能指标""" output = session.get(AP_LIST_URL, headers=HEADERS) ap_list_output = output.content tree = ET.fromstring(ap_list_output) ap_list = [] for i in tree.iter(tag='ap'): fqdn = i.find('fqdn').text lan_ip = i.find('lan_ip').text lan_mac = i.find('lan_mac').text if i.find('lan_mac') is not None else "None" mfgr = i.find('mfgr').text model = i.find('model').text syslocation = i.find('syslocation').text # 获取当前AP的性能指标 metrics = get_device_metrics(session, lan_mac) ap_list.append({ 'lan_mac' : lan_mac, 'lan_ip' : lan_ip, 'fqdn' : fqdn, 'mfgr' : mfgr, 'model' : model, 'syslocation' : syslocation, **metrics # 展开指标字典,合并到AP信息中 }) return ap_list
4. 更新CSV输出字段
修改print_into_csv函数,新增指标字段并写入表头:
def print_into_csv(ap_list): """将AP列表及指标输出为CSV格式""" fieldnames = ['lan_mac', 'lan_ip', 'fqdn', 'mfgr', 'model', 'syslocation', 'cpu_usage', 'memory_usage', 'client_count'] writer = csv.DictWriter(sys.stdout, fieldnames=fieldnames, delimiter=DELIMITER) writer.writeheader() # 写入CSV表头 writer.writerows(ap_list)
关键注意事项
- XML节点校验:不同AirWave版本的XML结构可能有差异,建议手动访问
ap_detail.xml?mac=XX:XX:XX:XX:XX:XX查看实际节点路径,调整find方法的参数。 - 性能优化:若AP数量较多,逐个请求详情会增加耗时,可添加请求间隔(如
time.sleep(1))避免触发设备限流,或研究AirWave批量指标接口。 - 错误处理:建议添加异常捕获(如请求超时、XML解析失败),避免单个AP的异常导致整个脚本终止。
内容的提问来源于stack exchange,提问作者user1471980
相关产品推荐
相关产品推荐

