SNMP monitor

Fujitsu.Servers.PRIMERGY.Linux.snmp.ShellScript.LessThan.ThreeState.Monitor (UnitMonitor)

Monitors the SNMP daemon using a shell script and generates an alert if the process appears to mis-function.

Knowledge Base article:

Summary

This Monitor monitors the health of SNMP daemon.

Causes

An unhealthy state for this monitor indicates that the SNMP daemon does not respond.

Resolutions

Restart the failed SNMP daemon on the target server.

Element properties:

TargetFujitsu.Servers.PRIMERGY.Linux.SnmpManagement
Parent MonitorSystem.Health.AvailabilityState
CategoryAvailabilityHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityMatchMonitorHealth
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeFujitsu.Servers.PRIMERGY.Linux.ShellScript.LessThanThreshold.ThreeState.MonitorType
RemotableTrue
AccessibilityPublic
Alert Message
SNMP shell script found a problem!
Script on host {0} returned with value {3}, output (if any): {1} {2}
RunAsDefault

Source Code:

<UnitMonitor ID="Fujitsu.Servers.PRIMERGY.Linux.snmp.ShellScript.LessThan.ThreeState.Monitor" Accessibility="Public" Enabled="true" Target="Fujitsu.Servers.PRIMERGY.Linux.SnmpManagement" ParentMonitorID="SystemHealth!System.Health.AvailabilityState" Remotable="true" Priority="Normal" TypeID="Fujitsu.Servers.PRIMERGY.Linux.ShellScript.LessThanThreshold.ThreeState.MonitorType" ConfirmDelivery="false">
<Category>AvailabilityHealth</Category>
<AlertSettings AlertMessage="Fujitsu.Servers.PRIMERGY.Linux.snmp.ShellScript.LessThan.ThreeState.Monitor.AlertMessage">
<AlertOnState>Warning</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>MatchMonitorHealth</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="Fujitsu.Servers.PRIMERGY.Linux.ManagementClientSoftware"]/NetworkName$</AlertParameter1>
<AlertParameter2>$Data/Context///*[local-name()="StdOut"]$</AlertParameter2>
<AlertParameter3>$Data/Context///*[local-name()="StdErr"]$</AlertParameter3>
<AlertParameter4>$Data/Context///*[local-name()="ReturnCode"]$</AlertParameter4>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="StatusOK" MonitorTypeStateID="StatusOK" HealthState="Success"/>
<OperationalState ID="StatusWarning" MonitorTypeStateID="StatusWarning" HealthState="Warning"/>
<OperationalState ID="StatusError" MonitorTypeStateID="StatusError" HealthState="Error"/>
</OperationalStates>
<Configuration>
<Interval>300</Interval>
<TargetSystem>$Target/Property[Type="Fujitsu.Servers.PRIMERGY.Linux.ManagementClientSoftware"]/NetworkName$</TargetSystem>
<ScriptName>SnmpHealth.sh</ScriptName>
<ShellScript>#!/bin/sh
# Fujitsu
# Copyright 2014-2019 FUJITSU LIMITED
#
# SnmpHealth.sh - monitors the health of SNMP daemon

OK=0
WARN=1
ERR=2
RETVALUE=$OK # we assume all is well
SCRIPTLOG="/tmp/Fujitsu/$0.log"

# arguments check
DBG=`echo $1 | awk '{print tolower($0)}'`
[ "$DBG" = "dbg" ] &amp;&amp; echo "Running $0 in debug mode"

# In DEBUG mode: generate some files under "/tmp" to see, the script is running
if [ "$DBG" = "dbg" ]
then
mkdir -p /tmp/Fujitsu/
tail $SCRIPTLOG 2&gt;/dev/null &gt; $SCRIPTLOG.bk
mv -f $SCRIPTLOG.bk $SCRIPTLOG
echo "$0 V__MP_VERSION__ last ran at `date`" &gt;&gt; $SCRIPTLOG
fi

EECD=`whereis eecd | awk 'NF&gt;1{print $2}'`
if [ "$EECD" = "" ]
then
# either not a system from FUJITSU or no ServerView agents installed - do nothing!
[ "$DBG" = "dbg" ] &amp;&amp; echo "Not a system from FUJITSU or ServerView Agents not installed."
exit $OK
fi

# test that SNMP is installed
SNMP=`whereis snmpd | awk 'NF&gt;1{print $2}'`
if [ "$SNMP" = "" ]
then
echo "SNMP is *NOT* installed! Abort with Error."
exit $ERR
fi
[ "$DBG" = "dbg" ] &amp;&amp; echo "SNMP is installed at: $SNMP"

# test that SNMP is running
SNMPRUNNING=`ps -A | grep -i '[s]nmpd'`
if [ "$SNMPRUNNING" = "" ]
then
echo "SNMP is *NOT* running! Abort with Error."
exit $ERR
fi
[ "$DBG" = "dbg" ] &amp;&amp; echo "SNMP is running"

# test if SNMP is listening
SNMPLISTENING=`netstat -nlu | grep 161 | wc -l`
if [ $SNMPLISTENING -lt 1 ]
then
echo "SNMP is *NOT* listening! Abort with Error."
exit $ERR
fi
[ "$DBG" = "dbg" ] &amp;&amp; echo "SNMP is listening"

exit $RETVALUE
</ShellScript>
<ScriptArguments>3_chars_DBG_for_DEBUG</ScriptArguments>
<Timeout>60</Timeout>
<UserName>$RunAs[Name="Unix!Microsoft.Unix.ActionAccount"]/UserName$</UserName>
<Password>$RunAs[Name="Unix!Microsoft.Unix.ActionAccount"]/Password$</Password>
<FilterExpression>
<RegExExpression>
<ValueExpression>
<XPathQuery>//*[local-name()="ReturnCode"]</XPathQuery>
</ValueExpression>
<Operator>MatchesRegularExpression</Operator>
<Pattern>^[0-2]$</Pattern>
</RegExExpression>
</FilterExpression>
<WarningThreshold>1</WarningThreshold>
<ErrorThreshold>2</ErrorThreshold>
</Configuration>
</UnitMonitor>