Tomcat Monitoring mit Nagios, Collectd, Graphite und Co.
Von: Thomas Bayer
Datum: 8. Nov. 2015
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 :
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 :
Ü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 :
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 :
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 :
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 :
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 :
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.