HBase ist ein spaltenorientiertes DBMS, das schnellen wahlfreien Zugriff bietet. Es wird mit einer Verwaltungsoberfläche geliefert, die Tabellendetails anzeigt, aber ich wollte ein besseres Verständnis für die Interna von HBase. In diesem Blogbeitrag zeige ich Ihnen, wie Sie mit dem JMX-Exporter von Prometheus beginnen, die HBase-Metriken exportieren und in Grafana visualisieren können.
Die Einrichtung
Wir werden HBase mit drei Tools überwachen: (1) Prometheus' JMX-Exporter zum Exportieren der JMX-Metriken von HBase, (2) Prometheus zum Speichern von Metriken und (3) Grafana zum Visualisieren der Metriken. In diesem Beitrag verwende ich eine pseudo-verteilte HBase mit 2 Mastern und 4 Regionsservern.
Prometheus ist ein quelloffenes Zeitreihen-Datenbanksystem zur Erfassung von Systemmetriken. Ich finde es sehr einfach einzurichten, zu verwalten und Metriken zu sammeln. Es verwendet ein Pull-Modell über HTTP, um kontinuierlich Metriken abzurufen, und bietet mehrere Out-of-the-Box-Exporter für verschiedene Systeme. Wenn Sie eine JVM-basierte Anwendung ausführen, für die es keinen eigenen Exporter gibt, können Sie den JMX-Exporter verwenden, um JMX-MBeans im Prometheus-Metrikformat bereitzustellen.
JMX, auch bekannt als Java Management Extensions, ist eine Reihe von Tools zur Verbindung mit einer JVM und zur Verwaltung von Ressourcen zur Laufzeit. Von JMX verwaltete Ressourcen werden als Managed Beans (MBeans) bezeichnet, die uns Informationen über den Status von HBase liefern können. Grafana schließlich ist ein Open-Source-Visualisierungstool, das gut mit verschiedenen Zeitreihen-Datenbanken wie Prometheus zusammenarbeitet.
Die Abbildung unten zeigt die Einrichtung des Überwachungssystems.
Freigabe von HBase-Metriken
In der HBase-Benutzeroberfläche können Sie die rohen JMX-Metriken auf der Registerkarte "Metrics Dump" anzeigen. Auf dem Rechner selbst können Sie den HMaster- und HRegionServer-Prozess auch mit JConsole oder JVisualVM untersuchen. JConsole bietet eine Registerkarte MBeans, auf der Sie die exponierten MBeans direkt einsehen können. Mit JVisualVM müssen Sie zunächst das VisualVM-MBeans-Plugin installieren (Tools --> Plugins). Wenn dieses Plugin läuft, können wir alle Arten von Metriken von HBase anzeigen.
Prometheus kann die MBeans jedoch nicht direkt lesen. Er benötigt die Metriken in seinem eigenen Format, so dass wir die MBeans zunächst umwandeln müssen. Der Prometheus JMX-Exporter dient genau diesem Zweck. Er kann auf zwei Arten ausgeführt werden: (1) als unabhängiger HTTP-Server, der die JMX-Metriken ausliest und umwandelt, oder (2) als Java-Agent, der einen HTTP-Server offenlegt und die JVM ausliest. In diesem Beitrag werde ich die Javaagent-Option verwenden. Eine Anleitung für die Ausführung der HTTP-Server-Option finden Sie auf dem GitHub des JMX-Exporters. Ein Java-Agent ist wie ein JVM-Plugin, das die Java Instrumentation API nutzt, mit der wir JVMs überwachen und Profile erstellen können. Starten Sie die JVM mit dem Argument -javaagent:
# javaagent Option $ java -javaagent:[=options] -jar yourjar.jar # Prometheus JMX javaagent options $ java -javaagent:jmxexporter.jar=port:/jmxconfig.yaml -jar yourjar.jar
Um also den Javaagent mit HBase zu verbinden, fügen Sie die folgenden Zeilen in Ihre hbase-env.sh ein:
HBASE_OPTS="$HBASE_OPTS -javaagent:/pfad/jmx_prometheus_javaagent-0.7.jar=7000:/pfad/hbase_jmx_config.yaml"
Die config.yaml ist obligatorisch, sie muss jedoch keine Konfiguration enthalten, so dass eine leere yaml-Datei ausreicht. Die jar-Datei des Exporters können Sie von
$ curl localhost:7000/metrics # HELP jmx_config_reload_failure_total Anzahl der Fälle, in denen die Konfiguration nicht neu geladen werden konnte. # TYPE jmx_config_reload_failure_total Zähler jmx_config_reload_failure_total 0.0 # HELP process_cpu_seconds_Gesamte vom Prozess verbrauchte CPU-Zeit in Sekunden. # TYPE process_cpu_seconds_total Zähler process_cpu_seconds_total 57.72266 # HELP process_start_time_seconds Startzeit des Prozesses, in unixtime. # TYPE process_start_time_seconds gauge process_start_time_seconds 1.485560224181E9 . . .
Offenlegung von Metriken im pseudoverteilten Modus
Das Anhängen des Javaagenten an einen festen Port funktioniert, wenn jede HBase JVM auf einem anderen Host ausgeführt wird. Im pseudo-distributierten Modus schlägt dies fehl, da der Port nach dem Start der ersten HBase JVM verwendet wird. Um dieses Problem zu lösen, habe ich das folgende Skript zu bin/hbase hinzugefügt. hbase-env.sh wird nur einmal beim Start aufgerufen, also habe ich dieses Skript in bin/hbase ausgeführt, kurz bevor die JVMs gestartet werden. Es sucht nach dem ersten verfügbaren Port im Bereich 7000-7010.
wenn [ "$COMMAND" = "Meister" ] || [ "$COMMAND" = "regionserver" ]; dann
für Hafen in {7000..7010}; tun
wenn [ </span>lsof -n -i:$port <span class="p">|</span> grep LISTEN <span class="p">|</span> wc -l<span class="sb"> == "1" ]; dann
echo "Prüfender Hafen $Hafen - Hafen $Port in Gebrauch"
sonst
echo "Prüfender Hafen $Hafen - Hafen $Port nicht in Gebrauch - Port verwenden $Hafen"
HBASE_OPTS="$HBASE_OPTS -javaagent:/pfad/jmx_prometheus_javaagent-0.7.jar=$port:/path/hbase_jmx_config.yaml"
Pause
fi
fertig
fi
Visualisierung der Metriken
Richten Sie Prometheus und Grafana ein und fügen Sie die exponierten Metriken zu Ihrer Prometheus-Zieldatei hinzu:
global: scrape_interval: 15s auswertung_intervall: 15s scrape_configs: - job_name: 'hbase' static_configs: - Ziele: ['localhost:7000', 'localhost:7001', 'localhost:7002', 'localhost:7003', 'localhost:7004', 'localhost:7005']
In Prometheus können Sie nun Abfragen durchführen. Die Metriken heißen
Den JMX-Exporter konfigurieren
Das Prometheus-Metrikenformat ist metric_name{label_name="label_value"} value [timestamp]. Der JMX-Exporter leistet gute Arbeit bei der Konvertierung der MBeans in Prometheus-Metriken ohne Konfiguration. Einige Metriken werden jedoch nicht korrekt dargestellt, z.B. gibt es in den Regionserver-Metriken eine Metrik Hadoop_HBase_Namespace_default_table_TestTable_region_5c54bd5d2a312fd17b6d226b4ce88370_metric_storeCount {name="RegionServer",sub="Regionen",}. Die Region-ID ist im Namen der Metrik enthalten und Sie möchten diesen Wert wahrscheinlich als Bezeichnung verwenden, damit Sie in Prometheus darauf zugreifen können. Um dies richtig zu konfigurieren, bearbeiten Sie die config.yaml:
Regeln: - Muster:HadoopNamespace_([^W_]+)_table_([^W_]+)_region_([^W_]+)_metric_(w+) Name: HBase_metrisch_$4 Etiketten: Namespace: "$1" Tabelle: "$2" Region: "$3"
Die MBeans werden mit dem Muster abgeglichen. In JVisualVM können wir die Registerkarte Metadaten öffnen und die MBeans genauer untersuchen, um das Muster abzugleichen:
Das Musterformat ist:
Hadoop: Teil vor dem Doppelpunkt in ObjectName: durch Komma getrennte MBean-Eigenschaften, der Teil nach dem Doppelpunkt in ObjectName: Hier können Sie tabellarische Daten abgleichen. Nicht verwendet in HBase MBeans.Namespace_([^W_]+)_table_([^W_]+)_region_([^W_]+)_metric_(w+): Regex, der mit dem Attributnamen übereinstimmt.[^W_]+entspricht alphanumerischen Zeichen außer Unterstrichen.
Die ausgewählten Teile zwischen den Klammern können verwendet werden, um den exponierten Metriknamen und die Bezeichnungen zusammenzustellen. Die Verwendung einer benutzerdefinierten config.yaml hat einen Nachteil: Alle MBeans werden mit den angegebenen Mustern abgeglichen. Wenn eine MBean keinem Muster entspricht, wird sie nicht angezeigt! Es gibt keinen Rückgriff auf das Standardmuster.
Die Dokumentation und weitere Beispiele finden Sie unter jmx_exporter.
Fazit
Ich habe Ihnen gezeigt, wie Sie HBase JMX-Metriken im Prometheus-Metrikenformat bereitstellen und in Grafana visualisieren können. Nicht alle Hadoop-bezogenen Tools haben eine schöne Benutzeroberfläche, aber mit dieser Einrichtung können wir ganz einfach Metriken von JVM-basierten Anwendungen sammeln. Ich habe einen PR für die Konfigurationsdatei beim Prometheus JMX-Exporter GitHub eingereicht und möchte Sie ermutigen, das Gleiche zu tun, wenn Sie eine geschrieben haben.
Um selbst mit der Einrichtung in diesem Blogpost zu experimentieren, habe ich ein Repository auf meinem GitHub angelegt.
Referenzen
- Prometheus JMX-Exporter
- Mit draw.io erstellte Bilder
- HBase: Der definitive Leitfaden
Unsere Ideen
Weitere Blogs
Contact



