Beobachtbarkeit – Fehlerbehebung

Auf dieser Seite wird beschrieben, wie Sie Probleme auf den Anthos Service Mesh-Seiten in der Google Cloud Console beheben.

In der Dienstliste fehlt ein bestimmter Dienst.

Prüfen Sie, ob eine Kubernetes-Dienstkonfiguration in Ihrem Cluster vorhanden ist, wenn ein Dienst in der Liste fehlt.

So rufen Sie eine Liste aller Kubernetes-Dienste ab:

 kubectl get services --all-namespaces

So rufen Sie eine Liste der Kubernetes-Dienste in einem bestimmten Namespace ab:

kubectl get services -n YOUR_NAMESPACE

Fehlende oder falsche Telemetriedaten für Dienste

Standardmäßig sind Cloud Monitoring und Cloud Logging in Ihrem Google Cloud-Projekt aktiviert, wenn Sie Anthos Service Mesh installieren. Zur Erhebung von Telemetriedaten ruft jeder in Ihre Dienst-Pods eingefügte Sidecar-Proxy die Cloud Monitoring API und die Cloud Logging API auf. Nach der Bereitstellung der Arbeitslasten dauert es etwa ein bis zwei Minuten, bis die Telemetriedaten in der Google Cloud Console angezeigt werden. Anthos Service Mesh hält die Dienst-Dashboards automatisch auf dem neuesten Stand:

  • Die Sidecar-Proxys rufen ungefähr jede Minute Messwerte von der Cloud Monitoring API ab.

  • Zur Aktualisierung des Topologiediagramms senden die Sidecar-Proxys etwa jede Minute inkrementelle Berichte und etwa alle 10 Minuten vollständige Berichte.

  • Für das Logging rufen die Sidecar-Proxys etwa alle 10 Sekunden die Cloud Logging API auf.

  • Für das Tracing müssen Sie Cloud Trace aktivieren. Traces werden gemäß der von Ihnen konfigurierten Stichprobenhäufigkeit (normalerweise eine Stichprobe alle 100 Anfragen) gemeldet.

Messwerte werden nur für HTTP-Dienste auf der Seite mit Anthos Service Mesh-Messwerten angezeigt. Wenn Sie keine Messwerte sehen, prüfen Sie Folgendes:

Prüfen Sie, ob Sidecar-Proxys eingefügt wurden.

Prüfen Sie, ob in alle Pods im Namespace für die Dienste Ihrer Anwendung Sidecar-Proxys eingefügt wurden:

kubectl get pod -n YOUR_NAMESPACE --all

In der folgenden Beispielausgabe des vorherigen Befehls sehen Sie, dass die Spalte READY zwei Container für jede Ihrer Arbeitslasten enthält: den primären Container und den Container für den Sidecar-Proxy.

NAME                    READY   STATUS    RESTARTS   AGE
YOUR_WORKLOAD           2/2     Running   0          20s
...

Wenn Sie keine zwei Container sehen, prüfen Sie, ob Ihr Namespace das Label istio-injection=enabled hat. Das weist darauf hin, dass die automatische Sidecar-Einfügung aktiviert ist:

  kubectl get ns --show-labels

Beispielausgabe:

NAME              STATUS   AGE   LABELS
default           Active   35m   istio-injection=enabled
istio-system      Active   34m   istio-injection=disabled,istio-operator-managed=Reconcile
  • Wenn Sie das Label istio-injection=enabled nicht sehen, führen Sie den folgenden Befehl aus, um die automatische Sidecar-Einfügung zu aktivieren:

    kubectl label namespace YOUR_NAMESPACE istio-injection=enabled --overwrite
  • Wenn das Label istio-injection=enabled angezeigt wird und Anthos Service Mesh auf einem vorhandenen Google Kubernetes Engine-Cluster installiert wurde, in dem Arbeitslasten vorhanden waren, müssen Sie alle ausgeführten Pods neu starten, damit der Sidecar-Proxy eingefügt oder auf die aktuelle Anthos Service Mesh-Version aktualisiert wird. Weitere Informationen finden Sie unter Sidecar-Dateien für vorhandene Pods aktualisieren.

Prüfen Sie die Portnamen des Kubernetes-Diensts.

Prüfen Sie die Portnamen des Kubernetes-Diensts, um festzustellen, ob Anthos Service Mesh den Dienst als HTTP-Dienst betrachtet. Damit die Dienstports in Anthos Service Mesh enthalten sind, müssen sie benannt werden und der Name muss das Protokoll des Ports enthalten. Beispiel:

apiVersion: v1
kind: Service
metadata:
  name: ratings
  labels:
    app: ratings
    service: ratings
spec:
  ports:
  - port: 9080
    name: http

Der Portname des Diensts kann ein Suffix in der Syntax name: protocol[-suffix] enthalten, wobei mit den eckigen Klammern ein optionales Suffix angegeben wird, das mit einem Bindestrich beginnen muss. Beispiel:

kind: Service
metadata:
  name: myservice
spec:
  ports:
  - number: 3306
    name: mysql
  - number: 80
    name: http-web

Damit die Messwerte in der Google Cloud Console angezeigt werden, müssen die Dienstports mit einem der folgenden Protokolle benannt werden: http, http2 oder grpc. Dienstports mit dem https-Protokoll im Namen werden als tcp behandelt. Für diese Dienste werden keine Messwerte angezeigt.

Prüfen Sie, ob die erforderlichen APIs aktiviert sind.

Anthos Service Mesh benötigt mehrere APIs für die Berichterstellung und Anzeige von Telemetrie. Mit dem Befehl gcloud services list können Sie sehen, welche APIs für Ihr Projekt aktiviert sind, oder Sie können einfach zur Sicherheit alle erforderlichen APIs aktivieren.

  1. Legen Sie das Standardprojekt für die Google Cloud CLI fest:

    gcloud config set project YOUR_PROJECT_ID
  2. Aktivieren Sie alle erforderlichen APIs:

    gcloud services enable \
       container.googleapis.com \
       compute.googleapis.com \
       monitoring.googleapis.com \
       logging.googleapis.com \
       meshca.googleapis.com \
       meshtelemetry.googleapis.com \
       meshconfig.googleapis.com \
       iamcredentials.googleapis.com \
       anthos.googleapis.com

Prüfen Sie, ob das ASM Mesh Data Plane-Dienstkonto vorhanden ist.

  1. Öffnen Sie in der Google Cloud Console die Seite „IAM“:

    Seite "IAM" öffnen

  2. Wählen Sie Ihr Projekt aus.

  3. Suchen Sie in der Mitgliederliste nach einem Dienstkonto mit dem Namen ASM Mesh Data Plane-Dienstkonto.

  4. Wenn das Dienstkonto fehlt, erstellen Sie es:

    curl --request POST \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --data '' \
      https://meshconfig.googleapis.com/v1alpha1/projects/YOUR_PROJECT_ID:initialize

Prüfen, ob Ihre Arbeitslasten ausgeführt werden

  1. Öffnen Sie die Seite GKE-Arbeitslasten in der Google Cloud Console:

    GKE-Arbeitslasten öffnen

  2. Wählen Sie Ihr Projekt aus.

  3. Fügen Sie Ihrem Cluster einen Filter hinzu. Prüfen Sie, ob alle Arbeitslasten für Ihre Anwendung und Anthos Service Mesh ausgeführt werden und den Status OK haben. Eine Arbeitslast kann aufgrund von begrenzten Ressourcen (CPU, Arbeitsspeicher usw.) fehlschlagen. In diesem Fall müssen Sie Ihren Cluster aktualisieren und ihm mehr Ressourcen zuteilen. Weitere Informationen finden Sie unter Größe eines Clusters anpassen.

Prüfen, ob die Anwendung Anfragen verarbeitet

Prüfen Sie, ob die Anwendung aktuell Anfragen verarbeitet. Der QPS-Wert kann niedrig sein, aber sie sollte Traffic empfangen.

Das Topologiediagramm ist leer.

Wenn Ihre Dienste nicht im Topologiediagramm angezeigt werden und dort die Fehlermeldung No data available to graph. Check your filters and try again angezeigt wird, prüfen Sie Folgendes:

Prüfen Sie die Mesh-ID.

Prüfen Sie, ob der Cluster das richtige mesh_id-Label hat:

  1. Rufen Sie die Projektnummer ab. Dies ist eine eindeutige Nummer, die beim Erstellen eines Projekts automatisch generiert wird.

  2. Achten Sie darauf, dass der Cluster das Label mesh_id im folgenden Format hat: mesh_id: proj-PROJECT_NUMBER

    Ergänzen Sie das mesh_id-Label bzw. korrigieren Sie es, wenn es fehlt oder falsch ist. Weitere Informationen finden Sie unter Labels nachträglich Clustern hinzufügen oder aktualisieren.

  3. Legen Sie die folgenden Umgebungsvariablen fest:

    • Legen Sie die Projekt-ID fest:

      export PROJECT_ID=YOUR_PROJECT_ID
    • Legen Sie die Projektnummer fest:

      export PROJECT_NUMBER=YOUR_PROJECT_NUMBER
    • Legen Sie den Clusternamen fest:

      export CLUSTER_NAME=YOUR_CLUSTER_NAME
    • Legen Sie CLUSTER_LOCATION entweder auf Ihre Clusterzone oder Clusterregion fest:

      export CLUSTER_LOCATION=YOUR_ZONE_OR_REGION
    • Legen Sie den Arbeitslastpool fest:

      export WORKLOAD_POOL=${PROJECT_ID}.svc.id.goog
    • Legen Sie die Mesh-ID fest:

      export MESH_ID="proj-${PROJECT_NUMBER}"
  4. Stellen Sie Anthos Service Mesh noch einmal bereit und verwenden Sie dabei dieselben Optionen wie zuvor.

  5. Für alle Arbeitslasten, die vor der Installation von Anthos Service Mesh auf Ihrem Cluster ausgeführt wurden, muss der Sidecar-Proxy aktualisiert werden, damit sie die aktuelle Anthos Service Mesh-Version haben.

    kubectl rollout restart YOUR_DEPLOYMENT -n YOUR_NAMESPACE