From OpenNMS
APC UPS Ambient Temperature Probe
Requirements: - OpenNMS 1.6 Installed - SNMPD Installed On Client
Note: APC names their external temp sensors something dumb like "Integrated" log into the UPS (default apc:apc) and change it to "apcAmbientTemp".
How this all works
Basically what we are going to do is add a new snmp mib for opennms to query. The data from that mib will be stored in the opennms DB and we will need to define a way to display it (create a graph for the data). Once opennms is storing the data we can start using the data to trigger events, alarms ect.
Step 1: Add a mib for opennms to query
Add the following to the datacollection-config.xml file:
- Within <snmp-collection... tag:
<resourceType name="apcAmbientTemp" label="APC Ambient Probe Temperature (powernet393)"
resourceLabel="${iemProbeName} (index ${index})">
<persistenceSelectorStrategy class="org.opennms.netmgt.collectd.PersistAllSelectorStrategy"/>
<storageStrategy class="org.opennms.netmgt.dao.support.IndexStorageStrategy"/>
</resourceType>
- Within <groups> tag:
<group name="APC-StatusProbe" ifType="all">
<mibObj oid=".1.3.6.1.4.1.318.1.1.10.2.3.2.1.2" instance="apcAmbientTemp" alias="iemProbeName" type="string" />
<mibObj oid=".1.3.6.1.4.1.318.1.1.10.2.3.2.1.4" instance="apcAmbientTemp" alias="iemProbeCurrTemp" type="gauge32" />
<mibObj oid=".1.3.6.1.4.1.318.1.1.10.2.3.2.1.5" instance="apcAmbientTemp" alias="iemProbeTempUnits" type="integer" />
<mibObj oid=".1.3.6.1.4.1.318.1.1.10.2.3.2.1.6" instance="apcAmbientTemp" alias="iemProbeCurrHumid" type="gauge32" />
<mibObj oid=".1.3.6.1.4.1.318.1.1.10.2.3.2.1.7" instance="apcAmbientTemp" alias="iemProbeHighTempV" type="integer" />
<mibObj oid=".1.3.6.1.4.1.318.1.1.10.2.3.2.1.8" instance="apcAmbientTemp" alias="iemProbeLowTempV" type="integer" />
<mibObj oid=".1.3.6.1.4.1.318.1.1.10.2.3.2.1.9" instance="apcAmbientTemp" alias="iemProbeHighHumidV" type="integer" />
<mibObj oid=".1.3.6.1.4.1.318.1.1.10.2.3.2.1.10" instance="apcAmbientTemp" alias="iemProbeLowHumidV" type="integer" />
<mibObj oid=".1.3.6.1.4.1.318.1.1.10.2.3.2.1.11" instance="apcAmbientTemp" alias="iemProbeMaxTempV" type="integer" />
<mibObj oid=".1.3.6.1.4.1.318.1.1.10.2.3.2.1.12" instance="apcAmbientTemp" alias="iemProbeMinTempV" type="integer" />
<mibObj oid=".1.3.6.1.4.1.318.1.1.10.2.3.2.1.13" instance="apcAmbientTemp" alias="iemProbeMaxHumidV" type="integer" />
<mibObj oid=".1.3.6.1.4.1.318.1.1.10.2.3.2.1.14" instance="apcAmbientTemp" alias="iemProbeMinHumidV" type="integer" />
</group>
- Within <systemDef name="APC UPS">...
<includeGroup>APC-StatusProbe</includeGroup>
Step 2: Add a graph definition so we can display the mib data opennms is collecting
Add the following to snmp-graph.properties Add to /opt/opennms/etc/snmp-graph.properties anywhere in the file.
report.company.ambientTemp.name=Ambient Temperature
report.company.ambientTemp.columns=iemProbeCurrTemp
report.company.ambientTemp.type=apcAmbientTemp
report.company.ambientTemp.command=--title="Current Ambient Temperature" \
--vertical-label="Current Temperature" \
DEF:currEstab={rrd1}:iemProbeCurrTemp:AVERAGE \
DEF:minCurrEstab={rrd1}:iemProbeCurrTemp:MIN \
DEF:maxCurrEstab={rrd1}:iemProbeCurrTemp:MAX \
LINE2:currEstab#00ff00:"Current " \
GPRINT:currEstab:AVERAGE:"Avg \\: %8.2lf %s" \
GPRINT:currEstab:MIN:"Min \\: %8.2lf %s" \
GPRINT:currEstab:MAX:"Max \\: %8.2lf %s\\n"
Additionally, you will need to add to reports= the following: company.ambientTemp,
Step 3: Add some thresholds for the mib data opennms is collecting
Add the following to thresholds.xml Edit the /opt/opennms/etc/thresholds.xml file and add the following after the <group name="netsnmp"... group
<group name="apcups" rrdRepository="/opt/opennms/share/rrd/snmp/">
<threshold type="high" ds-type="apcAmbientTemp" value="30"
rearm="28.0" trigger="1" ds-label="iemProbeName"
triggeredUEI="uei.opennms.org/company/probeTempHigh"
rearmedUEI="uei.opennms.org/company/probeTempHigh-rearmed" ds-name="iemProbeCurrTemp"/>
</group>
Step 4: Add APC into the Threshold Daemon group
Edit the threshold daemon file (/opt/opennms/etc/threshd-configuration.xml) and create the threshold group as follows.
<package name="apcups">
<filter>IPADDR != '0.0.0.0' & (nodeSysOID LIKE '.1.3.6.1.4.1.318.%')</filter>
<include-range begin="1.1.1.1" end="254.254.254.254"/>
<service name="SNMP" interval="300000" user-defined="false" status="on">
<parameter key="thresholding-group" value="apcups"/>
</service>
<outage-calendar xmlns="">OpenNMS Restart</outage-calendar>
<outage-calendar xmlns="">LEP Move To Auriga</outage-calendar>
</package>
Step 5: Add a custom event to opennms based in the thresholds
Once this is completed, you will need to edit the events file (/opt/opennms/etc/eventconf.xml) to create the event custom UEI event. Append this to the end before the </event> tag.
<event-file xmlns="">events/programmatic.events.xml</event-file>
Step 6: events/programmatic.events.xml
Now, edit /opt/opennms/etc/events/programmatic.events.xml and add the following.
<?xml version="1.0" encoding="UTF-8"?>
<events xmlns="http://xmlns.opennms.org/xsd/eventconf">
<event>
<uei xmlns="">uei.opennms.org/company/probeTempHigh</uei>
<event-label xmlns="">company : High Temperature</event-label>
<descr xmlns="">High temperature alarm for %service% datasource %parm[ds]% on interface %interface%, parms: %parm[all]</descr>
<logmsg dest="logndisplay">High temperature alarm for %service% datasource %parm[ds]% on interface %interface%, parms: %parm[all]%</logmsg>
<severity xmlns="">Major</severity>
<alarm-data reduction-key="%uei%!%nodeid%!%parm[label]%" alarm-type="1" auto-clean="false" />
</event>
<event>
<uei xmlns="">uei.opennms.org/company/probeTempHigh-rearmed</uei>
<event-label xmlns="">company : High Temperature - Re-Armed</event-label>
<descr xmlns="">High Temp rearmed for %service% datasource %parm[ds]% on interface %interface%, parms: %parm[all]</descr>
<logmsg dest="logndisplay">High Temp rearmed for %service% datasource %parm[ds]% on interface %interface%, parms: %parm[all]%</logmsg>
<severity xmlns="">Normal</severity>
<alarm-data
clear-key="uei.opennms.org/company/probeTempHigh!%nodeid%!%parm[label]%"
reduction-key="%uei%:%nodeid%:%parm[label]%" alarm-type="2" auto-clean="true" />
</event>
</events>
Step 7: Add notifications to opennms based in the events you have defined
Add to /opt/opennms/etc/notifications.xml before the </notifications> tag.
<notification name="High Temperature" status="on" writeable="yes">
<uei xmlns="">uei.opennms.org/company/probeTempHigh</uei>
<description xmlns="">High Temperature in Server Room</description>
<rule xmlns="">(IPADDR IPLIKE *.*.*.*)</rule>
<destinationPath xmlns="">IDS-SysAdmin</destinationPath>
<text-message xmlns="">Node: %nodelabel% 

https://opennms_server/opennms/event/detail.jsp?id=%eventid%</text-message>
<subject xmlns="">High Temperature (%nodelabel%)</subject>
<numeric-message xmlns="">
</numeric-message>
</notification>
<notification name="High Temperature Re-Armed" status="on" writeable="yes">
<uei xmlns="">uei.opennms.org/company/probeTempHigh-rearmed</uei>
<description xmlns="">High Temperature in Server Room</description>
<rule xmlns="">(IPADDR IPLIKE *.*.*.*)</rule>
<destinationPath xmlns="">IDS-SysAdmin</destinationPath>
<text-message xmlns="">Node: %nodelabel% 

https://opennms_server/opennms/event/detail.jsp?id=%eventid%</text-message>
<subject xmlns="">Re-Armed High Temperature (%nodelabel%)</subject>
<numeric-message xmlns="">
</numeric-message>
</notification>






