Zeitachsendaten sind sehr wertvoll und können auf vielerlei Art genutzt werden, zum Beispiel für die Erkennung von Trends, Monitoring und maschinelles Lernen. Sie können Zeitachsendaten aus der Serverinfrastruktur, dem Anwendungscode und anderen Quellen generieren. Mit OpenTSDB lassen sich große Mengen von Zeitachsendaten mit einem hohen Detaillierungsgrad erfassen und speichern.
In dieser Anleitung erfahren Softwareentwickler und -architekten, wie Sie mithilfe von GKE eine skalierbare Sammlungsebene für Zeitachsendaten erstellen. Außerdem erfahren Sie, wie Sie mit den erfassten Daten mit Bigtable arbeiten. In dieser Anleitung wird davon ausgegangen, dass Sie mit Kubernetes und Bigtable vertraut sind.
Das folgende Diagramm zeigt die allgemeine Architektur dieser Anleitung.
Das obige Diagramm zeigt mehrere Quellen von Zeitachsendaten, wie z. B. IoT-Ereignisse und Systemmesswerte, die mithilfe von OpenTSDB, bereitgestellt auf GKE, in Bigtable gespeichert werden.
Ziele
- In dieser Anleitung verwendete Container-Images mit Cloud Build erstellen
- Diese Container-Images mithilfe von Artifact Registry verwalten
- Bigtable-Instanz erstellen.
- Einen GKE-Cluster installieren
- OpenTSDB im GKE-Cluster bereitstellen
- Zeitachsenmesswerte an OpenTSDB senden
- Messwerte mit OpenTSDB und Grafana visualisieren
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Hinweise
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
Bigtable, Bigtable Admin, GKE, Compute Engine, Cloud Build, and Artifact Registry APIs aktivieren.
Rufen Sie in der Google Cloud Console die Seite Willkommen auf.
Notieren Sie sich die Projekt-ID, da sie in einem späteren Schritt benötigt wird.
-
Aktivieren Sie Cloud Shell in der Google Cloud Console.
Bigtable-Instanz erstellen
In dieser Anleitung werden die von Ihnen erhobenen Zeitachsendaten in Bigtable gespeichert. Sie müssen also eine Bigtable-Instanz erstellen.
Bigtable ist ein schlüssel- bzw. spaltenorientierter Speicher, der sich gut für Zeitachsendaten eignet. Bigtable unterstützt die HBase API. Daher können Sie Software verwenden, die für Apache HBase entwickelt wurde, wie OpenTSDB. Weitere Informationen zum von OpenTSDB verwendeten HBase-Schema finden Sie unter HBase-Schema.
Eine wichtige Komponente von OpenTSDB ist der AsyncHBase-Client, mit dem Massenschreibvorgänge in HBase vollständig asynchron, nicht blockierend und threadsicher ausgeführt werden können. Wenn Sie OpenTSDB mit Bigtable verwenden, wird AsyncHBase als AsyncBigtable-Client implementiert.
In dieser Anleitung wird eine Bigtable-Instanz mit einem Cluster mit einem einzelnen Knoten verwendet. Erwägen Sie beim Wechsel zu einer Produktionsumgebung die Verwendung von Bigtable-Instanzen mit größeren Clustern. Weitere Informationen zum Auswählen einer Clustergröße finden Sie unter Informationen zur Leistung in Bigtable.
Legen Sie in Cloud Shell die Umgebungsvariablen für die Google Cloud-Zone fest, in der Sie den Bigtable-Cluster und den GKE-Cluster erstellen, sowie die Instanz-ID für den Bigtable-Cluster.
export BIGTABLE_INSTANCE_ID=BIGTABLE_INSTANCE_ID export ZONE=ZONE
Dabei gilt:
BIGTABLE_INSTANCE_ID
: Die ID für Ihre Bigtable-Instanz.ZONE
: Die Zone, in der der Bigtable-Cluster und der GKE-Cluster erstellt werden.
Der Befehl sollte in etwa wie das folgende Beispiel aussehen:
export BIGTABLE_INSTANCE_ID=bt-opentsdb export ZONE=us-central1-f
Erstellen Sie die Bigtable-Instanz:
gcloud bigtable instances create ${BIGTABLE_INSTANCE_ID} \ --cluster-config=id=${BIGTABLE_INSTANCE_ID}-${ZONE},zone=${ZONE},nodes=1 \ --display-name=OpenTSDB
Images erstellen, die zum Bereitstellen und Testen von OpenTSDB verwendet werden
Zum Bereitstellen und Demonstrieren von OpenTSDB mit einem Bigtable-Speicher-Backend wird in dieser Anleitung eine Reihe von Docker-Container-Images verwendet, die in GKE bereitgestellt werden. Sie erstellen mehrere dieser Images über Cloud Build mit Code aus einem zugehörigen GitHub-Repository. Beim Bereitstellen der Infrastruktur in GKE wird ein Container-Repository verwendet. In dieser Anleitung verwenden Sie Artifact Registry zur Verwaltung dieser Container-Images.
Legen Sie in Cloud Shell die Umgebungsvariablen für Ihre Google Cloud-Zone fest, in der Sie Ihr Artifact Registry-Repository erstellen möchten:
export PROJECT_ID=PROJECT_ID export REGION=REGION export AR_REPO=AR_REPO
Dabei gilt:
PROJECT_ID
: Ihre Projekt-IDREGION
: Die Region, in der Ihr Artifact Registry-Repository erstellt wirdAR_REPO
: Der Name Ihres Artifact Registry-Repositorys
Der Befehl sollte in etwa wie das folgende Beispiel aussehen:
export PROJECT_ID=bt-opentsdb-project-id export REGION=us-central1 export AR_REPO=opentsdb-bt-repo
Erstellen Sie ein Artifact Registry-Repository:
gcloud artifacts repositories create ${AR_REPO} \ --repository-format=docker \ --location=${REGION} \ --description="OpenTSDB on bigtable container images"
Images erstellen und verwalten, die zum Bereitstellen und Demonstrieren von OpenTSDB verwendet werden
In dieser Anleitung werden zwei Docker-Container-Images verwendet. Das erste Image wird für zwei Zwecke verwendet: zur einmaligen Einrichtung der Bigtable-Datenbank für OpenTSDB und zum Bereitstellen der Lese- und Schreibdienstcontainer für das OpenTSDB-Deployment. Das zweite Image wird zum Generieren von Beispielmesswertdaten verwendet, um Ihr OpenTSDB-Deployment zu demonstrieren.
Wenn Sie den Container-Image-Build-Job an Cloud Build senden, taggen Sie die Images, damit sie nach dem Erstellen in der Artifact Registry gespeichert werden.
Klonen Sie in Cloud Shell das GitHub-Repository, das den zugehörigen Code enthält:
git clone https://github.com/GoogleCloudPlatform/opentsdb-bigtable.git
Gehen Sie zum Beispielcode-Verzeichnis:
cd opentsdb-bigtable
Legen Sie die Umgebungsvariablen für das OpenTSDB-Server-Image fest, das Bigtable als Speicher-Backend verwendet:
export SERVER_IMAGE_NAME=opentsdb-server-bigtable export SERVER_IMAGE_TAG=2.4.1
Erstellen Sie das Image mit Cloud Build:
gcloud builds submit \ --tag ${REGION}-docker.pkg.dev/${PROJECT_ID}/${AR_REPO}/${SERVER_IMAGE_NAME}:${SERVER_IMAGE_TAG} \ build
Da Sie das Image korrekt getaggt haben, wird es nach Abschluss des Builds von Ihrem Artifact Registry-Repository verwaltet.
Legen Sie die Umgebungsvariablen für das Demonstrations-Image zum Generieren von Zeitachsendaten fest:
export GEN_IMAGE_NAME=opentsdb-timeseries-generate export GEN_IMAGE_TAG=0.1
Erstellen Sie das Image mit Cloud Build:
cd generate-ts ./build-cloud.sh cd ..
GKE-Cluster erstellen
GKE stellt eine verwaltete Kubernetes-Umgebung zur Verfügung. Sie können für einen erstellten GKE-Cluster Kubernetes-Pods bereitstellen. In dieser Anleitung werden GKE- und Kubernetes-Pods für die Ausführung von OpenTSDB verwendet.
Bei OpenTSDB sind Speicher- und Anwendungsebene voneinander getrennt. Dadurch kann es für mehrere Instanzen gleichzeitig bereitgestellt werden. Im Parallelbetrieb lassen sich bei OpenTSDB Zeitachsendaten in großem Umfang verarbeiten.
Legen Sie in Cloud Shell die Umgebungsvariablen für die Google Cloud-Zone fest, in der Sie den Bigtable-Cluster und den GKE-Cluster erstellen, sowie den Namen, den Knotentyp und die Version für den GKE-Cluster:
export GKE_CLUSTER_NAME=GKE_CLUSTER_NAME export GKE_VERSION=1.20 export GKE_NODE_TYPE=n1-standard-4
Ersetzen Sie dabei
GKE_CLUSTER_NAME
durch den Namen Ihres GKE-Clusters.Der Befehl sollte in etwa wie das folgende Beispiel aussehen:
export GKE_CLUSTER_NAME=gke-opentsdb export GKE_VERSION=1.20 export GKE_NODE_TYPE=n1-standard-4
Erstellen Sie einen GKE-Cluster.
gcloud container clusters create ${GKE_CLUSTER_NAME} \ --zone=${ZONE} \ --cluster-version=${GKE_VERSION} \ --machine-type ${GKE_NODE_TYPE} \ --scopes "https://www.googleapis.com/auth/cloud-platform"
Dieser Vorgang kann einige Minuten dauern. Durch Hinzufügen der Bereiche zu Ihrem GKE-Cluster kann der OpenTSDB-Container mit Bigtable und Container Registry interagieren.
Im weiteren Verlauf dieser Anleitung werden die von Ihnen erstellten Container verwendet, die von Artifact Registry verwaltet werden. Das zum Erstellen des Containers verwendete Dockerfile und das
entrypoint
-Skript sind im Ordnerbuild
des Repositorys der Anleitung enthalten.Rufen Sie die Anmeldedaten ab, damit Sie eine Verbindung zu Ihrem GKE-Cluster herstellen können:
gcloud container clusters get-credentials ${GKE_CLUSTER_NAME} --zone ${ZONE}
ConfigMap mit Konfigurationsdetails erstellen
Kubernetes verwendet die ConfigMap, um Konfigurationsdetails aus dem Container-Image zu entkoppeln, um Anwendungen portabler zu machen. Die Konfiguration für OpenTSDB wird in der Datei opentsdb.conf
angegeben. Eine ConfigMap mit der Datei opentsdb.conf
ist im Beispielcode enthalten.
In diesem und den folgenden Schritten verwenden Sie das GNU-Dienstprogramm envsubst
, um Platzhalter für Umgebungsvariablen in den YAML-Vorlagendateien durch die entsprechenden Werte für Ihr Deployment zu ersetzen.
Erstellen Sie eine ConfigMap aus der aktualisierten Datei
opentsdb-config.yaml
:envsubst < configmaps/opentsdb-config.yaml.tpl | kubectl create -f -
OpenTSDB-Tabellen in Bigtable erstellen
Bevor Sie Daten mit OpenTSDB lesen oder schreiben können, müssen Sie in Bigtable Tabellen erstellen, in denen diese Daten gespeichert werden. Zum Erstellen der Tabellen erstellen Sie einen Kubernetes-Job.
Starten Sie in Cloud Shell den Job:
envsubst < jobs/opentsdb-init.yaml.tpl | kubectl create -f -
Die Ausführung des Jobs kann bis zu einer Minute oder länger dauern. Prüfen Sie, ob der Job erfolgreich abgeschlossen wurde:
kubectl describe jobs
Die Ausgabe zeigt, dass ein Job erfolgreich war, wenn
Pods Statuses
1 Succeeded
anzeigt.Sehen Sie sich die Joblogs für die Tabellenerstellung an:
OPENTSDB_INIT_POD=$(kubectl get pods --selector=job-name=opentsdb-init \ --output=jsonpath={.items..metadata.name}) kubectl logs $OPENTSDB_INIT_POD
Die Ausgabe sieht etwa so aus:
create 'tsdb-uid', {NAME => 'id', COMPRESSION => 'NONE', BLOOMFILTER => 'ROW', DATA_BLOCK_ENCODING => 'DIFF'}, {NAME => 'name', COMPRESSION => 'NONE', BLOOMFILTER => 'ROW', DATA_BLOCK_ENCODING => 'DIFF'} 0 row(s) in 3.2730 seconds create 'tsdb', {NAME => 't', VERSIONS => 1, COMPRESSION => 'NONE', BLOOMFILTER => 'ROW', DATA_BLOCK_ENCODING => 'DIFF'} 0 row(s) in 1.8440 seconds create 'tsdb-tree', {NAME => 't', VERSIONS => 1, COMPRESSION => 'NONE', BLOOMFILTER => 'ROW', DATA_BLOCK_ENCODING => 'DIFF'} 0 row(s) in 1.5420 seconds create 'tsdb-meta', {NAME => 'name', COMPRESSION => 'NONE', BLOOMFILTER => 'ROW', DATA_BLOCK_ENCODING => 'DIFF'} 0 row(s) in 1.9910 seconds
In der Ausgabe werden alle erstellten Tabellen aufgeführt. Dieser Job führt mehrere Befehle zum Erstellen von Tabellen aus. Jeder hat das Format
create TABLE_NAME
. Die Tabellen werden erfolgreich erstellt, wenn Sie eine Ausgabe im Format0 row(s) in TIME seconds
haben.TABLE_NAME
: Der Name der Tabelle, die vom Job erstellt wirdTIME
: Die Zeit, die für das Erstellen der Tabelle benötigt wurde
Datenmodell
Die von Ihnen erstellten Tabellen speichern Datenpunkte aus OpenTSDB. In einem späteren Schritt schreiben Sie Zeitreihendaten in diese Tabellen. Datenpunkte von Zeitreihen werden so organisiert und gespeichert:
Feld | Erforderlich | Beschreibung | Beispiel |
---|---|---|---|
metric
|
Erforderlich | Element, das gerade gemessen wird – der Standardschlüssel |
sys.cpu.user
|
timestamp
|
Erforderlich | Unix-Epochenzeit der Messung | 1497561091 |
tags
|
Geben Sie mindestens ein Tag an | Qualifiziert die Messung für Abfragezwecke |
hostname=www
cpu=0
env=prod
|
value
|
Erforderlich | Messwert | 89.3 |
Der Messwert, der Zeitstempel und die Tags (Tag-Schlüssel und Tag-Wert) bilden den Zeilenschlüssel. Der Zeitstempel wird auf eine Stunde normalisiert. So wird sichergestellt, dass eine Zeile nicht zu viele Datenpunkte enthält. Weitere Informationen finden Sie unter HBase-Schema.
OpenTSDB bereitstellen
Das folgende Diagramm zeigt die Deployment-Architektur für OpenTSTB mit zugehörigen Diensten, die in GKE und mit Bigtable als Speicher-Backend ausgeführt werden:
In dieser Anleitung werden zwei OpenTSDB-Deployments verwendet: Ein Deployment sendet Messwerte an Bigtable und das andere Deployment liest daraus. Die Verwendung von zwei Deployments sorgt dafür, dass lange Lese- und Schreibvorgänge sich nicht gegenseitig blockieren. Die Pods in jedem Deployment verwenden denselben Container.
OpenTSDB stellt einen Daemon mit dem Namen tsd
zur Verfügung, der in jedem Container ausgeführt wird. Ein einzelner tsd
-Prozess kann in jeder Sekunde eine hohe Anzahl an Ereignissen verarbeiten. Zum Verteilen der Last erstellt jedes Deployment in dieser Anleitung drei Replikate der Lese- und Schreib-Pods.
Erstellen Sie in Cloud Shell eine Bereitstellung zum Schreiben von Messwerten:
envsubst < deployments/opentsdb-write.yaml.tpl | kubectl create -f -
Die Konfigurationsinformationen für das Deployment zum Schreiben befinden sich in der Datei
opentsdb-write.yaml.tpl
im Ordnerdeployments
des Repositorys dieser Anleitung.Erstellen Sie ein Deployment zum Lesen von Messwerten:
envsubst < deployments/opentsdb-read.yaml.tpl | kubectl create -f -
Die Konfigurationsinformationen für das Deployment zum Lesen befinden sich in der Datei
opentsdb-read.yaml.tpl
im Ordnerdeployments
des Repositorys der Anleitung.
In einer Produktionsbereitstellung können Sie die Anzahl der ausgeführten tsd
-Pods entweder manuell oder mithilfe von Autoscaling in Kubernetes erhöhen. In gleicher Weise haben Sie die Möglichkeit, die Anzahl der Instanzen in Ihrem GKE-Cluster manuell oder mithilfe von Cluster Autoscaler zu erhöhen.
OpenTSDB-Dienste erstellen
Für eine konsistente Netzwerkverbindung zu den Bereitstellungen erstellen Sie zwei Kubernetes-Dienste: Ein Dienst schreibt Messwerte in OpenTSDB und der andere liest daraus.
Erstellen Sie in Cloud Shell den Dienst zum Schreiben von Messwerten:
kubectl create -f services/opentsdb-write.yaml
Die Konfigurationsinformationen für den Dienst, der die Messwerte schreibt, befinden sich in der Datei
opentsdb-write.yaml
im Ordnerservices
des Repositorys der Anleitung. Dieser Dienst wird innerhalb Ihres Kubernetes-Clusters erstellt und ist mit anderen Diensten erreichbar, die in Ihrem Cluster ausgeführt werden.Erstellen Sie den Dienst für das Lesen von Messwerten:
kubectl create -f services/opentsdb-read.yaml
Die Konfigurationsinformationen für den Dienst, der die Messwerte liest, befinden sich in der Datei
opentsdb-read.yaml
im Ordnerservices
des Repositorys der Anleitung.
Zeitachsendaten in OpenTSDB schreiben
Es gibt mehrere Mechanismen, um Daten in OpenTSDB zu schreiben. Wenn Sie die Endpunkte des Dienstes definiert haben, können Sie anschließend über Prozesse Daten darin speichern. In dieser Anleitung wird ein Python-Dienst bereitgestellt, der zu Demonstrationszwecken Zeitachsendaten für zwei Messwerte ausgibt: Arbeitsspeicherauslastung des Clusters (memory_usage_gauge
) und CPU-Auslastung des Clusters (cpu_node_utilization_gauge
).
Stellen Sie in Cloud Shell den Zeitachsenmesswertgenerator in Ihrem Cluster bereit:
envsubst < deployments/generate.yaml.tpl | kubectl create -f -
Beispielzeitachsendaten mit OpenTSDB untersuchen
Sie können Zeitachsenmesswerte mithilfe des Dienstendpunkts opentsdb-read
abfragen, den Sie zuvor im Rahmen dieser Anleitung bereitgestellt haben. Sie können die Daten auf verschiedene Arten verwenden.
Oft werden sie zur Visualisierung verwendet. OpenTSDB enthält eine einfache Schnittstelle, um die gesammelten Messwerte zu visualisieren. Im Rahmen dieser Anleitung verwenden wir Grafana, eine beliebte Alternative zur Visualisierung von Messwerten, die zusätzliche Funktionen bietet.
Für die Ausführung von Grafana in einem Cluster ist ein ähnlicher Vorgang erforderlich, mit dem Sie OpenTSDB eingerichtet haben. Zusätzlich zum Erstellen einer ConfigMap und einer Bereitstellung müssen Sie eine Portweiterleitung konfigurieren, damit Sie auf Grafana zugreifen können, während es in Ihrem Kubernetes-Cluster ausgeführt wird.
Erstellen Sie in Cloud Shell die Grafana-ConfigMap mithilfe der Konfigurationsinformationen in der Datei
grafana.yaml
im Ordnerconfigmaps
des Repositorys der Anleitung:kubectl create -f configmaps/grafana.yaml
Erstellen Sie das Grafana-Deployment mithilfe der Konfigurationsinformationen in der Datei
grafana.yaml
im Ordnerdeployments
des Repositorys der Anleitung:kubectl create -f deployments/grafana.yaml
Ermitteln Sie den Namen des Grafana-Pods im Cluster und verwenden Sie ihn zum Einrichten der Portweiterleitung.
GRAFANA_PODS=$(kubectl get pods --selector=app=grafana \ --output=jsonpath={.items..metadata.name}) kubectl port-forward $GRAFANA_PODS 8080:3000
Überprüfen Sie, ob die Weiterleitung erfolgreich eingerichtet wurde. Die Ausgabe sieht etwa so aus:
Forwarding from 127.0.0.1:8080 -> 3000
Klicken Sie in Cloud Shell auf Webvorschau und wählen Sie dann Vorschau auf Port 8080 aus, um eine Verbindung zur Grafana-Weboberfläche herzustellen.
Weitere Informationen finden Sie unter Webvorschau verwenden.
Im Browser wird ein neuer Tab geöffnet und eine Verbindung zur Grafana-Weboberfläche hergestellt. Nach kurzer Zeit werden dann Diagramme wie diese angezeigt:
Dieses Grafana-Deployment wurde für diese Anleitung angepasst. Mit den Dateien
configmaps/grafana.yaml
unddeployments/grafana.yaml
wird Grafana so konfiguriert, dass eine Verbindung zum Dienstopentsdb-read
hergestellt, anonyme Authentifizierung zugelassen und einige grundlegende Cluster-Messwerte angezeigt werden. Für ein Grafana-Deployment in einer Produktionsumgebung empfehlen wir die Implementierung der richtigen Authentifizierungsmechanismen und die Verwendung umfangreicherer Zeitachsendaten.
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Einzelne Ressourcen löschen
Löschen Sie den Kubernetes-Cluster, damit alle Artefakte gelöscht werden, die Sie erstellt haben:
gcloud container clusters delete GKE_CLUSTER_NAME
Bestätigen Sie das Löschen des Kubernetes-Clusters durch Eingabe von
Y
.So löschen Sie die Bigtable-Instanz:
Wechseln Sie in der Google Cloud Console zu Bigtable.
Wählen Sie die zuvor erstellte Instanz aus und klicken Sie auf Instanz löschen.
Projekt löschen
- Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.
Nächste Schritte
- Unter Bigtable-Schemadesign für Zeitachsendaten wird beschrieben, wie Sie bei der Nutzung von OpenTSDB eine bessere Leistung erzielen.
- Informationen zum Migrieren von HBase zu Bigtable finden Sie unter Daten von HBase zu Bigtable migrieren.
- Im Video Bigtable in Action von der Google Cloud Next 2017 wird das Hochstufen von Feldern – eine wichtige Leistungsverbesserung – beschrieben.
- Weitere Informationen zu Standardbereichen für GKE-Cluster finden Sie unter Clusterbereiche.
- Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center