JMX-Daten zum elastischen Stapel (ELK)

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.

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:

image

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.