Tomcat Monitoring mit Nagios, Collectd, Graphite und Co.

Von: Thomas Bayer
Datum: 8. November 2015

Beim Single Service Per Host Deployment Modell der Microservices bekommt jeder Service seinen eigenen Rechner und damit auch seinen eigenen Web Container wie z.B. einen Tomcat. Das hat zur Folge dass sich die Zahl der Tomcat Installationen im Unternehmen erheblich erhöht. Jede dieser Tomcat Instanzen sollte überwacht werden, um einen zuverlässigen Betrieb zu gewährleisten.

Dieser Artikel beschreibt die unterschiedlichen Ebenen, auf denen Tomcat überwacht werden kann. Zur Veranschaulichung werden im Artikel konkrete Tools vorgestellt. Beginnen wir ganz unten beim Betriebssystem.

Überwachung auf Ebene des Betriebssystems mit Nagios

Der Tomcat benötigt Ressourcen des Betriebssystem wie z.B. CPU-Zeit oder Speicher. Eine Überwachung dieser Ressourcen ermöglicht ein schnelles Eingreifen meist sogar bevor z.B. die Platte volläuft.

Für die Überwachung von Metriken wie freier Plattenplatz und CPU-Auslastung eignen sich Tools wie z.B. das Open Source Monitoring Werkzeug Nagios .

Wie eine Ubuntu Installation mit Tomcat in der Nagios Console aussieht zeigt der Screenshot unten. Auf dem Rechner gibt noch genügend CPU, Speicher und die MySQL Datenbank ist auch ok. Selbst der Prozess in dem Tomcat ausgeführt wird, wird überwacht. Mit dem Nagios JStat Plugin können Speicher und CPU einer Java VM überwacht werden.


Abbildung : Auszug aus der Nagios Console

Aber wie überwacht man die Vorgänge im Inneren eines Tomcats?

Tomcat Manager Web Application

Mit dem Tomcat wird die Tomcat Manager Web Application ausgeliefert. Im Manager werden alle installierten Web Anwendungen aufgelistet und angezeigt ob die jeweilige Web Anwendung ausgeführt wird.


Abbildung : Tomcat Manager Web Applikation

Über den Server Status können globale Werte wie Speicherbelegung und Anzahl der Threads ausgelesen werden. Individuelle Informationen zu einer einzelnen Web Anwendung sucht man dort vergeblich. Wer detailiertere Informationen benötigt muss auf JMX zugreifen.


Abbildung : Tomcat Manager Web Applikation

JMX

Für die Überwachung und das Management von Java Anwendungen gibt es die Java Management Extensions. Bei JMX wird über MBeans eine Facade bereitgestellt, die es einem entfernten Client ermöglichen, Werte auszulesen, zu setzen und sogar Funktionen aufzurufen.

Der Tomcat enthält eine große Anzahl von MBeans, wovon jedes wiederum eine Reihe von Attributen enthalten kann. Wo findet man aber die für die Überwachung des Tomcat interessanten MBeans und deren Attribute?

Metriken für den Tomcat

Für die Überwachung eines Tomcat Servers bieten sich die im folgenden beschriebenen MBeans an:

Catalina:type=GlobalRequestProcessor,name="http-nio-8080"

mit den Attributen:

bytesSent Anzahl der Bytes, die als Response gesendet wurden.
bytesReceived Anzahl der Bytes, die als Request empfangen wurden.
processingTime CPU-Zeit in Millisekunden, die der Tomcat Connector für die Bearbeitung von Requests verbraucht hat. Bei mehreren Kernen kann die processingTime mehr als 60000 ( entspricht 1 Sekunde) pro Sekunde zunehmen, da die Rechnenzeit der Kerne addiert wird.
errorCount Anzahl der Fehler
maxTime Maximale Zeit in Millisekunden, die für eine Anfrage benötigt wurde.
requestCount Anzahl der Anfragen

und:

Catalina:type=ThreadPool,name="http-nio-8080"

mit den Attributen:

currentThreadCount Anzahl der Threads im Pool

Außer diesen Tomcat spezifischen MBeans gibt es noch MBeans, die von der Java VM bereitgestellt werden und die sich daher in jeder Java VM finden. Diese können für das Monitoring eines Tomcat Servers ebenfalls interessant sein:

java.lang:type=Threading

DaemonThreadCount
PeakThreadCount
ThreadCount

JConsole

Mit JConsole, einem Werkzeug, welches mit dem Java SDK ausgeliefert wird, kann man auf die MBeans zugreifen. Die Abbildung zeigt Attribute des GlobalRequestProcessor MBeans. Der requestCount enthält beispielsweise die Anzahl der Requests, die der Tomcat entgegen genommen hat.


Abbildung : JConsole mit einer Ansicht der Attribute des GlobalRequestProcessor

Jolokia

Der Zugriff auf JMX kann anstatt mit einer JMX Konsole auch per API erfolgen. Das JMX API ist bereits in die Jahre gekommen und nicht sehr intuitiv. Schnell wünscht man sich eine REST API mit der man auf die MBeans zugreifen kann. Eine solche API für JMX liefert das Jolokia Projekt .

Die Abbildung unten zeigt die Daten des GlobalRequestProcessor MBeans als JSON Datenstruktur.


Abbildung : Zugriff auf JMX MBeans mit dem Jolokia REST API

Hawt.io

Hawt.io ist eine komfortable JMX Konsole, welche im Browser als HTML5 Web Anwendung ausgeführt wird. Anstatt direkt über JMX zu kommunizieren macht sich hawt.io das von Jolokia bereitgestellte REST API zu nutze.

Mit hawt.io können Dashboards mit verschiedenen Diagrammen erstellt werden, die die Werte der MBeans und ihren zeitlichen Verlauf visualisieren. Die Werte werden aber nur aufgezeichnet, solange die hawt.io Anwendung im Browser läuft. Wird der Browser oder das Tab geschlossen, so werden auch keine Werte mehr abgefragt. Daher eignet sich hawt.io eher für die Entwicklung als für den Betrieb im Rechenzentrum.

Für das Sammeln von Zeitreihen gibt es andere Werkzeuge wie z.B. collectd.

Collectd

Wie der Name bereits vermuten läßt sammelt collectd Daten zur Performanz. Collectd wird mit mehr als 90 Plugins für die unterschiedlichsten Datenquellen ausgeliefert. Eines der Plugins ist das Generic JMX Plugin, mit dem die Attribute von MBeans ausgelesen werden können. Konfiguriert man mit dem GenericJMXPlugin die Abfrage der richtigen MBeans des Tomcat, so erhält man eine Datenbank mit Metriken z.B. zur Performanz, die ständig aktualisiert wird. Collectd fühlt sich nur für das Sammeln und Ablegen der Daten verantwortlich. Die Auswertung und die Visualisierung überläßt collect anderen Tools wie beispielsweise Graphite.

Graphite

Mit Graphite können Diagramme von Daten in Echtzeit erstellt werden. Als Datenquelle kann beispielsweise collectd dienen. Somit eignet sich Graphite auch für die Visualisierung von Metriken des Tomcat Web Containers.

Der Screenshot unten zeigt ein individuell zusammengestelltes Graphite Dashboard mit Diagrammen die Tomcat Metriken visualisieren. Der Verlauf der aktiven Benutzersitzungen, der Anfragen, der Fehler und der Bandbreite wird in jeweils einem Diagramm visualisiert.


Abbildung : Graphite Dashboard mit Diagrammen zum Tomcat

Log Management

Was jetzt noch fehlt ist die Überwachung der Logdateien.

Das Parsen des Tomcat Logs kann z.B. mit Logstash erfolgen. Logstash kann die Logdaten an Elasticsearch übergeben. Die Abbildung unten zeigt eine Elasticsearch-Suche über die Tomcat Logs mittels der Kibana UI, mit der Suche und Visualisierung der Logdaten möglich sind .


Abbildung : Suche in den Tomcat Logs mit Kibana und Elasticsearch

Fazit

Ein Tomcat Monitoring gibt es nicht out of the box. Der Tomcat kann aber über Werkzeuge überwacht werden, die man bereits im Datacenter oder in der Cloud findet. Viele dieser Werkzeuge wie zum Beispiel collectd, Graphite oder hawt.io sind nicht nur für die Überwachung des Tomcat interessant. Diese Tools können auch für weitere Services, Server oder Docker Container in einer Microservices Architektur verwendet werden.