Auf dieser Seite erfahren Sie, wie Sie Logs und Messwerte von einem angehängten Cluster in Cloud Logging und Cloud Monitoring exportieren.
Funktionsweise
Google Cloud Observability ist die integrierte Beobachtbarkeitslösung für Google Cloud. Wenn Sie Telemetriedaten auf Clusterebene von einem angehängten Cluster in Google Cloud exportieren möchten, müssen Sie die folgenden Open-Source-Export-Agents in Ihrem Cluster bereitstellen:
- Stackdriver Log Aggregator (stackdriver-log-aggregator-*): Ein Fluentd StatefulSet, das Logs an die Cloud Logging API (früher Stackdriver Logging) sendet.
- Stackdriver Log Forwarder (stackdriver-log-forwarder-*). Ein Fluentbit-DaemonSet, das Logs von jedem Kubernetes-Knoten an den Stackdriver Log Aggregator weiterleitet.
- Stackdriver Metrics Collector (stackdriver-prometheus-k8s-*). Ein Prometheus-StatefulSet, das mit einem Stackdriver-Export-Sidecar-Container konfiguriert ist, um Prometheus-Messwerte an die Cloud Monitoring-API (früher Stackdriver Monitoring) zu senden. Das Sidecar ist ein weiterer Container im selben Pod, der die Messwerte liest, die der Server „prometheus” auf dem Laufwerk speichert und an die Cloud Monitoring API weiterleitet.
Vorbereitung
Google Cloud-Projekt mit aktivierter Abrechnungsfunktion. Weitere Informationen zu den Kosten für Cloud Operations finden Sie in unserer Preisübersicht.
Ein verbundener Cluster, der gemäß dieser Anleitung registriert wurde. Prüfen Sie mit dem folgenden Befehl, ob der Cluster registriert ist:
gcloud container fleet memberships list
Beispielausgabe:
NAME EXTERNAL_ID eks ae7b76b8-7922-42e9-89cd-e46bb8c4ffe4
Eine lokale Umgebung, über die Sie auf Ihren Cluster zugreifen und
kubectl
-Befehle ausführen können. Wie Siekubectl
mit gcloud installieren, erfahren Sie in der Kurzanleitung für GKE. Führen Sie den folgenden Befehl aus, um zu prüfen, ob Sie Ihren angehängten Cluster mitkubectl
erreichen können:kubectl cluster-info
Beispielausgabe:
Kubernetes master is running at https://[redacted].gr7.us-east-2.eks.amazonaws.com
Einrichtung
Klonen Sie das Beispiel-Repository und rufen Sie das Verzeichnis für diese Anleitung auf.
git clone https://github.com/GoogleCloudPlatform/anthos-samples cd anthos-samples/attached-logging-monitoring
Legen Sie für die Projekt-ID-Variable das Projekt fest, in dem Sie Ihren Cluster registriert haben.
PROJECT_ID="your-project-id"
Erstellen Sie ein Google Cloud-Dienstkonto mit Berechtigungen zum Schreiben von Messwerten und Logs in die Cloud Monitoring API und die Cloud Logging API. Den Schlüssel dieses Dienstkontos fügen Sie den im nächsten Abschnitt bereitgestellten Arbeitslasten hinzu.
gcloud iam service-accounts create anthos-lm-forwarder gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com" \ --role=roles/logging.logWriter gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com" \ --role=roles/monitoring.metricWriter
Erstellen Sie einen JSON-Schlüssel für das gerade erstellte Dienstkonto und laden Sie ihn herunter. Erstellen Sie dann mit diesem Schlüssel ein Kubernetes-Secret in Ihrem Cluster.
gcloud iam service-accounts keys create credentials.json \ --iam-account anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com kubectl create secret generic google-cloud-credentials -n kube-system --from-file credentials.json
Logging-Agent installieren
Wechseln Sie in das Verzeichnis
logging/
:cd logging/
Öffnen Sie
aggregator.yaml
. Legen Sie am Ende der Datei die folgenden Variablen auf den Wert fest, der Ihrem Projekt und Ihrem Cluster entspricht:project_id [PROJECT_ID] k8s_cluster_name [CLUSTER_NAME] k8s_cluster_location [CLUSTER_LOCATION]
Sie können den Clusterstandort ermitteln, indem Sie den folgenden Befehl mit dem Mitgliedsnamen des angehängten Clusters ausführen und den Standort abrufen der unter
/locations/<location>
angezeigt wird.gcloud container fleet memberships describe eks | grep name
Ausgabe:
name: projects/my-project/locations/global/memberships/eks
Legen Sie in
aggregator.yaml
untervolumeClaimTemplates/spec
den PersistentVolumeClaimstorageClassName
für Ihren Cluster fest. Wir haben Standardwerte für EKS und AKS bereitgestellt, damit Sie die Kommentarzeichen entsprechend entfernen können. Wenn Sie EKS verwenden, ist diesgp2
. Für AKS ist diesdefault
.Wenn Sie eine benutzerdefinierte Kubernetes Storage-Klasse in AWS oder Azure konfiguriert haben und eine nicht standardmäßige Speicherklasse verwenden oder einen anderen übereinstimmenden Clustertyp verwenden möchten, können Sie den
storageClassName
gehört. Die jeweiligestorageClassName
basiert auf dem Typ des PersistentVolumes (PV), der von einem Administrator für den Cluster mitStorageClass
bereitgestellt wurde. Weitere Informationen zu Speicherklassen und Standard Storage-Klassen für andere große Kubernetes-Anbieter finden Sie in der Kubernetes-Dokumentation.# storageClassName: standard #Google Cloud # storageClassName: gp2 #AWS EKS # storageClassName: default #Azure AKS
Log-Aggregator erstellen und an den Cluster weiterleiten
kubectl apply -f aggregator.yaml kubectl apply -f forwarder.yaml
Prüfen Sie, ob die Pods gestartet wurden. Sie sollten zwei Aggregator-Pods und einen Forwarder-Pod pro Kubernetes-Worker-Knoten sehen. In einem Cluster mit vier Knoten sollten Sie zum Beispiel vier Forwarder-Pods sehen.
kubectl get pods -n kube-system | grep stackdriver-log
Ausgabe:
stackdriver-log-aggregator-0 1/1 Running 0 139m stackdriver-log-aggregator-1 1/1 Running 0 139m stackdriver-log-forwarder-2vlxb 1/1 Running 0 139m stackdriver-log-forwarder-dwgb7 1/1 Running 0 139m stackdriver-log-forwarder-rfrdk 1/1 Running 0 139m stackdriver-log-forwarder-sqz7b 1/1 Running 0 139m
Aggregator-Logs abrufen und prüfen, ob Logs an Google Cloud gesendet werden.
kubectl logs stackdriver-log-aggregator-0 -n kube-system
Ausgabe:
2020-10-12 14:35:40 +0000 [info]: #3 [google_cloud] Successfully sent gRPC to Stackdriver Logging API.
Eine Testanwendung im Cluster bereitstellen. Dies ist ein einfacher HTTP-Webserver mit einem loadgenerator.
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml
Prüfen Sie, ob Sie Logs aus dem verknüpften Cluster im Cloud Logging-Dashboard ansehen können. Rufen Sie in der Google Cloud Console den Log-Explorer auf:
Kopieren Sie im Log-Explorer die Beispielabfrage unten in das Feld Query Builder und ersetzen Sie
${your-cluster-name}
durch Ihren Clusternamen. Klicken Sie auf Abfrage ausführen. Unter Abfrageergebnisse sollten aktuelle Clusterlogs angezeigt werden.resource.type="k8s_container" resource.labels.cluster_name="${your-cluster-name}"
Monitoring-Agent installieren
Wechseln Sie aus dem Verzeichnis
logging/
in das Verzeichnismonitoring/
.cd ../monitoring
Öffnen Sie
prometheus.yaml
. Legen Sie unterstackdriver-prometheus-sidecar/args
die folgenden Variablen so fest, dass sie Ihrer Umgebung entsprechen."--stackdriver.project-id=[PROJECT_ID]" "--stackdriver.kubernetes.location=[CLUSTER_LOCATION]" "--stackdriver.generic.location=[CLUSTER_LOCATION]" "--stackdriver.kubernetes.cluster-name=[CLUSTER_NAME]"
Entfernen Sie in „prometheus.yaml” unter
volumeClaimTemplates/spec
das Kommentarzeichen von „storageClassName
”, das Ihrem Cloud-Anbieter entspricht, wie unter „Logging-Agent installieren” beschrieben.# storageClassName: standard #Google Cloud # storageClassName: gp2 #AWS EKS # storageClassName: default #Azure AKS
Stellen Sie das StatefulSet-Objekt „stackdriver-prometheus” mit dem Exporter-Sidecar in Ihrem Cluster bereit.
kubectl apply -f server-configmap.yaml kubectl apply -f sidecar-configmap.yaml kubectl apply -f prometheus.yaml
Prüfen Sie, ob der Pod
stackdriver-prometheus
ausgeführt wird:watch kubectl get pods -n kube-system | grep stackdriver-prometheus
Ausgabe:stackdriver-prometheus-k8s-0 2/2 Running 0 5h24m
Rufen Sie die Stackdriver Logging-Sidecar-Containerlogs ab, um zu prüfen, ob der Pod gestartet wurde:
kubectl logs stackdriver-prometheus-k8s-0 -n kube-system stackdriver-prometheus-sidecar
Ausgabe:level=info ts=2020-11-18T21:37:24.819Z caller=main.go:598 msg="Web server started" level=info ts=2020-11-18T21:37:24.819Z caller=main.go:579 msg="Stackdriver client started"
Prüfen, ob die Clustermesswerte nach Cloud Monitoring exportiert werden. Rufen Sie in der Google Cloud Console den Metrics Explorer auf:
Klicken Sie auf Abfrageeditor und kopieren Sie dann den folgenden Befehl. Ersetzen Sie dabei
${your-project-id}
und${your-cluster-name}
durch Ihre eigenen Projekt- und Clusterinformationen. Klicken Sie dann auf Abfrage ausführen. Hier sollten Sie1.0.
sehen.fetch k8s_container | metric 'kubernetes.io/anthos/up' | filter resource.project_id == '${your-project-id}' && (resource.cluster_name =='${your-cluster-name}') | group_by 1m, [value_up_mean: mean(value.up)] | every 1m
Bereinigen
So entfernen Sie alle in diesem Leitfaden erstellten Ressourcen:
kubectl delete -f logging kubectl delete -f monitoring kubectl delete secret google-cloud-credentials -n kube-system kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml rm -r credentials.json gcloud compute service-accounts delete anthos-lm-forwarder
Nächste Schritte
Weitere Informationen zu Cloud Logging:
- Cloud Logging – Übersicht
- Logs-Explorer verwenden
- Abfragen für Cloud Logging erstellen
- Logbasierte Messwerte erstellen