JMX-Daten an den Elastic Stack (ELK)
1. Überblick
In diesem kurzen Tutorial erfahren Sie, wie Sie JMX-Daten von unserem Tomcat-Server an den Elastic Stack (früher bekannt als ELK) senden.
Wir werden erläutern, wie Sie Logstash so konfigurieren, dass Daten aus JMX gelesen und an Elasticsearch gesendet werden.
2. Installieren Sie den elastischen Stapel
Zuerst müssen wir den elastischen Stapel installieren (Elasticsearch -Logstash -Kibana).
Um sicherzustellen, dass alles verbunden ist und ordnungsgemäß funktioniert, senden wir die JMX-Daten an Logstash und visualisieren sie auf Kibana.
2.1. Testen Sie Logstash
Zuerst gehen wir zum Logstash-Installationsverzeichnis, das vom Betriebssystem abhängt (in unserem Fall Ubuntu):
cd /opt/logstash
Wir können eine einfache Konfiguration für Logstash über die Befehlszeile festlegen:
bin/logstash -e 'input { stdin { } } output { elasticsearch { hosts => ["localhost:9200"] } }'
Anschließend können wir einfach einige Beispieldaten in die Konsole eingeben und mit dem Befehl STRG-D die Pipeline schließen, wenn wir fertig sind.
2.2. Testen Sie Elasticsearch
Nach dem Hinzufügen der Beispieldaten sollte in Elasticsearch ein Logstash-Index verfügbar sein. Dies können wir folgendermaßen überprüfen:
curl -X GET 'http://localhost:9200/_cat/indices'
Beispielausgabe:
yellow open logstash-2017.11.10 5 1 3531 0 506.3kb 506.3kb
yellow open .kibana 1 1 3 0 9.5kb 9.5kb
yellow open logstash-2017.11.11 5 1 8671 0 1.4mb 1.4mb
2.3. Testen Sie Kibana
Kibana läuft standardmäßig auf Port 5601 - wir können auf die Homepage zugreifen unter:
http://localhost:5601/app/kibana
Wir sollten in der Lage sein, einen neuen Index mit dem Muster „logstash-*“ zu erstellen - und dort unsere Beispieldaten zu sehen.
3. Konfigurieren Sie Tomcat
Als Nächstes müssen wir JMX aktivieren, indem wirCATALINA_OPTS Folgendes hinzufügen:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9000
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
Beachten Sie, dass:
-
Sie könnenCATALINA_OPTS konfigurieren, indem Siesetenv.sh ändern
-
Für Ubuntu-Benutzer finden Siesetenv.sh unter "/ usr / share / tomcat8 / bin".
4. Verbinden Sie JMX und Logstash
Verbinden wir nun unsere JMX-Metriken mit Logstash. Dafür muss das JMX-Eingabe-Plugin dort installiert sein (dazu später mehr).
4.1. Konfigurieren Sie JMX-Metriken
Zuerst müssen wir die JMX-Metriken konfigurieren, die wir speichern möchten. Wir werden die Konfiguration im JSON-Format bereitstellen.
Hier sind unserejmx_config.json:
{
"host" : "localhost",
"port" : 9000,
"alias" : "reddit.jmx.elasticsearch",
"queries" : [
{
"object_name" : "java.lang:type=Memory",
"object_alias" : "Memory"
}, {
"object_name" : "java.lang:type=Threading",
"object_alias" : "Threading"
}, {
"object_name" : "java.lang:type=Runtime",
"attributes" : [ "Uptime", "StartTime" ],
"object_alias" : "Runtime"
}]
}
Beachten Sie, dass:
-
Wir haben denselben Port für JMX vonCATALINA_OPTS verwendet
-
Wir können so viele Konfigurationsdateien bereitstellen, wie wir möchten, aber wir müssen sie im selben Verzeichnis haben (in unserem Fall haben wirjmx_config.json in '/ monitor / jmx /' gespeichert).
4.2. JMX Input Plugin
Als Nächstes installieren wir das JMX-Eingabe-Plugin, indem wir den folgenden Befehl im Logstash-Installationsverzeichnis ausführen:
bin/logstash-plugin install logstash-input-jmx
Dann müssen wir eine Logstash-Konfigurationsdatei (jmx.conf) erstellen, in der die Eingabe JMX-Metriken und die Ausgabe an Elasticsearch sind:
input {
jmx {
path => "/monitor/jmx"
polling_frequency => 60
type => "jmx"
nb_thread => 3
}
}
output {
elasticsearch {
hosts => [ "localhost:9200" ]
}
}
Schließlich müssen wir Logstash ausführen und unsere Konfigurationsdatei angeben:
bin/logstash -f jmx.conf
Beachten Sie, dass unsere Logstash-Konfigurationsdateijmx.conf im Logstash-Ausgangsverzeichnis gespeichert ist (in unserem Fall/opt/logstash).
5. Visualisieren Sie JMX-Metriken
Lassen Sie uns abschließend eine einfache Visualisierung unserer JMX-Metrikdaten auf Kibana erstellen. Wir erstellen ein einfaches Diagramm, um die Verwendung des Heapspeichers zu überwachen.
5.1. Neue Suche erstellen
Zunächst erstellen wir eine neue Suche, um Metriken für die Verwendung des Heapspeichers abzurufen:
-
Klicken Sie in der Suchleiste auf das Symbol „Neue Suche“
-
Geben Sie die folgende Abfrage ein
metric_path:reddit.jmx.elasticsearch.Memory.HeapMemoryUsage.used
-
Drücken Sie Enter
-
Stellen Sie sicher, dass Sie in der Seitenleiste die Felder "metric_path" und "metric_value_number" hinzufügen
-
Klicken Sie in der Suchleiste auf das Symbol "Suche speichern"
-
Nennen Sie die Suche "belegter Speicher"
Falls Felder in der Seitenleiste als nicht indiziert markiert sind, wechseln Sie zur Registerkarte "Einstellungen" und aktualisieren Sie die Feldliste im Index "logstash-*".
5.2. Liniendiagramm erstellen
Als Nächstes erstellen wir ein einfaches Liniendiagramm, um die Nutzung des Heapspeichers im Laufe der Zeit zu überwachen:
-
Gehen Sie zur Registerkarte "Visualisieren"
-
Wählen Sie "Liniendiagramm".
-
Wählen Sie "Aus gespeicherter Suche".
-
Wählen Sie die zuvor erstellte Suche nach verwendetem Speicher
Stellen Sie für die Y-Achse Folgendes sicher:
-
Aggregation: Durchschnitt
-
Feld:metric_value_number
Wählen Sie für die X-Achse "Datumshistogramm" und speichern Sie die Visualisierung.
5.3. Verwenden Sie das Skriptfeld
Da die Speichernutzung in Bytes angegeben ist, ist sie nicht sehr gut lesbar. Wir können den Metriktyp und den Wert konvertieren, indem wir in Kibana ein Skriptfeld hinzufügen:
-
Gehen Sie unter "Einstellungen" zu den Indizes und wählen Sie den Index "logstash-*"
-
Gehen Sie zur Registerkarte "Skriptfelder" und klicken Sie auf "Skriptfeld hinzufügen".
-
Name:metric_value_formatted
-
Format: Bytes
-
Für Script verwenden wir einfach den Wert von 'metric_value_number':
doc['metric_value_number'].value
Jetzt können Sie Ihre Suche und Visualisierung ändern, um das Feld isierungmetric_value_formatted Visual anstelle von (metric_value_number "zu verwenden - und die Daten werden ordnungsgemäß angezeigt.
So sieht dieses sehr einfache Dashboard aus:
6. Fazit
Und wir sind fertig. Wie Sie sehen, ist die Konfiguration nicht besonders schwierig. Wenn die JMX-Daten in Kibana sichtbar werden, können wir viele interessante Visualisierungsarbeiten durchführen, um ein fantastisches Dashboard für die Produktionsüberwachung zu erstellen.