Konfiguration des JAVA SNMP
Will man zum Beispiel schauen wie die Memory Auslastung in der Tomcat Java Virtual Machine aussieht, oder andere Dinge der JVM auslesen, hilft einem die eingebaute SNMP Funktionalität der JVM.
Einrichten der SNMP ACL
Als erstes muss eine ACL Datei angelegt werden, in der der Zugriff auf das SNMP konfiguriert wird:
/etc/tomcat6/tomcat-snmp.acl
acl = { { communities = {snmpcommunity} access = read-only managers = localhost, IP } }
Eine Beispiel Datei mit vielen Kommentaren befindet sich in der JAVA Installation.
zum Beispiel: /usr/lib/jvm/java-1.6.0-sun-1.6.0.45.x86_64/jre/lib/management/snmp.acl.template
Ablegen von JVM-MANAGEMENT-MIB
Die Datei JVM-MANAGEMENT-MIB von Oracle herunterladen und im SNMP Mibs Ordner ablegen:
wget http://docs.oracle.com/javase/6/docs/jre/api/management/JVM-MANAGEMENT-MIB.mib
Einbinden von Java SNMP in den Tomcat
Die folgende Zeile muss in das Tomcat Options File eingetragen werden:
# snmp plugin for tomcat CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.snmp.port=10001 -Dcom.sun.management.snmp.acl=/etc/tomcat6/tomcat-snmp.acl -Dcom.sun.management.snmp.interface=127.0.0.1"
- Debian: /etc/default/tomcat6
- RedHat: /etc/sysconfig/tomcat6
- Stand Alone: ${CATALINA_HOME}/bin/catalina.sh
Zu guter Letzt den Tomcat neustarten!
Funktionstest
snmpwalk -v2c -c {snmpcommunity} localhost:10001 -m JVM-MANAGEMENT-MIB jvmMgtMIB
Ausgabe:
JVM-MANAGEMENT-MIB::jvmClassesLoadedCount.0 = Gauge32: 13225 JVM-MANAGEMENT-MIB::jvmClassesTotalLoadedCount.0 = Counter64: 13277 JVM-MANAGEMENT-MIB::jvmClassesUnloadedCount.0 = Counter64: 52 JVM-MANAGEMENT-MIB::jvmClassesVerboseLevel.0 = INTEGER: silent(1) JVM-MANAGEMENT-MIB::jvmMemoryPendingFinalCount.0 = Gauge32: 0 JVM-MANAGEMENT-MIB::jvmMemoryGCVerboseLevel.0 = INTEGER: verbose(2) JVM-MANAGEMENT-MIB::jvmMemoryGCCall.0 = INTEGER: supported(2) JVM-MANAGEMENT-MIB::jvmMemoryHeapInitSize.0 = Counter64: 1572864000 bytes JVM-MANAGEMENT-MIB::jvmMemoryHeapUsed.0 = Counter64: 467542504 bytes JVM-MANAGEMENT-MIB::jvmMemoryHeapCommitted.0 = Counter64: 1520500736 bytes ... ... ...
Einbinden in regulären SNMP-Dienst
Um die neuen Java-SNMP-MIBs über den normalen SNMP-Dienst (Port 161) einzubinden muss folgendes in die SNMP-Konfig eingetragen werden:
/etc/snmp/snmpd.conf
# Proxy Konfiguration fuer JVM Monitoring # proxy -v 2c -c {snmpcommunity} localhost:10001 .1.3.6.1.4.1.42 #
Diese Option mapped den entfernten OID Range .1.3.6.1.4.1.42 eins zu eins auf den lokalen Range .1.3.6.1.4.1.42. Sollen nun z.B. zwei unterschiedliche Instanzen einer JVM, welche auf der gleichen Maschine laufen, mit SNMP überwacht werden, funktioniert dies nicht, da es zu Kollisionen kommt. Um dies zu vermeiden müssen die entfernen OID Ranges auf unterschiedliche lokale OID Ranges gemapped werden. Dies geschieht wie folgt:
/etc/snmp/snmpd.conf
# Proxy Konfiguration fuer JVM Monitoring # proxy -v 2c -c {snmpcommunity} localhost:10001 .1.3.6.1.4.1.15652.1.1 .1.3.6.1.4.1.42 proxy -v 2c -c {snmpcommunity} localhost:10002 .1.3.6.1.4.1.15652.1.2 .1.3.6.1.4.1.42 #
Die erste Instanz ist nun unter der OID .1.3.6.1.4.1.15652.1, die zweite Instanz unter .1.3.6.1.4.1.15652.2 erreichbar. Alles darunter sind die normalen Java OIDs (hinter der .42)
Beispiel:
# jvmMemoryHeapUsed, first instance [root@mgmt ~]# snmpwalk -v2c -c {snmpcommunity} [host] .1.3.6.1.4.1.15652.1.1.2.145.3.163.1.1.2.11 SNMPv2-SMI::enterprises.15652.1.2.145.3.163.1.1.2.11.0 = Counter64: 38383440 # jvmMemoryHeapUsed, secound instance [root@mgmt ~]# snmpwalk -v2c -c {snmpcommunity} [host] .1.3.6.1.4.1.15652.1.2.2.145.3.163.1.1.2.11 SNMPv2-SMI::enterprises.15652.2.2.145.3.163.1.1.2.11.0 = Counter64: 12816360
Beispiel OIDs
Variable | OID | OID (gemapped auf SHE private OID) |
---|---|---|
jvmMemoryHeapUsed | .1.3.6.1.4.1.42.2.145.3.163.1.1.2.11 | .1.3.6.1.4.1.15652.1.1.2.145.3.163.1.1.2.11 |
jvmMemoryHeapCommitted | .1.3.6.1.4.1.42.2.145.3.163.1.1.2.12 | .1.3.6.1.4.1.15652.1.1.2.145.3.163.1.1.2.12 |
jvmMemoryHeapMaxSize | .1.3.6.1.4.1.42.2.145.3.163.1.1.2.13 | .1.3.6.1.4.1.15652.1.1.2.145.3.163.1.1.2.13 |
jvmMemoryNonHeapUsed | .1.3.6.1.4.1.42.2.145.3.163.1.1.2.21 | .1.3.6.1.4.1.15652.1.1.2.145.3.163.1.1.2.21 |
jvmMemoryNonHeapCommited | .1.3.6.1.4.1.42.2.145.3.163.1.1.2.22 | .1.3.6.1.4.1.15652.1.1.2.145.3.163.1.1.2.22 |
jvmMemoryNonHeapMaxSize | .1.3.6.1.4.1.42.2.145.3.163.1.1.2.23 | .1.3.6.1.4.1.15652.1.1.2.145.3.163.1.1.2.23 |
jvmThreadCount | .1.3.6.1.4.1.42.2.145.3.163.1.1.3.1 | .1.3.6.1.4.1.15652.1.1.2.145.3.163.1.1.3.1 |
Quellen
- MIB Quelle: JAVA MIB Map
- Artikel Quelle: Java SNMP
- Weiterer Artikel: Monitoring the JVM with SNMP