Aktionen

Zabbix Server Java Gateway JMX einrichten

Aus znilwiki

1 Hinweis

Important.png
Hinweis: Anleitung wurde unter Ubuntu 14.04 erstellt




2 Auf dem Server / Proxy

Wenn Ihr den Zabbix-Server gemäß meiner Anleitung aufgesetzt habt (Zabbix Server + Agent unter Ubuntu 14.04 LTS installieren) dann ist bei euch schon alles Bereit für den Einsatz des Zabbix Java-Gateway und das JMX-Monitoring.
Es fehlt dann nur noch die Java Runtime:

apt-get install openjdk-7-jdk


Egal ob Server oder Proxy, wichtig ist das bei der Konfiguration der Parameter --enable-java angegeben wurde (Beispiel Proxy):

./configure --enable-proxy --enable-agent --enable-java --with-mysql --with-net-snmp --with-libcurl --with-openipmi --with-ssh2 --with-libxml2 --enable-ipv6 --with-unixodbc 


Das Zabbix-Java-Gateway muss separat zum Zabbix Server gestartet werden - und soll ja auch beim booten automatisch gestartet werden.
Hierzu erstellen wir die folgende Datei:

nano /etc/init.d/zabbix_java_gateway

mit dem folgenden Inhalt:

#!/bin/sh
#
# /etc/init.d/zabbix_java_gateway
### BEGIN INIT INFO
# Provides:          zabbix_java_gateway
# Required-Start:    $network $remote_fs $syslog
# Should-Start:      $time
# Required-Stop:     $syslog $remote_fs
# Should-Stop: $time ypbind smtp
# Default-Start:     3 5
# Default-Stop:      0 1 2 6
# Short-Description: ZABBIX Java Gateway
# Description:       Start ZABBIX Java Gateway
### END INIT INFO

#Check for Java - 
#export PATH=$PATH:<<JAVA_HOME>>/bin/

# zabbix details
ZABBIX_JAVAGW_START=/usr/local/sbin/zabbix_java/startup.sh
ZABBIX_JAVAGW_STOP=/usr/local/sbin/zabbix_java/shutdown.sh
PID=/tmp/zabbix_java.pid

test -f $ZABBIX_JAVAGW_START || exit 0 


RETVAL=0

case "$1" in
    start)
        echo -n "Starting zabbix java gateway: "
	$ZABBIX_JAVAGW_START
	
        RETVAL=$?
        echo 
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/zabbix-java
        ;;
    stop)
        echo -n "Shutting down zabbix agent: "
	$ZABBIX_JAVAGW_STOP

        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/zabbix-java
        ;;
    restart|reload)
        $0 stop
        $0 start
        RETVAL=$?
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|reload}"
        exit 1
        ;;
esac

exit $RETVAL



Danach die folgenden Befehle ausführen:

chmod 755 /etc/init.d/zabbix_java_gateway
update-rc.d zabbix_java_gateway defaults


Das Java-Gateway kann nun über den folgenden Befehl gestartet werden:

service zabbix_java_gateway start


Ob es wirklich läuft prüfen wir in der Prozessübersicht:

ps -Af | grep JavaGateway

Ausgabe:

root      4149     1  0 15:39 ?        00:00:03 java -server -classpath lib:lib/android-json-4.3_r3.1.jar:lib/logback-classic-0.9.27.jar:lib/logback-core-0.9.27.jar:lib/slf4j-api-1.6.1.jar:bin/zabbix-java-gateway-2.4.4.jar:bin/zabbix-java-gateway-2.4.6.jar:bin/zabbix-java-gateway-2.4.7.jar -Dzabbix.pidFile=/tmp/zabbix_java.pid com.zabbix.gateway.JavaGateway


Damit der Zabbix-Server das Java-Gateway auch nutzt muss dieses in der Konfigurationsdatei aktiviert werden:

nano /usr/local/etc/zabbix_server.conf
oder
nano /usr/local/etc/zabbix_proxy.conf


Und die folgenden Abschnitte anpassen:

### Option: JavaGateway
#       IP address (or hostname) of Zabbix Java gateway.
#       Only required if Java pollers are started.
# 
# Mandatory: no
# Default:
# JavaGateway=
JavaGateway=127.0.0.1

### Option: JavaGatewayPort
#       Port that Zabbix Java gateway listens on.
#
# Mandatory: no
# Range: 1024-32767
# Default:
# JavaGatewayPort=10052
JavaGatewayPort=10052

### Option: StartJavaPollers
#       Number of pre-forked instances of Java pollers.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartJavaPollers=0
StartJavaPollers=5


Important.png
Hinweis: Wir starten hier 5 Poller weil dies auch der Default Wert des Java-Gateways. Wer die Anzahl erhöhen will/muss, muss also auch diesen Wert anpassen den man in der /sbin/zabbix_java/settings.sh findet.
Auf Systemen bei denen aus den Quellen installiert wurde sollte die Datei /etc/zabbix/zabbix_java.conf heißen.

Danach den Zabbix-Server / Zabbix-Proxy Dienst neu starten. Jetzt wäre auch ein guter Test den ganzen Server einmal neu zu starten.

service zabbix_server restart
oder
service zabbix_proxy restart




3 Anpassung der Hosts in Zabbix

Bei den Host die per JMX Überwacht werden sollen muss die JMX-Schnittstelle separat gepflegt werden (ähnlich der SNMP-Schnittstelle): JMX-Monitoring-001.png

Der zu benutzende Port wird bei der Freischaltung in Java auf dem Host lokal festgelegt und muss deshalb immer richtig eingetragen werden.



Das Java auf den Hosts muss für diese Remote-Abfragen vorbereitet werden (dabei wird auch der zu benutzende Port festgelegt). Dies geschieht in dem beim Aufruf der Java-Applikation folgende zusätzlichen Parameter hinzugefügt werden:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

Die vorstehenden Zeilen schalten die Abfragen ohne Passwortschutz auf dem Port 12345 frei.
Beim Tomcat würden wir die tomcat.conf bearbeiten und - falls vorhanden den Eintrag ergänzen, ansonsten einen neuen Eintrag machen:

JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"

Soll eine vorherige Authentifizierung geschehen so ändern die Parameter sich wie folgt:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.access.file=/etc/jmxremote.access
-Dcom.sun.management.jmxremote.password.file=/etc/jmxremote.password

Wiederum können die Abfragen über Port 7002 gestellt werden. Es sind dafür jedoch nur Benutzer zugelassen die in der Datei /etc/jmxremote.access aufgeführt sind. Die Benutzer selbst werden in der Datei /etc/jmxremote.password mit Benutzername und Passwort eingerichtet.

Deshalb müssen diese beiden Dateien wie folgt eingerichtet werden:

nano /etc/jmxremote.password

mit folgendem Inhalt:

zabbix Hbz7Huai

Damit gibt es den Benutzer zabbix mit dem Passwort Hbz7Huai
Nun vergeben wir die Berechtigungen für den Benutzer:

nano /etc/jmxremote.access

mit folgendem Inhalt:

zabbix readonly

Damit erhält der Benutzer zabbix Lesezugriff. Möglich ist auch der Wert readwrite womit dann auch Schreibzugriffe möglich sind.



4 Anpassung des Templates

Falls Ihr auf den Host die Überwachung ohne Passwort freigeschaltet habt müsst Ihr nichts machen.
Falls Ihr jedoch einen Benutzer und ein Passwort festgelegt habt so müsst Ihr diese dann in den Templates und bei den Abfragen mit angeben.
Bei Zabbix ist das Template

Template JMX Generic

dabei. Den Benutzernamen und das Passwort müsst Ihr dann bei jedem Item eintragen:
JMX-Monitoring-002.png
Natürlich könnt das auch per Mass Update machen - und dabei gleich Makros verwenden:
JMX-Monitoring-003.png

Und im Host oder im Template hinterlegt Ihr dann die Daten:
JMX-Monitoring-004.png



5 Probleme?

Bei manchen Kunden funktionierte das ganze nicht - wegen der Firewalls zwischen den Netzen.
Das Problem ist das während der Kommunikation nicht nur der angegebene Port - im obigen Beispiel 12345' - nutzt sondern noch dynamisch zusätzliche Ports.
Das kann man unterbinden indem man zusätzliche zu den obigen Parametern noch folgende beide hinzufügt:

-Djava.rmi.server.hostname=$REMOTE_HOST_IP_ADDR -Dcom.sun.management.jmxremote.rmi.port=12345

Für

$REMOTE_HOST_IP_ADDR

tragt die IP-Adresse des Hosts ein den Ihr überwacht, die Ihr beim Host unter JMX interfaces, NICHT die des Zabbix-Servers. NICHT 127.0.0.1 und auch NICHT 0.0.0.0

Danke an Roman S. für die Lösung!



6 Kommentare


Kommentar hinzufügen
znilwiki freut sich über alle Kommentare. Sofern du nicht anonym bleiben möchtest, trage deinen Namen oder deine Email-Adresse ein oder melde dich an. Du kannst das Feld auch einfach leer lassen.