Konfiguration des JAVA SNMP

Aus Laub-Home Wiki

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