In 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 key="retry" value="1" /> <property key="service-name" value="memcached" /> </protocol-plugin>
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 key="timeout" value="10000"/> <parameter key="service-name" value="memcached"/> <parameter key="run-level" value="3"/> <parameter key="match-all" value="true"/> </service> ... <monitor service="Process-memcached" class-name="org.opennms.netmgt.poller.monitors.HostResourceSwRunMonitor"/>
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…
Schau dir das an …
http://www.opennms.org/wiki/Memcached_Monitor
Du hast den ersten Satz nicht gelesen
verdammt