Ad Widget

Collapse

WLC Graph BW by SSID - Implementation/capabilities of Zabbix (LLD, Dynamic, Script)?

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • cwhite
    Member
    • Aug 2015
    • 46

    #1

    WLC Graph BW by SSID - Implementation/capabilities of Zabbix (LLD, Dynamic, Script)?

    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
    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




    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]
    Which gives me JSON like this -
    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" } ]
    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?
    Attached Files
  • cwhite
    Member
    • Aug 2015
    • 46

    #2
    I've tried making a bit of progress - Master JSON into Dependent items will not work - can't discover LLD Macros then use them as SNMP queries it seems (unsupported). I was able to get a discovery based off this
    discovery[{#SNMPVALUE},.1.3.6.1.4.1.14179.2.2.1.1.3,{#WLANPR OFILE},.1.3.6.1.4.1.9.9.512.1.1.1.1.3]
    which yields a JSON like this
    [ { "{#SNMPINDEX}": "20.132.115.201.152.224", "{#SNMPVALUE}": "WIFI6-SOMUCHBETTERTHAN5" }, { "{#SNMPINDEX}": "72.145.213.121.41.48", "{#SNMPVALUE}": "255.253_Offices_PLAP" }, { "{#SNMPINDEX}": "76.119.109.204.16.224", "{#SNMPVALUE}": "JaxFLEX_255.254" }, { "{#SNMPINDEX}": "104.113.97.54.153.96", "{#SNMPVALUE}": "255.252_Conference_PLAP" }, { "{#SNMPINDEX}": "108.214.227.207.234.32", "{#SNMPVALUE}": "255.246_SignageSales_PLAP" }, { "{#SNMPINDEX}": "108.214.227.209.32.240", "{#SNMPVALUE}": "JaxLabCap6E_255.251" }, { "{#SNMPINDEX}": "108.214.227.209.55.208", "{#SNMPVALUE}": "255.254_MDF_PLAP" }, { "{#SNMPINDEX}": "108.214.227.209.68.0", "{#SNMPVALUE}": "255.251_Hallway_PLAP" }, { "{#SNMPINDEX}": "108.214.227.209.71.192", "{#SNMPVALUE}": "255.250_XDTech_PLAP" }, { "{#SNMPINDEX}": "108.214.227.209.74.0", "{#SNMPVALUE}": "255.249_Warehouse_PLAP" }, { "{#SNMPINDEX}": "116.38.172.117.93.80", "{#SNMPVALUE}": "JaxLabFLEX_255.252" }, { "{#SNMPINDEX}": "1", "{#WLANPROFILE}": "xpowpa" }, { "{#SNMPINDEX}": "4", "{#WLANPROFILE}": "xpowpa-3702" }, { "{#SNMPINDEX}": "76", "{#WLANPROFILE}": "iot" }, { "{#SNMPINDEX}": "80", "{#WLANPROFILE}": "xpoguest" } ]
    I tried extracting SNMPINDEX @ every WLANPROFILE and setting it to LLD MARCO as so
    Click image for larger version

Name:	Screenshot 2024-05-29 at 3.11.28 PM.png
Views:	530
Size:	21.1 KB
ID:	484605
    When I test as a preprocessing step I get a return of expected indexes, but as LLD MACRO it does nothing - items show up with "snmp oid error ........{#WLANID}"
    Click image for larger version

Name:	Screenshot 2024-05-29 at 3.14.32 PM.png
Views:	520
Size:	191.5 KB
ID:	484606

    Yet if I set LLD MARCO in the Item 'value' to see what if anything was applied I get the WLANPROFILE value from original JSON, same oid error but its populated - {#WLANID} in Item Description and NOT in snmp_oid
    Click image for larger version

Name:	Screenshot 2024-05-29 at 3.14.50 PM.png
Views:	521
Size:	115.8 KB
ID:	484607
    Attached Files

    Comment

    • cwhite
      Member
      • Aug 2015
      • 46

      #3
      Anyone following or caring - I took the long way around and found 2 ways of getting there. My initial post took me down a complicated path which then brought me to a much simpler path. I already graphed clients by MAC (SNMPINDEX), there is a natural correlation with that index to Download, Upload and SSID association for every client.

      Where as my initial attempt had me creating that relationship - so my updated client discovery now looks like this:
      discovery[{#SNMPVALUE},1.3.6.1.4.1.14179.2.1.4.1.1,{#BSSID}, .1.3.6.1.4.1.14179.2.1.4.1.7]
      Which give me a nice JSON to work with as such:
      Click image for larger version  Name:	Screenshot 2024-05-30 at 5.34.37 PM.png Views:	0 Size:	138.2 KB ID:	484673

      Since I already had the ingredients through SNMP, I merely needed to tie them together and leveraged my LLD MARCOs within tags to then use built-in aggregate functions. I was able to tag my items with:
      "{#BSSID} - Client SSID Bandwidth: Download/Upload" respectively
      Then it was a simple calculated item for all Download/Upload by {#BSSID} within tags - I'll just have to clean up my group filtering for production but it works!
      sum(last_foreach(/*/bsnMobileStationBytesSent[*]?[(group="Cisco Wireless Controller") and (tag="{#BSSID} - Client SSID Bandwidth: Download")]))
      sum(last_foreach(/*/bsnMobileStationBytesReceived[*]?[(group="Cisco Wireless Controller") and (tag="{#BSSID} - Client SSID Bandwidth:Upload")]))
      Click image for larger version

Name:	Screenshot 2024-05-30 at 5.42.07 PM.png
Views:	540
Size:	126.2 KB
ID:	484674 Click image for larger version

Name:	Screenshot 2024-05-30 at 5.42.27 PM.png
Views:	540
Size:	408.1 KB
ID:	484675

      Comment

      • Khna
        Junior Member
        • Aug 2024
        • 1

        #4
        Hi cwhite

        I also wanted to make graph to monitor the bandwidth with cisco wlc 9800
        But i did not find any template included bandwidth graph.
        could you explain me more detaily how to configure it? or if you have template, could you share it with me?

        Thank you

        Comment

        Working...