Hello, I'm succesfully monitoring some gauges and items of our Cisco ACE load balancers via SNMP and LLD. I need to monitor advanced aspects of the ACE as well, like serverfarms, realservers and probes.
While the simple items work just wonderfully with LLD and SNMP, the advanced stuff is a bit more tricky due to the way the OIDs are presented by the ACE. Some examples:
The working, simple setup:
Discovery rule - SNMP OID field:
.1.3.6.1.4.1.9.9.161.1.4.2.1.2.1
Output of Snmpwalk:
.1.3.6.1.4.1.9.9.161.1.4.2.1.2.1.80 = STRING: CLASS-VIP-1
.1.3.6.1.4.1.9.9.161.1.4.2.1.2.1.81 = STRING: CLASS-VIP-2
.1.3.6.1.4.1.9.9.161.1.4.2.1.2.1.82 = STRING: CLASS-VIP-3
Item prototypes - SNMP OID field:
.1.3.6.1.4.1.9.9.161.1.4.2.1.4.1.{#SNMPINDEX}
Zabbix generated items (works wonderfully):
.1.3.6.1.4.1.9.9.161.1.4.2.1.4.1.80 = INTEGER: outOfService(1)
.1.3.6.1.4.1.9.9.161.1.4.2.1.4.1.81 = INTEGER: inService(2)
.1.3.6.1.4.1.9.9.161.1.4.2.1.4.1.82 = INTEGER: inService(2)
Now, the tricky part. I want to poll some more useful data, like serverfarm status, probes and so on.
Here's the snmpwalk when the Cisco MIBs are enabled. The output is fairly standard and readable, in the format PROBE.SERVERFARM.REALSERVER.PORT.PORT = status:
So, I'd expect to be able to use ".1.3.6.1.4.1.9.9.508.1.1.3.1.6.1" as the root OID in the discovery rule. Nope: disabling the MIB translation makes the output messy, with a huge amount of OID sub-levels. It looks like it's generated dinamically, so LLD seems not to be the way to go:
At this point I'm clueless. How would you approach this problem?
I'm thinking of writing a script that runs snmpwalk, stores each line/column value dinamically and passes them regularly to Zabbix via the API. Yet, I'd like to take this approach as a last resort. It looks very complicated and I have simply no idea where to start since I'm not very strong in scripting
Thank you!
While the simple items work just wonderfully with LLD and SNMP, the advanced stuff is a bit more tricky due to the way the OIDs are presented by the ACE. Some examples:
The working, simple setup:
Discovery rule - SNMP OID field:
.1.3.6.1.4.1.9.9.161.1.4.2.1.2.1
Output of Snmpwalk:
.1.3.6.1.4.1.9.9.161.1.4.2.1.2.1.80 = STRING: CLASS-VIP-1
.1.3.6.1.4.1.9.9.161.1.4.2.1.2.1.81 = STRING: CLASS-VIP-2
.1.3.6.1.4.1.9.9.161.1.4.2.1.2.1.82 = STRING: CLASS-VIP-3
Item prototypes - SNMP OID field:
.1.3.6.1.4.1.9.9.161.1.4.2.1.4.1.{#SNMPINDEX}
Zabbix generated items (works wonderfully):
.1.3.6.1.4.1.9.9.161.1.4.2.1.4.1.80 = INTEGER: outOfService(1)
.1.3.6.1.4.1.9.9.161.1.4.2.1.4.1.81 = INTEGER: inService(2)
.1.3.6.1.4.1.9.9.161.1.4.2.1.4.1.82 = INTEGER: inService(2)
Now, the tricky part. I want to poll some more useful data, like serverfarm status, probes and so on.
Here's the snmpwalk when the Cisco MIBs are enabled. The output is fairly standard and readable, in the format PROBE.SERVERFARM.REALSERVER.PORT.PORT = status:
Code:
snmpwalk -v2c -c <community> <IP> .1.3.6.1.4.1.9.9.508.1.1.3.1.6.1 CISCO-SLB-HEALTH-MON-MIB::cshMonServerfarmRealProbeHealthMonState.1."PROBE-HTTP-STATICS-1"."SFARM-STATICS"."RSERVER1".80.80 = INTEGER: active(4) CISCO-SLB-HEALTH-MON-MIB::cshMonServerfarmRealProbeHealthMonState.1."PROBE-HTTP-STATICS-1"."SFARM-STATICS"."RSERVER2".80.80 = INTEGER: failed(5) CISCO-SLB-HEALTH-MON-MIB::cshMonServerfarmRealProbeHealthMonState.1."PROBE-HTTP-MONITOR"."VIEW-1"."RSERVER3".17680.17680 = INTEGER: active(4) CISCO-SLB-HEALTH-MON-MIB::cshMonServerfarmRealProbeHealthMonState.1."PROBE-HTTP-MONITOR"."LGA-VIEW-1"."RSERVER4".17680.17680 = INTEGER: active(4) ...
Code:
snmpwalk -v2c -c <community> <IP> .1.3.6.1.4.1.9.9.508.1.1.3.1.6.1 -On .1.3.6.1.4.1.9.9.508.1.1.3.1.6.1.20.80.82.79.66.69.45.72.84.84.80.45.83.84.65.84.73.67.83.45.49.19.83.70.65.82.77.45.75.65.77.66.73.45.83.84.65.84.73.67.83.11.86.67.49.53.78.88.48.57.57.84.65.80.80 = INTEGER: active(4) .1.3.6.1.4.1.9.9.508.1.1.3.1.6.1.20.80.82.79.66.69.45.72.84.84.80.45.83.84.65.84.73.67.83.45.49.19.83.70.65.82.77.45.75.65.77.66.73.45.83.84.65.84.73.67.83.11.86.67.50.49.78.88.49.48.48.84.65.80.80 = INTEGER: failed(5) .1.3.6.1.4.1.9.9.508.1.1.3.1.6.1.24.80.82.79.66.69.45.72.84.84.80.45.75.65.77.66.73.45.77.79.78.73.84.79.82.10.76.71.65.45.86.73.69.87.45.49.7.78.88.48.56.49.84.65.17680.17680 = INTEGER: active(4) .1.3.6.1.4.1.9.9.508.1.1.3.1.6.1.24.80.82.79.66.69.45.72.84.84.80.45.75.65.77.66.73.45.77.79.78.73.84.79.82.10.76.71.65.45.86.73.69.87.45.49.7.78.88.48.56.50.84.65.17680.17680 = INTEGER: active(4)
At this point I'm clueless. How would you approach this problem?
I'm thinking of writing a script that runs snmpwalk, stores each line/column value dinamically and passes them regularly to Zabbix via the API. Yet, I'd like to take this approach as a last resort. It looks very complicated and I have simply no idea where to start since I'm not very strong in scripting

Thank you!
Comment