OpenNMS: Memcached mit SNMP überwachen

opennmsIn OpenNMS gibt es zwar auch einen „nativen“ Memcached-Monitor – aber dieser funktioniert nur wenn der Memcached direkt über das Netz vom Monitorserver aus erreichbar ist.

Mit der bekannten SNMP-extend Methode lässt sich der Memcached Daemon auch gut via SNMP mit OpenNMS überwachen. Hier nur kurz die wichtigsten Scripte und Schritte:

Service überwachen

Das geht am einfachsten über das „HostResourceSwRunPlugin“ Plugin welches die laufenden Prozesse via SNMP überwacht. Zunächst muss der Service überhaupt erkannt werden:

/etc/opennms/capsd-configuration.xml

    <protocol -plugin protocol="Process-memcached"
	class-name="org.opennms.netmgt.capsd.plugins.HostResourceSwRunPlugin"
	scan="on" user-defined="false">
	<property key="timeout" value="2000"></property>
	<property key="retry" value="1"></property>
	<property key="service-name" value="memcached"></property>
    </protocol>

Dann wird die Überwachung definiert:
/etc/opennms/poller-configuration.xml

   ...
<service name="Process-memcached" interval="300000"
    user-defined="false" status="on">
    <parameter key="retry" value="5"></parameter>
    <parameter key="timeout" value="10000"></parameter>
    <parameter key="service-name" value="memcached"></parameter>
    <parameter key="run-level" value="3"></parameter>
    <parameter key="match-all" value="true"></parameter>
</service>
 ...
    <monitor service="Process-memcached" class-name="org.opennms.netmgt.poller.monitors.HostResourceSwRunMonitor"></monitor>

Statistiken

Um noch ein paar Graphen zu generieren werden per SNMP noch die Statusdetails des Memcached Daemons übertragen…

Zunächst brauchen wir ein Script um die Statusdaten vom Memcached zu bekommen:
/etc/snmp/check_memcached.sh

#!/bin/bash
echo -e "stats\nquit" | nc 127.0.0.1 11211 | while read  -d $'\r' stat name value;
        do
            echo $value
        done

Das Script „check_memcached.sh“ verwendet dann der SNMP-Daemon um die Daten auszulesen und zu übertragen:
/etc/snmp/snmpd.conf

extend memcached /etc/snmp/check_memcached

OpenNMS wird jetzt erweitert um diese Daten zu sammeln:
/etc/opennms/datacollection-config.xml

<group name="memcached-status" ifType="ignore">
	<mibObj oid=".1.3.6.1.4.1.8072.1.3.2.4.1.2.9.109.101.109.99.97.99.104.101.100" instance="2" alias="mcd-uptime" type="gauge" />
	<mibObj oid=".1.3.6.1.4.1.8072.1.3.2.4.1.2.9.109.101.109.99.97.99.104.101.100" instance="5" alias="mcd-pointerSize" type="gauge" />
	<mibObj oid=".1.3.6.1.4.1.8072.1.3.2.4.1.2.9.109.101.109.99.97.99.104.101.100" instance="6" alias="mcd-rusageUser" type="gauge" />
	<mibObj oid=".1.3.6.1.4.1.8072.1.3.2.4.1.2.9.109.101.109.99.97.99.104.101.100" instance="7" alias="mcd-rusageSystem" type="gauge" />
	<mibObj oid=".1.3.6.1.4.1.8072.1.3.2.4.1.2.9.109.101.109.99.97.99.104.101.100" instance="8" alias="mcd-currItems" type="integer" />
	<mibObj oid=".1.3.6.1.4.1.8072.1.3.2.4.1.2.9.109.101.109.99.97.99.104.101.100" instance="9" alias="mcd-totalItems" type="integer" />
	<mibObj oid=".1.3.6.1.4.1.8072.1.3.2.4.1.2.9.109.101.109.99.97.99.104.101.100" instance="10" alias="mcd-bytes" type="integer" />
	<mibObj oid=".1.3.6.1.4.1.8072.1.3.2.4.1.2.9.109.101.109.99.97.99.104.101.100" instance="11" alias="mcd-currConnections" type="integer" />
	<mibObj oid=".1.3.6.1.4.1.8072.1.3.2.4.1.2.9.109.101.109.99.97.99.104.101.100" instance="12" alias="mcd-totalConnections" type="integer" />
	<mibObj oid=".1.3.6.1.4.1.8072.1.3.2.4.1.2.9.109.101.109.99.97.99.104.101.100" instance="13" alias="mcd-connectionStructures" type="gauge" />
	<mibObj oid=".1.3.6.1.4.1.8072.1.3.2.4.1.2.9.109.101.109.99.97.99.104.101.100" instance="14" alias="mcd-cmdGet" type="integer" />
	<mibObj oid=".1.3.6.1.4.1.8072.1.3.2.4.1.2.9.109.101.109.99.97.99.104.101.100" instance="15" alias="mcd-cmdSet" type="integer" />
	<mibObj oid=".1.3.6.1.4.1.8072.1.3.2.4.1.2.9.109.101.109.99.97.99.104.101.100" instance="16" alias="mcd-getHits" type="counter" />
	<mibObj oid=".1.3.6.1.4.1.8072.1.3.2.4.1.2.9.109.101.109.99.97.99.104.101.100" instance="17" alias="mcd-getMisses" type="counter" />
	<mibObj oid=".1.3.6.1.4.1.8072.1.3.2.4.1.2.9.109.101.109.99.97.99.104.101.100" instance="18" alias="mcd-evictions" type="gauge" />
	<mibObj oid=".1.3.6.1.4.1.8072.1.3.2.4.1.2.9.109.101.109.99.97.99.104.101.100" instance="19" alias="mcd-bytesRead" type="counter" />
	<mibObj oid=".1.3.6.1.4.1.8072.1.3.2.4.1.2.9.109.101.109.99.97.99.104.101.100" instance="20" alias="mcd-bytesWritten" type="counter" />
	<mibObj oid=".1.3.6.1.4.1.8072.1.3.2.4.1.2.9.109.101.109.99.97.99.104.101.100" instance="21" alias="mcd-limitMaxbytes" type="integer" />
	<mibObj oid=".1.3.6.1.4.1.8072.1.3.2.4.1.2.9.109.101.109.99.97.99.104.101.100" instance="22" alias="mcd-threads" type="integer" />
</group>
      <systemDef name="Net-SNMP">
...
        <collect>
...
            <includeGroup>memcached-status</includeGroup>
...
        </collect>
      </systemDef>

Jetzt müssen noch die Graphen definiert werden:

/etc/opennms/snmp-graph.properties

report.netsnmp.memcached.hits.name=Memcached hits
report.netsnmp.memcached.hits.columns=mcd-getHits,mcd-getMisses
report.netsnmp.memcached.hits.type=nodeSnmp
report.netsnmp.memcached.hits.command=--title="Memcached hits" \
 DEF:hits={rrd1}:mcd-getHits:AVERAGE \
 DEF:misses={rrd2}:mcd-getMisses:AVERAGE \
 AREA:hits#71A336:"Hits   " \
 GPRINT:hits:AVERAGE:"Avg  \\: %8.2lf " \
 GPRINT:hits:MIN:"Min  \\: %8.2lf " \
 GPRINT:hits:MAX:"Max  \\: %8.2lf \\n" \
 LINE1:misses#F7AA29:"Misses " \
 GPRINT:misses:AVERAGE:"Avg  \\: %8.2lf " \
 GPRINT:misses:MIN:"Min  \\: %8.2lf " \
 GPRINT:misses:MAX:"Max  \\: %8.2lf \\n"
 
report.netsnmp.memcached.memoryUsage.name=Memcached Memory Usage
report.netsnmp.memcached.memoryUsage.columns=mcd-bytes,mcd-limitMaxbytes
report.netsnmp.memcached.memoryUsage.type=nodeSnmp
report.netsnmp.memcached.memoryUsage.command=--title="Memcached Memory Usage" \
 --vertical-label="Bytes" \
 DEF:used={rrd1}:mcd-bytes:AVERAGE \
 DEF:max={rrd2}:mcd-limitMaxbytes:AVERAGE \
 CDEF:free=max,used,- \
 AREA:used#1A37EC:"Used " \
 GPRINT:used:AVERAGE:"Avg  \\: %8.2lf %s " \
 GPRINT:used:MIN:"Min  \\: %8.2lf %s " \
 GPRINT:used:MAX:"Max  \\: %8.2lf %s \\n" \
 STACK:free#00CF00:"Free " \
 GPRINT:free:AVERAGE:"Avg  \\: %8.2lf %s " \
 GPRINT:free:MIN:"Min  \\: %8.2lf %s " \
 GPRINT:free:MAX:"Max  \\: %8.2lf %s \\n" \
 LINE1:max#000000:"Max  " \
 GPRINT:max:AVERAGE:"Avg  \\: %8.2lf %s " \
 GPRINT:max:MIN:"Min  \\: %8.2lf %s " \
 GPRINT:max:MAX:"Max  \\: %8.2lf %s \\n"

Derzeit werden noch mehr Daten aufgezeichnet als überhaupt für die Graphen benötigt werden. Mal sehen ob sich noch weitere sinnvolle Graphen aus den Daten generieren lassen…

3 Antworten auf „OpenNMS: Memcached mit SNMP überwachen“

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.