SNMP Property Extenders
When collecting tabular numeric metrics from a given MIB table, it’s helpful to include one or more string properties from each conceptual row of the table in question.
These properties can be used in the resourceLabel
attribute of the resourceType
associated with the collected data.
When the string property exists as a column in the same table that contains the numeric metrics, it’s easy to associate the string to the correct resource by adding a mibObj
with the same instance
attribute and a type of string
.
For example, the Cisco ENVMON MIB’s temperature status table contains both a numeric gauge for the temperature value and a string describing the associated temperature sensor. A partial snmpwalk of this table illustrates this direct relationship:
ciscoEnvMonTemperatureStatusIndex | ciscoEnvMonTemperatureStatusDescr (.1.3.6.1.4.1.9.9.13.1.3.1.2) |
ciscoEnvMonTemperatureStatusValue (.1.3.6.1.4.1.9.9.13.1.3.1.3) |
---|---|---|
1 |
I/O Cont Inlet |
22 |
2 |
I/O Cont Outlet |
23 |
3 |
NPE Inlet |
22 |
4 |
NPE Outlet |
24 |
To collect the ciscoEnvMonTemperatureStatusDescr and ciscoEnvMonTemperatureStatusValue columns within an SNMP data-collection group, all that’s needed is a resourceType
and a group
to hold the two mibObj
elements corresponding to these two columns.
The mibObj
aliases are shortened to maintain compatibility with storage engines that limit the length of column names to 19 characters.
<resourceType name="ciscoEnvMonTemperatureStatusIndex<1>" label="Cisco Temperature" resourceLabel="${cvmTempStatusDescr} (index ${index})">
<persistenceSelectorStrategy class="org.opennms.netmgt.collection.support.PersistAllSelectorStrategy"/>
<storageStrategy class="org.opennms.netmgt.collection.support.IndexStorageStrategy"/>
</resourceType>
...
<group name="cisco-temperature" ifType="all">
<mibObj oid=".1.3.6.1.4.1.9.9.13.1.3.1.2" instance="ciscoEnvMonTemperatureStatusIndex" alias="cvmTempStatusDescr" type="string"/>
<mibObj oid=".1.3.6.1.4.1.9.9.13.1.3.1.3" instance="ciscoEnvMonTemperatureStatusIndex" alias="cvmTempStatusValue" type="gauge"/>
</group>
Even in cases where the string property exists in a separate MIB table, it’s straightforward to include it as long as the "source" table uses an identical set of index variables.
For example, the ifXTable
augments the ifTable
, meaning the two tables use the same set of instance identifiers – namely ifIndex
.
Whether or not the MIB definition of the second table declares an AUGMENTS
relationship to the first table, objects from tables with this kind of relationship can be mixed in the same group.
In this contrived configuration example, ifDescr
(which is from ifTable
) is freely mixed with ifName
and ifAlias
(from ifXTable
):
<group name="mib2-string-properties-example" ifType="all">
<mibObj oid=".1.3.6.1.2.1.2.2.1.2" instance="ifIndex" alias="ifDescr" type="string"/>
<mibObj oid=".1.3.6.1.2.1.31.1.1.1.1" instance="ifIndex" alias="ifName" type="string"/>
<mibObj oid=".1.3.6.1.2.1.31.1.1.1.18" instance="ifIndex" alias="ifAlias" type="string"/>
</group>
Most SNMP property extenders make it possible to include string properties from a "source" MIB table that is indexed differently from the table containing most of the relevant data.
For the purpose of configuring property extenders, the table containing the majority of the data (and into which we want to include the string properties) is called the target table
, and the table containing the string property is called the source table
.
Several different extenders are available; selecting the right one depends on the relationship between the target table and the source table.
A few property extenders also exist whose effect is strictly local to the "target" resource. These extenders are useful to deal with partial indices and other similar operations that do not involve looking outside the target MIB table.
Use SNMP property extenders in the context of a property
element inside an SNMP data-collection group
parent element.
The property
element, when it appears, is a sibling of any mibObj
elements beneath the same parent group
.
The instance
and alias
attributes of the property
element are both required, and serve the same purpose as the same attributes of mibObj
.
The class-name
attribute of the property
element contains the full class name (including package) of the property extender class needed to join the source and target tables.
The property
element takes a number of parameter
child elements.
Use these parameters to configure the property extender class named in class-name
.
Each extender class recognizes a different set of parameters.