Monitoring


Verfügbare Monitoring-Beans

Xima® Formcycle bietet für das Monitoring des Anwendungsstatus je Server-Typ eine entsprechende Monitoring-Bean an. Diese kann über JMX mit einem dazugehörigen Werkzeug (z.B. JConsole) angebunden und abgefragt werden. Die Namen unter der die entsprechenden Beans registriert sind lauten hierbei:

Frontend-Server
de.xima.fc:type=FSMonitor,qualifier=<Kontext-Name>
Master-Server
de.xima.fc:type=MSMonitor,qualifier=<Kontext-Name>

Der qualifier ist hierbei für eine Parallel-Installation der entsprechenden Server notwendig und entspricht dem Kontext-Namen der Anwendung. Dieser ist hierbei standardmäßig der Namen der war-Datei, kann jedoch über den Kontext-Parameter XFC_CONTEXT_NAME innerhalb der web.xml angepasst werden. Ebenfalls wird während des Starts des entsprechenden Servers der konkret verwendete Name ausgeloggt. Hierfür kann es notwendig sein, die Logging-Einstellungen anzupassen. Jede Bean besitzt zudem unterschiedliche Monitoring-Attribute, welche in folgenden Übersichten dargestellt sind:

 AttributBedeutung Mögliche Werte
runningGibt an, ob der Master-Server aktiv isttrue,false
db_connectedGibt an, ob der Master-Server erfolgreich eine Datenbankverbindung herstellen konnte.true,false
fs_connectedRepräsentiert eine Map mit den Namen aller Frontend-Server als Schlüssel und als Wert, ob diese mit dem Master-Server verbunden sind.Schlüssel: <Frontend-Server-Name>
Wert: true,false
fs_activeRepräsentiert eine Map mit den Namen aller Frontend-Server als Schlüssel und als Wert ob diese automatisch verbunden werden soll.Schlüssel: <Frontend-Server-Name>
Wert: true,false
fs_statusRepräsentiert eine Map mit den Namen aller Frontend-Server als Schlüssel und dem konkreten Verbindungsstatus als Wert.Schlüssel: <Frontend-Server-Name>
Wert: CONNECTED,NOT_CONNECTED,ERROR,
RECONNECTING,DISCONNECTING,CONNECTING,
AUTHENTICATING, WAIT_FOR_CONNECTION
fs_disconnected_count Gibt die Anzahl der nicht verbundenen Frontend-Server an.Zahlen größer/gleich 0
fs_connected_count Gibt die Anzahl der verbundenen Frontend-Server an.Zahlen größer/gleich 0
failed_login_countGibt die Anzahl der aktuell registrierten fehlerhaften Login-Versuche aus, also wie viele Login-Name sich Cache für die fehlerhaften Versuche befinden.Eine Zahl größer oder gleich 0
connect_frontendserver_by_nameTriggert eine Verbindung zum Frontend-Servers per Name an.Schlüssel: <Frontend-Server-Name>, true/false um Reconnect immer anzustoßen (egal ob Verbindung besteht)
Rückgabewert: true/false
connect_frontendserver_by_idTriggert eine Verbindung zum Frontend-Servers per ID an.Schlüssel: <Frontend-Server-ID>, true/false um Reconnect immer anzustoßen (egal ob Verbindung besteht)
Rückgabewert: true/false
AttributBedeutungMögliche Werte
runningGibt an, ob der Frontend-Server erfolgreich gestartet wurde.true,false
connectedGibt an, ob der Frontend-Server mit einem Master-Server verbunden ist.true,false
statusGibt den konkreten Verbindungsstatus des Frontend-Servers an.CONNECTED,NOT_CONNECTED,ERROR,
RECONNECTING,DISCONNECTING,CONNECTING,
AUTHENTICATING, WAIT_FOR_CONNECTION
failed_login_countGibt die Anzahl der aktuell registrierten fehlerhaften Login-Versuche aus, also wie viele Login-Name sich Cache für die fehlerhaften Versuche befinden.Eine Zahl größer oder gleich 0.
restartTriggert einen Neustart des Frontend-Servers an.Keine

JSON-REST-Schnittstelle

Die JSON-Schnittstelle ist seit Version 6.0.0 zu Gunsten einer separaten Jolokia-Installation entfernt worden. Die für das Monitoring verwendeten Beans sind nachwievor verfügbar. Die JSON-Schnittstelle des Monitorings erlaubte nur lesende Zugriff und war nur über den Anwendungsserver aufrufbar (localhost/127.0.0.1). Falls dies gewünscht ist müsste der Zugriff innerhalb der Jolokia Anwendung konfiguriert werden, weiter Infomationen finden Sie hier.

Ein möglicher Aufruf, nach erfolgter Installation von Jolokia, sieht hierbei zum Beispiel wie folgt aus:

JSON-Antwort:

{
 "request": {
   "mbean": "de.xima.fc:qualifier=formcycle,type=MSMonitor",
   "type": "read"
  },
 "value": {
   "running": true,
   "failed_login_count": 0,
   "fs_active": {
     "localhost": true
    },
   "db_connected": true,
   "fs_connected_count": 1,
   "fs_connected": {
     "localhost": true
    },
   "fs_disconnected_count": 0,
   "fs_status": {
     "localhost": "CONNECTED"
    }
  },
 "timestamp": 1579186291,
 "status": 200
}

Weitere Informationen zur Abindung des Framework Jolokia und eine genauere Dokumentation finden sie hier.

Nagios-Anbindung

Eine Anbindung der Nagios-Monitoring-Anwendung erfolgt über die beschriebene JSON-Schnittstelle. Hierfür muss das Nagios-Plugin jmx4perl installiert werden. Dieses erlaubt es Nagios das JSON zu interpretieren und entsprechende Abfragen aufzubauen. Eine genauere Installations-Dokumentation hierfür finden Sie hier. Anschließend ist es möglich mit dem entsprechenden command des Plugins die Abfragen an die JSON-Schnittstelle zu formulieren.

Beispiele

Folgende Beispiele funktionieren lediglich wenn Nagios auf dem selben Server wie die Anwendungen betrieben wird!

Command

define command{
 command_name          check_jmx4perl
 command_line          check_jmx4perl --url $ARG1$ --mbean $ARG2$ --attribute $ARG3$ $ARG4$
}

Service-Definitionen

Abfrage der Anzahl der am Master-Server nicht verbundenen Frontend-Server. Ist diese größer/gleich 1, erfolgt eine Warnung. Ist diese ferner größer/gleich 2, wird diese als kritisch im Nagios interpretiert:

define service{
 use                  generic-service
 host_name            localhost
 service_description  MS:FS-connected-count
 check_command        check_jmx4perl!http://localhost/formcycle/monitoring/!de.xima.fc:type=MSMonitor,qualifier=formcycle!fs_disconnected_count!--warning 1 --critical 2
}

Abfrage des Datenbank-Verbindungsstatus des Master-Servers

define service{
 use                  generic-service
 host_name            localhost
 service_description  MS:DB-connected
 check_command        check_jmx4perl!http://localhost/formcycle/monitoring/!de.xima.fc:type=MSMonitor,qualifier=formcycle!db_connected!--string --critical 'false'
}

Abfrage, ob Frontend-Server localhost mit Master-Server verbunden ist

define service{
 use                  generic-service
 host_name            localhost
 service_description  MS:FS-localhost
 check_command        check_jmx4perl!http://localhost/formcycle/monitoring/!de.xima.fc:type=MSMonitor,qualifier=formcycle!fs_connected!--path=localhost --string --critical 'false'
}

Abfrage an Frontend-Server, ob dieser erfolgreich mit einem Master-Server verbunden ist

define service{
 use                  generic-service
 host_name            localhost
 service_description  FS:connected
 check_command        check_jmx4perl!http://localhost/frontend-server/monitoring/!de.xima.fc:type=FSMonitor,qualifier=frontend-server!connected!--string --critical 'false'
}

Betrieb von Nagios auf anderem Server

Da aus Sicherheitsgründen die Standardkonfiguration der JSON-Schnittstelle es nicht gestattet, von anderen IP-Adressen als die des lokalen Servers aufgerufen zu werden, ist ein Betrieb von Nagios auf einem anderen Server mit Mehraufwand verbunden. Neben den entsprechenden Lösungen über Routing oder das Verwenden eines Proxys, ist es ebenso möglich, diese Beschränkung konfigurativ zu behandeln. So ist es zum Beispiel möglich, dem Monitoring-Servlet in welchem diese Beschränkung stattfindet über den Parameter policyLocation den Pfad oder die URL zu einer entsprechenden Jolokia-Policy-Datei zu spezifizieren. Da es sich bei besagten Servlet lediglich um eine Fassade des Standard-Jolokia-Servlets handelt, wird dieser ebenso wie alle weiteren Parameter an dieses durchgereicht und es erfolgt eine entsprechende Konfiguration, siehe hier).

Eine weitere Möglichkeit um die Anbindung von Nagios von einem anderen Server aus zu ermöglichen, ist der parallele Betrieb von Jolokia und Xima® Formcycle bzw. dem Frontend-Server. Hierfür stellt Jolokia bereits einen in einer eigenen Anwendung gepackten JavaEE-Agent zur Verfügung. (Dokumentation, Download)

Dieser besitzt standardmäßig keine Limitierung von Leseoperationen und Steueranweisungen und ist ebenso nicht bezüglich aufrufender Server bzw. IP-Adressen beschränkt. Da dies jedoch ein potentielles Sicherheitsrisiko darstellt, wird es ausdrücklich empfohlen, diese entsprechend der eigenen Server-Topologie und Anforderungen zu konfigurieren. Hierbei ist zum Beispiel anzuraten, den Zugriff lediglich auf den Nagios-Server zu beschränken. Eine ausführliche Dokumentation der Sicherheitsmechanismen von Jolokia finden Sie hier.

Entsprechend des Betriebs einer parallelen Jolokia-Installation ändert sich beispielhaft die Überprüfung der Verbindung zum Frontend-Server localhost wie folgt:

define service{
 use                  generic-service
 host_name            fc-test
 service_description  MS:FS-localhost
 check_command        check_jmx4perl!http://fc-test/jolokia/!de.xima.fc:type=MSMonitor,qualifier=formcycle!fs_connected!--path=localhost --string --critical 'false'
}

Frontend-Server-Monitoring-URL

7.1.0+  Die Funktionalität steht ab Xima® Formcycle 7.1 zur Verfügung.

Es steht auch eine URL zur Verfügung, über die ein Monitoring des Frontend-Servers möglich ist. Diese ist nur auf dem Master-Server verfügbar und lautet:

  https://<domain>/<context>/monitor/fs/connection

Aus Sicherheitsgründen ist diese URL standardmäßig deaktiviert. Zum Aktivieren müssen die Anwendungseinstellungen monitoring.enabled und monitoring.allowed.hosts entsprechend konfiguriert werden.

Läuft der Xima® Formcycle-Server als etwa unter der Domain demo.firma.de im Kontext formcycle, dann lautet die URL https://demo.firma.de/formcycle/monitor/fs/connection//.//

Als Parameter muss immer entweder der Name des System-Frontend-Servers über den Parameter name oder die interne Datenbank-ID über den Parameter id angegeben werden:

  https://<domain>/<context>/monitor/fs/connection?name=MeinFrontendServer
  https://<domain>/<context>/monitor/fs/connection?id=5963

Folgende Möglichkeiten zum Monitoring stehen zur Verfügung:

  • https://<domain>/<context>/monitor/fs/connection?name=<Name>

Prüft, ob eine Verbindung mit dem Frontend-Server besteht. Liefert den HTTP-Statuscode 200 zurück, falls eine Verbindung besteht, ansonsten 500.

  • https://<domain>/<context>/monitor/fs/connection?name=<Name>&action=connect

Versucht, eine Verbindung zum Frontend-Server herzustellen. Besteht bereits eine Verbindung, wird nichts getan. Liefert den HTTP-Statuscode 200 zurück, wenn bereits eine Verbindung besteht oder die Verbindung erfolgreich hergestellt werden konnte. Falls der Verbindungsaufbau fehlgeschlagen ist, wird der HTTP-Statuscode 500 zurückgeliefert.

  • https://<domain>/<context>/monitor/fs/connection?name=<Name>&action=connect&force=true

Versucht, eine Verbindung zum Frontend-Server herzustellen. Besteht bereits eine Verbindung, wird die Verbindung getrennt und versucht, erneut eine Verbindung aufzubauen. Liefert den HTTP-Statuscode 200 zurück, wenn Verbindung erfolgreich hergestellt werden konnte. Falls der Verbindungsaufbau fehlgeschlagen ist, wird der HTTP-Statuscode 500 zurückgeliefert.