Logging und Monitoring für angehängte Cluster

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

  1. Google Cloud-Projekt mit aktivierter Abrechnungsfunktion. Weitere Informationen zu den Kosten für Cloud Operations finden Sie in unserer Preisübersicht.

  2. 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
    

  3. Eine lokale Umgebung, über die Sie auf Ihren Cluster zugreifen und kubectl-Befehle ausführen können. Wie Sie kubectl 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 mit kubectl erreichen können:

    kubectl cluster-info
    

    Beispielausgabe:

    Kubernetes master is running at https://[redacted].gr7.us-east-2.eks.amazonaws.com
    

Einrichtung

  1. 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
    
  2. Legen Sie für die Projekt-ID-Variable das Projekt fest, in dem Sie Ihren Cluster registriert haben.

    PROJECT_ID="your-project-id"
    
  3. 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
    
  4. 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

  1. Wechseln Sie in das Verzeichnis logging/:

    cd logging/
    
  2. Ö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
    

  3. Legen Sie in aggregator.yaml unter volumeClaimTemplates/spec den PersistentVolumeClaim storageClassName 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 dies gp2. Für AKS ist dies default.

    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 jeweilige storageClassName basiert auf dem Typ des PersistentVolumes (PV), der von einem Administrator für den Cluster mit StorageClass 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
    
  4. Log-Aggregator erstellen und an den Cluster weiterleiten

    kubectl apply -f aggregator.yaml
    kubectl apply -f forwarder.yaml
    
  5. 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
    

  6. 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.
    

  7. 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
    
  8. 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:

    Log-Explorer aufrufen

  9. 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}"
    

Logs für angehängte Cluster

Monitoring-Agent installieren

  1. Wechseln Sie aus dem Verzeichnis logging/ in das Verzeichnis monitoring/.

    cd ../monitoring
    
  2. Öffnen Sie prometheus.yaml. Legen Sie unter stackdriver-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]"
    
  3. 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
    
  4. 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
    
  5. 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
    
  6. 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"
    
  7. Prüfen, ob die Clustermesswerte nach Cloud Monitoring exportiert werden. Rufen Sie in der Google Cloud Console den Metrics Explorer auf:

    Zum Metrics Explorer

  8. 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 Sie 1.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
    

Monitoring für angehängte Cluster

Bereinigen

  1. 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:

Informationen zu Cloud Monitoring: