I'm working on SNMP on the new C9800 wireless controllers, most things translate or have update MIBs from the older AireOS wireless controllers but.......
Trying to graph bandwidth by SSID has me stumped, I've done custom external script checks but under heavy load Zabbix would get behind with mysql INSERTS/Graphing. There is no direct WLAN BW MIB but there is by Access Point, per radio slot, then to WLAN ID. So essentially I'm trying to find a way to enumerate through a new discovery rule and be able to aggregate return values of each WLAN ID by AP radio (2 MIBs - 1 for Tx, 1 for Rx) - each AP can have up to 4 radio slots with the same WLAN ID.
I have LLD already for AP Data (some by models) and WLAN Data (outside of BW)




Sample snmpwalk of BW by SSID -> per AP -> per AP radio
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.72.145.213.121 .41.48.0.76 = Counter64: 34327978
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.72.145.213.121 .41.48.0.80 = Counter64: 3851690
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.72.145.213.121 .41.48.1.1 = Counter64: 8286445087
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.72.145.213.121 .41.48.1.76 = Counter64: 0
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.72.145.213.121 .41.48.1.80 = Counter64: 94492572
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.72.145.213.121 .41.48.2.1 = Counter64: 0
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.72.145.213.121 .41.48.2.76 = Counter64: 0
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.72.145.213.121 .41.48.2.80 = Counter64: 0
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.72.145.213.121 .41.48.3.1 = Counter64: 136751162
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.76.119.109.204 .16.224.0.1 = Counter64: 355055
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.76.119.109.204 .16.224.1.1 = Counter64: 22675686124
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.104.113.97.54. 153.96.0.76 = Counter64: 0
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.104.113.97.54. 153.96.0.80 = Counter64: 0
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.104.113.97.54. 153.96.1.1 = Counter64: 18273675432
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.104.113.97.54. 153.96.1.76 = Counter64: 175179051
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.104.113.97.54. 153.96.1.80 = Counter64: 2116796255
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.104.113.97.54. 153.96.2.1 = Counter64: 27156710769
MIB
AP SNMPINDEX = 72.145.213.121 .41.48
RADIO SLOT = 0,1,2 or 3 *AP Model Dependent
WLAN SNMPINDEX = 1,76 or 80 (on each radio slot) *In this test case but could be multiple more SNMPINDEX(s)
I've adjusted my SSID LLD to be -
Which gives me JSON like this -
I then tried to grab LLD setting APNAME SNMPINDEX to APINDEX

Which seemed to work but then I got some discovery errors based on SSIDSTATUS macro not part of the APNAME, the test item prototype was not populating with the INDEX values and just passing MARCO into OID

I don't know which way to attack this or if Zabbix can do this natively without some external check/API aggregate call? I did this originally by external check on Client LLD, creating a temp DB from a script that did combo snmpwalk and SELECT for Clients on WLAN (by NAME), IPADDRESS, Tx, RX. It would populate new clients by IPADDRESS and UPDATE existing ones by IPADDRESS. Then aggregate through all Tx and Rx by WLAN to get BW graph by SSID, issue is once there were couple thousand plus clients everything got behind in polling with external checks, scripts and mysql queries, etc and then graphing stopped.
Thoughts?
Trying to graph bandwidth by SSID has me stumped, I've done custom external script checks but under heavy load Zabbix would get behind with mysql INSERTS/Graphing. There is no direct WLAN BW MIB but there is by Access Point, per radio slot, then to WLAN ID. So essentially I'm trying to find a way to enumerate through a new discovery rule and be able to aggregate return values of each WLAN ID by AP radio (2 MIBs - 1 for Tx, 1 for Rx) - each AP can have up to 4 radio slots with the same WLAN ID.
I have LLD already for AP Data (some by models) and WLAN Data (outside of BW)
Sample snmpwalk of BW by SSID -> per AP -> per AP radio
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.72.145.213.121 .41.48.0.76 = Counter64: 34327978
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.72.145.213.121 .41.48.0.80 = Counter64: 3851690
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.72.145.213.121 .41.48.1.1 = Counter64: 8286445087
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.72.145.213.121 .41.48.1.76 = Counter64: 0
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.72.145.213.121 .41.48.1.80 = Counter64: 94492572
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.72.145.213.121 .41.48.2.1 = Counter64: 0
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.72.145.213.121 .41.48.2.76 = Counter64: 0
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.72.145.213.121 .41.48.2.80 = Counter64: 0
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.72.145.213.121 .41.48.3.1 = Counter64: 136751162
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.76.119.109.204 .16.224.0.1 = Counter64: 355055
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.76.119.109.204 .16.224.1.1 = Counter64: 22675686124
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.104.113.97.54. 153.96.0.76 = Counter64: 0
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.104.113.97.54. 153.96.0.80 = Counter64: 0
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.104.113.97.54. 153.96.1.1 = Counter64: 18273675432
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.104.113.97.54. 153.96.1.76 = Counter64: 175179051
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.104.113.97.54. 153.96.1.80 = Counter64: 2116796255
SNMPv2-SMI::enterprises.9.9.513.1.22.1.1.2.104.113.97.54. 153.96.2.1 = Counter64: 27156710769
MIB
1.3.6.1.4.1.9.9.513.1.22.1.1.2 = Tx BW by SSID per Radio
.1.3.6.1.4.1.9.9.513.1.22.1.1.4 = Rx BW by SSID per Radio
.1.3.6.1.4.1.9.9.513.1.22.1.1.4 = Rx BW by SSID per Radio
AP SNMPINDEX = 72.145.213.121 .41.48
RADIO SLOT = 0,1,2 or 3 *AP Model Dependent
WLAN SNMPINDEX = 1,76 or 80 (on each radio slot) *In this test case but could be multiple more SNMPINDEX(s)
I've adjusted my SSID LLD to be -
Code:
discovery[{#SNMPVALUE},.1.3.6.1.4.1.9.9.512.1.1.1.1.3,{#SSIDSTATUS},.1.3.6.1.4.1.14179.2.1.1.1.6,{#APNAME},1.3.6.1.4.1.14179.2.2.1.1.3]
Code:
[ { "{#SNMPINDEX}": "1", "{#SNMPVALUE}": "xpowpa", "{#SSIDSTATUS}": "1" }, { "{#SNMPINDEX}": "4", "{#SNMPVALUE}": "xpowpa-3702", "{#SSIDSTATUS}": "0" }, { "{#SNMPINDEX}": "76", "{#SNMPVALUE}": "iot", "{#SSIDSTATUS}": "1" }, { "{#SNMPINDEX}": "80", "{#SNMPVALUE}": "xpoguest", "{#SSIDSTATUS}": "1" }, { "{#SNMPINDEX}": "20.132.115.201.152.224", "{#APNAME}": "WIFI6-SOMUCHBETTERTHAN5" }, { "{#SNMPINDEX}": "72.145.213.121.41.48", "{#APNAME}": "255.253_Offices_PLAP" }, { "{#SNMPINDEX}": "76.119.109.204.16.224", "{#APNAME}": "JaxFLEX_255.254" }, { "{#SNMPINDEX}": "104.113.97.54.153.96", "{#APNAME}": "255.252_Conference_PLAP" }, { "{#SNMPINDEX}": "108.214.227.207.234.32", "{#APNAME}": "255.246_SignageSales_PLAP" }, { "{#SNMPINDEX}": "108.214.227.209.32.240", "{#APNAME}": "JaxLabCap6E_255.251" }, { "{#SNMPINDEX}": "108.214.227.209.55.208", "{#APNAME}": "255.254_MDF_PLAP" }, { "{#SNMPINDEX}": "108.214.227.209.68.0", "{#APNAME}": "255.251_Hallway_PLAP" }, { "{#SNMPINDEX}": "108.214.227.209.71.192", "{#APNAME}": "255.250_XDTech_PLAP" }, { "{#SNMPINDEX}": "108.214.227.209.74.0", "{#APNAME}": "255.249_Warehouse_PLAP" }, { "{#SNMPINDEX}": "116.38.172.117.93.80", "{#APNAME}": "JaxLabFLEX_255.252" }, { "{#SNMPINDEX}": "160.224.175.60.100.64", "{#APNAME}": "255.248_Ring_PLAP" } ]
Which seemed to work but then I got some discovery errors based on SSIDSTATUS macro not part of the APNAME, the test item prototype was not populating with the INDEX values and just passing MARCO into OID
I don't know which way to attack this or if Zabbix can do this natively without some external check/API aggregate call? I did this originally by external check on Client LLD, creating a temp DB from a script that did combo snmpwalk and SELECT for Clients on WLAN (by NAME), IPADDRESS, Tx, RX. It would populate new clients by IPADDRESS and UPDATE existing ones by IPADDRESS. Then aggregate through all Tx and Rx by WLAN to get BW graph by SSID, issue is once there were couple thousand plus clients everything got behind in polling with external checks, scripts and mysql queries, etc and then graphing stopped.
Thoughts?
Comment