Fehlerbehebung bei fehlenden Apigee-Logs in Cloud Logging

Sie lesen gerade die Dokumentation zu Apigee und Apigee Hybrid.
Für dieses Thema gibt es keine entsprechende Apigee Edge-Dokumentation.

Symptom

Ein häufiger Anwendungsfall ist das Senden von Apigee API-Logs an Cloud Logging. Dies erfolgt im Allgemeinen über die Richtlinie MessageLogging oder die Richtlinie ServiceCallout. In beiden Fällen verwendet Apigee die Cloud Logging API, um die Logs zu schreiben.

In einigen Fällen werden die Apigee API-Logs in Cloud Logging nicht angezeigt.

Fehlermeldung

Es wird keine Fehlermeldung angezeigt.

Mögliche Ursachen

Ursache Beschreibung Anleitungen zur Fehlerbehebung gelten für
Cloud Logging API ist nicht aktiviert Achten Sie darauf, dass die Cloud Logging API im Google Cloud-Projekt Ihrer Apigee-Organisation aktiviert ist. Apigee und Apigee Hybrid
Die IAM Service Account Credentials API ist nicht aktiviert Achten Sie darauf, dass die IAM Service Account Credentials API im Google Cloud-Projekt Ihrer Apigee-Organisation aktiviert ist. Apigee und Apigee Hybrid
Falsch konfiguriertes Proxy-Dienstkonto Das zum Zeitpunkt der Bereitstellung (Apigee) oder der Laufzeitkonfiguration (Apigee Hybrid) verwendete Dienstkonto wurde möglicherweise gelöscht/falsch konfiguriert. Apigee und Apigee Hybrid
Falscher Projektname in der Richtlinienkonfiguration Der Projektname in der Richtlinienkonfiguration ist nicht mit dem Projektnamen der Apigee-Organisation identisch. Apigee und Apigee Hybrid
Fehlende Rollen/Berechtigungen für das Laufzeitdienstkonto Achten Sie bei Apigee Hybrid darauf, dass das Laufzeitdienstkonto die Rolle Ersteller von Dienstkonto-Tokens hat. Dies erfordert die Google-Authentifizierung. Apigee Hybrid
Logeintragsgröße überschreitet das zulässige Cloud Logging-Limit In Cloud Logging gilt eine Größenbeschränkung von 256 KB, die nicht geändert werden kann. Apigee und Apigee Hybrid
Kontingent für Schreibanfragen pro Minute für die Cloud Logging API aufgebraucht Achten Sie darauf, dass Sie das Kontingent für Schreibanfragen pro Minute für die Cloud Logging API in Ihrem Google Cloud-Projekt nicht überschreiten. Apigee und Apigee Hybrid

Ursache: Cloud Logging API ist nicht aktiviert

Diagnose

Prüfen Sie, ob die Cloud Logging API aktiviert ist. Eine Anleitung zum Auflisten aktivierter APIs und Dienste in der Google Cloud Console finden Sie unter Aktivierte Dienste auflisten.

Lösung

Wenn die Cloud Logging API nicht aktiviert ist, aktivieren Sie sie mithilfe der Schritte unter Dienste aktivieren. Es kann einige Minuten dauern, bis die API aktiviert wird.

Wenn Sie das Problem, bei dem Logs in Cloud Logging nicht angezeigt werden, weil die Cloud Logging API nicht aktiviert ist, nicht beheben können, lesen Sie den Abschnitt Diagnoseinformationen müssen erfasst werden.

Ursache: IAM Service Account Credentials API ist nicht aktiviert

Diagnose

Prüfen Sie, ob die IAM Service Account Credentials API aktiviert ist. Eine Anleitung zum Auflisten aktivierter APIs und Dienste in der Google Cloud Console finden Sie unter Aktivierte Dienste auflisten.

Lösung

Wenn die IAM Service Account Credentials API nicht aktiviert ist, aktivieren Sie sie mithilfe der Schritte unter Dienste aktivieren. Es kann einige Minuten dauern, bis die API aktiviert wird.

Wenn Sie das Problem, bei dem Logs in Cloud Logging nicht angezeigt werden, weil die IAM Service Account Credentials API nicht aktiviert ist, nicht beheben können, lesen Sie den Abschnitt Diagnoseinformationen müssen erfasst werden.

Ursache: Falsch konfiguriertes Proxy-Dienstkonto

Diagnose

Apigee

  1. Suchen Sie nach dem Namen des Dienstkontos.
    1. Apigee-Benutzeroberfläche verwenden:
      1. Klicken Sie auf Entwickeln > API-Proxys und dann auf einen Proxynamen. Beispiel: TurboBooks.
      2. Unter Deployments wird der Name Dienstkonto angezeigt.

    2. Mit der Apigee API:

      Führen Sie den folgenden Apigee API-Aufruf aus:

      curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/environments/ENV_NAME/apis/PROXY_NAME/revisions/REVISION_NUMBER/deployments"

      Ersetzen Sie Folgendes:

      • ORG_NAME: Der Name Ihrer Organisation. Beispiel: apigee-example-org.
      • ENV_NAME: Der Name der Umgebung. Beispiel: myenv.
      • PROXY_NAME: Der Name des Proxys. Beispiel: TurboBooks.
      • REVISION_NUMBER: Die Überarbeitungsnummer. Beispiel: 4.

      Beispiel:

      curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/apigee-example-org/environments/myenv/apis/TurboBooks/revisions/4/deployments"

      Es wird in etwa Folgendes zurückgegeben:

      {
        "environment": "myenv",
        "apiProxy": "TurboBooks",
        "revision": "4",
        "deployStartTime": "1687408163394",
        "state": "READY",
        "instances": [
          {
            "instance": "apiginstance",
            "deployedRevisions": [
              {
                "revision": "4",
                "percentage": 100
              }
          .
          .
          .
          .
        "serviceAccount": "projects/-/serviceAccounts/envsa-79@apigee-example-org.iam.gserviceaccount.com"
      }

      Dabei ist serviceAccount das Dienstkonto, das dem API-Proxy zugeordnet ist.

  2. Prüfen Sie Folgendes für dieses Proxy-Dienstkonto:
    1. Dieses Dienstkonto muss sich im selben Google Cloud-Projekt befinden, mit dem Sie Ihre Apigee-Organisation erstellt haben. Beispiel: apigee-example-org..
    2. Der Nutzer, der den Proxy bereitstellt, hat die Berechtigung iam.serviceAccounts.actAs für dieses Dienstkonto.
    3. Das Proxy-Dienstkonto hat die erforderlichen Berechtigungen zum Aufrufen des Cloud Logging-Dienstes.

Apigee hybrid

Öffnen Sie für Apigee Hybrid zusätzlich zu den in Apigee aufgeführten Schritten Ihre overrides.yaml-Datei und prüfen Sie, ob unter jeder Umgebung ein Dienstkonto angegeben ist, das eine Google-Authentifizierung erfordert. Beispiel:

envs:
  - name: "ENVIRONMENT_NAME"
    serviceAccountPaths:
      runtime: "KEY_FILE_PATH"

Ersetzen Sie Folgendes:

  • ENVIRONMENT_NAME: Der Name der Umgebung. Beispiel: myenv.
  • KEY_FILE_PATH: Der Pfad zur Schlüsseldatei des Laufzeitdienstkontos. Sie haben das Dienstkonto normalerweise während der Installation unter Dienstkonten erstellen erstellt.

Lösung

  1. Wenn sich das Dienstkonto nicht im selben Google Cloud-Projekt befindet, das Sie zum Erstellen Ihrer Apigee-Organisation verwendet haben, muss ein Dienstkonto im selben Google Cloud-Projekt erstellt und verwendet werden. Dies wird auch unter Google-Authentifizierung verwenden erwähnt.
  2. Wenn der Nutzer, der den Proxy bereitstellt, nicht die Berechtigung iam.serviceAccounts.actAs für dieses Dienstkonto hat, finden Sie weitere Informationen unter Einzelne Rolle zuweisen.
  3. Wenn das Proxy-Dienstkonto nicht die Berechtigungen hat, die zum Aufrufen des Cloud Logging-Dienstes erforderlich sind, finden Sie weitere Informationen unter Einzelne Rolle zuweisen.

Wenn die Schritte in diesem Dokument das Problem nicht beheben, bei dem das Proxydienstkonto für Apigee und Apigee hybrid falsch konfiguriert ist, finden Sie weitere Informationen unter Erfassen von Diagnoseinformationen.

Ursache: Falscher Projektname in der Richtlinienkonfiguration

Diagnose

Wenn Sie die MessageLogging-Richtlinie verwenden, um Logs an Cloud Logging zu senden:

  1. Klicken Sie in der Apigee-Benutzeroberfläche auf Entwickeln > API-Proxys > API-Proxy-Name > Entwickeln.
  2. Suchen Sie im Bereich Code nach dem Element <CloudLogging>.
  3. Prüfen Sie, ob der Wert <LogName> der richtige Projektname ist:
    <CloudLogging>
      <LogName>projects/PROJECT_ID/logs/LOG_ID</LogName>
    </CloudLogging>

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Google Cloud-Projekt-ID. Beispiel: apigee-example-org.
    • LOG_ID: die Cloud Logging-Log-ID. Beispiel: apigee-logs.

Lösung

Wenn der Wert im Element <LogName> nicht den richtigen Wert hat, aktualisieren Sie ihn mit dem richtigen Wert.

Wenn die Schritte in diesem Dokument das Problem nicht beheben, finden Sie weitere Informationen unter Erfassen von Diagnoseinformationen.

Ursache: Fehlende Rollen/Berechtigungen für das Laufzeitdienstkonto

Diagnose

Prüfen Sie, ob die Laufzeit die Identität des Proxydienstkontos übernehmen kann.

Führen Sie folgenden gcloud-Befehl aus, um zu prüfen, ob das Laufzeitdienstkonto die Rolle iam.serviceAccountTokenCreator für das Proxydienstkonto hat:

gcloud iam service-accounts get-iam-policy PROXY_SA_NAME@PROJECT_ID.iam.gserviceaccount.com

Ersetzen Sie Folgendes:

  • PROXY_SA_NAME: der Name des Proxy-Dienstkontos. Beispiel: envsa-79.
  • PROJECT_ID: die Google Cloud-Projekt-ID. Beispiel: apigee-example-org.

Es wird in etwa Folgendes zurückgegeben:

- members:
  - serviceAccount:RUNTIME_SA_NAME@PROJECT_ID.iam.gserviceaccount.com
  role: roles/iam.serviceAccountTokenCreator

Ersetzen Sie Folgendes:

RUNTIME_SA_NAME: die ID des Laufzeitdienstkontos. Beispiel: apigee-runtime.

Beispiel:

gcloud iam service-accounts get-iam-policy envsa-79@apigee-example-org.iam.gserviceaccount.com
  bindings:
  - members:
    - user:222larabrown@gmail.com
    role: roles/iam.serviceAccountAdmin
  - members:
    - serviceAccount:apigee-runtime@apigee-example-org.iam.gserviceaccount.com
    role: roles/iam.serviceAccountTokenCreator
  - members:
    - user:222larabrown@gmail.com
    role: roles/iam.serviceAccountUser
  etag: BwX-shcrL3o=
  version: 1

Wenn die Rolle iam.serviceAccountTokenCreator und das erwartete Mitglied in der Ausgabe nicht angezeigt werden, führen Sie die Schritte unter Lösung aus, um die richtigen Rollen zuzuweisen.

Lösung

Weisen Sie dem Laufzeitdienstkonto mit dem folgenden gcloud-Befehl die Rolle iam.serviceAccountTokenCreator für das Proxydienstkonto zu:

gcloud iam service-accounts add-iam-policy-binding \
PROXY_SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
--member=serviceAccount:RUNTIME_SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
--role=roles/iam.serviceAccountTokenCreator

Ersetzen Sie Folgendes:

  • PROXY_SA_NAME: der Name des Proxy-Dienstkontos. Beispiel: envsa-79.
  • PROJECT_ID: die Google Cloud-Projekt-ID. Beispiel: apigee-example-org.
  • RUNTIME_SA_NAME: die ID des Laufzeitdienstkontos. Beispiel: apigee-runtime.

Wenn die Schritte in diesem Dokument das Problem nicht beheben, finden Sie weitere Informationen unter Erfassen von Diagnoseinformationen.

Ursache: Logeintragsgröße überschreitet das zulässige Logging-Limit

Diagnose

Wenn einige der Logs in Cloud Logging nicht angezeigt werden, nachdem Sie sichergestellt haben, dass die anderen in diesem Dokument beschriebenen Ursachen nicht das Problem sind, ist es möglich, dass die Größe einiger der von Apigee gesendeten Protokolleinträge 256 KB überschreitet. Weitere Informationen finden Sie unter Nutzungslimits für Cloud Logging.

Lösung

Dies ist ein nicht konfigurierbares Limit für Cloud Logging. Die einzige Problemumgehung besteht derzeit darin, die von Apigee gesendete Logeintragsgröße unter 256 KB zu halten. Wenn Sie eine Nutzlast protokollieren, die dieses Limit überschreiten kann, sollten Sie diese Nutzlast entweder nicht protokollieren oder verstehen, dass einige Transaktionen nicht protokolliert werden, sobald das Limit erreicht wurde.

Wenn die Schritte in diesem Dokument das Problem nicht beheben, finden Sie weitere Informationen unter Erfassen von Diagnoseinformationen.

Ursache: Das Kontingent für Schreibanfragen pro Minute für die Cloud Logging API wurde aufgebraucht

Diagnose

Manchmal sehen Kunden die Anfrage in der Debug-Sitzung, sie wird aber nicht im Log-Explorer protokolliert, obwohl sie in den Load Balancer-Logs vorhanden ist.

Der beobachtete Nachrichtenverlust kann auf eine Ausschöpfung des Kontingents im Projekt zurückzuführen sein. Die Cloud Logging API erzwingt eine Ratenbegrenzung von 120.000 Schreibanfragen pro Minute. Das Überschreiten dieses Kontingents kann dazu führen, dass Nachrichten nicht zugestellt werden. Weitere Informationen finden Sie unter Kontingente aufrufen und verwalten.

Diese Kontingente können in der Google Cloud Console erhöht werden. Der Kunde kann dies selbst tun, indem er der Dokumentation zur Kontingenterhöhung folgt.

Lösung

So erhöhen Sie ein Kontingent:

  1. Klicken Sie auf der Seite Kontingente auf das Kästchen für die Cloud Logging API. Klicken Sie dann auf Kontingente bearbeiten. Wenn die Fehlermeldung Edit is not allowed for this quota ausgegeben wird, können Sie sich an den Google Cloud Customer Care wenden, um Änderungen am Kontingent anzufordern. Beachten Sie auch, dass die Abrechnung für das Google Cloud-Projekt aktiviert sein muss, damit die Kästchen angeklickt werden können.
  2. Wählen Sie im Feld „Kontingentänderungen“ den Dienst aus, um die Ansicht zu maximieren. Füllen Sie dann die Felder Neues Limit und Beschreibung der Anfrage aus. Klicken Sie auf Weiter.
  3. Füllen Sie das Formular im Bereich Kontaktdetails aus und klicken Sie auf Antrag senden.

Weitere Informationen finden Sie in dieser Dokumentation zu Kontingenten und Limits.

Erfassen von Diagnoseinformationen erforderlich

Wenn das Problem auch nach Befolgen der obigen Anweisungen weiterhin besteht, sammeln Sie die folgenden Diagnoseinformationen und wenden Sie sich dann an den Google Cloud Customer Care:

  • Apigee-Organisation
  • Umgebung und API-Proxy, wo das Problem auftritt
  • Heruntergeladene Debug-Sitzung (enthält alle oben genannten Informationen)
  • Der spezifische Richtlinienname im API-Proxy, der Logs an Cloud Logging sendet.
  • Für Apigee Hybrid: Die Datei overrides.yaml.