Server für zentralisierte Logs einrichten

Folgen Sie der Anleitung in diesem Abschnitt, um Ihren Central-Protokollserver einzurichten.

Storage-Bucket einrichten

  1. Erstellen Sie einen neuen Storage-Bucket zum Speichern der Appliance-Logs:

    gcloud storage buckets create gs://BUCKET_NAME
    
  2. Aktivieren Sie die IAM API, falls sie noch nicht aktiviert ist:

    gcloud services enable iam.googleapis.com
    
  3. Erstellen Sie ein Dienstkonto für den Zugriff auf den Bucket:

    gcloud iam service-accounts create GSA_NAME --description="DESCRIPTION" --display-name="DISPLAY_NAME"
    

Daten aus GDC in einen Speicher-Bucket übertragen

Daten übertragen, um die Daten in Speicher-Buckets zu exportieren.

Grafana- und Loki-Helm-Diagramme von der GDC-Air-Gap-Appliance auf einen lokalen Computer kopieren

Auf dem Bootstrapper der GDC-Appliance mit Air Gap befinden sich die Helm-Diagramme für Grafana und Loki in RELEASE_DIR/appliance/observability. Kopieren Sie sie auf den lokalen Computer, auf dem Sie diese Einrichtung ausführen:

    scp
    USERNAME@BOOTSTRAPPER:/RELEASE_DIR/appliance/observability/grafana.tgz WORKING_DIR/grafana.tgz

    scp
    USERNAME@BOOTSTRAPPER:/RELEASE_DIR/appliance/observability/loki.tgz WORKING_DIR/loki.tgz

Grafana und Loki in einem GKE-Cluster einrichten

  1. Erstellen Sie einen neuen GKE-Cluster: https://cloud.google.com/sdk/gcloud/reference/container/clusters/create. Wenn Sie einen vorhandenen Cluster für diese Einrichtung verwenden, fahren Sie mit dem nächsten Schritt fort.

  2. Installieren und konfigurieren Sie kubectl, um mit dem Cluster zu interagieren: https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl

  3. Aktivieren Sie Workload Identity für den Cluster: https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity#enable-existing-cluster

  4. Folgen Sie der Anleitung unter https://cloud.google.com/kubernetes-engine/docs/how-to/persistent-volumes/cloud-storage-fuse-csi-driver#enable, um den CSI-Treiber für Cloud Storage FUSE in Ihrem GKE-Cluster zu aktivieren.

  5. Folgen Sie der Anleitung unter https://cloud.google.com/kubernetes-engine/docs/how-to/persistent-volumes/cloud-storage-fuse-csi-driver#authentication, um den Zugriff auf Cloud Storage-Buckets mit GKE Workload Identity Federation for GKE zu konfigurieren. Wählen Sie roles/storage.objectAdmin aus, wenn Sie die IAM-Richtlinienbindung in Schritt 5 einrichten.

  6. Folgen Sie der Anleitung unter https://cloud.google.com/artifact-registry/docs/repositories/remote-repo, um ein Artifact Registry-Remote-Repository zu erstellen, das als Proxy für Dockerhub dient, die externe Registry, die die von den Helm-Charts für Grafana und Loki verwendeten Container-Images enthält.

  7. Laden Sie die Helm-Diagramme für Grafana und Loki herunter und entpacken Sie sie:

     tar -xzf WORKING_DIR/grafana.tgz
     tar -xzf WORKING_DIR/loki.tgz
    
  8. Legen Sie die Werte für das Loki-Helm-Diagramm in WORKING_DIR/loki/values.yaml.in fest und installieren Sie das Helm-Diagramm im Cluster:

    helm install LOKI_RELEASE_NAME WORKING_DIR/loki --namespace NAMESPACE
    
  9. Legen Sie die Werte für das Grafana-Helm-Diagramm in WORKING_DIR/grafana/values.yaml.in fest und installieren Sie das Helm-Diagramm im Cluster:

    helm install GRAFANA_RELEASE_NAME WORKING_DIR/grafana --namespace NAMESPACE
    

    Beispiel:

      app:
        # name is the name that will used for creating kubernetes resources
        # like deployment, service, etc. associated with this grafana app.
        name: grafana
        # artifactRegistryRepository is the full name of the artifact registry remote
        # repository that proxies dockerhub.
        artifactRegistryRepository: us-east1-docker.pkg.dev/my-gcp-project/dockerhub
        loki:
        # serviceName is the name of the kubernetes service that exposes
        # the loki server.
        serviceName: loki
        # serviceNamespace is the namespace in which the loki service is present
        serviceNamespace: my-loki-namespace
        # tenantID is the tenant ID of the logs.
        tenantID: infra-obs 
    

Auf die Grafana-Benutzeroberfläche zugreifen

Rufen Sie die Grafana-Benutzeroberfläche auf, indem Sie die Portweiterleitung zwischen Ihrem Computer und dem Grafana-Dienst aus dem Kubernetes-Cluster einrichten:

kubectl port-forward service/GRAFANA_APP_NAME
-n NAMESPACE 3000:3000

Nachdem Sie den vorherigen Befehl ausgeführt haben, können Sie auf die Grafana-Benutzeroberfläche zugreifen. Wenn Sie die Grafana-Benutzeroberfläche für mehrere Nutzer in Ihrer Organisation verfügbar machen müssen, sollten Sie GKE Ingress einrichten: https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer.

Logs in externen Speicher exportieren

Standardmäßig werden in der Loki-Instanz, die in einem Cluster ausgeführt wird, alle Logs zusammengefasst und gespeichert. Sie können jedoch eine zusätzliche Fluent Bit-Ausgabe konfigurieren, um Logs an andere Ziele als diese Loki-Instanz im Administrator-Stammcluster zu exportieren.

Dieser Abschnitt enthält die Schritte zum Konfigurieren eines zusätzlichen Senken, um Logs an externen Speicher weiterzuleiten und zu exportieren. Sie enthält Anleitungen für die folgenden Protokolltypen entsprechend Ihrem Anwendungsfall:

Eine vollständige Liste der unterstützten Fluent Bit-Ziele finden Sie unter https://docs.fluentbit.io/manual/pipeline/outputs.

Betriebsprotokolle exportieren

Führen Sie die folgenden Schritte aus, um Betriebslogs in einen externen Speicher zu exportieren:

  1. Erstellen Sie ein ConfigMap-Objekt im Namespace obs-system mit dem Label logmon: system_logs. Fügen Sie die zusätzliche Ausgabekonfiguration in der Datei output.conf im Abschnitt data hinzu. Sie muss dieselbe Syntax wie die Fluent Bit-Ausgabe-Plug-ins haben.

    Achten Sie beim Erstellen des ConfigMap-Objekts darauf, dass die folgenden Anforderungen erfüllt sind:

    • Merken Sie sich den Namen, den Sie dem ConfigMap-Objekt zuweisen, da er mit einem Wert übereinstimmen muss, der in einem späteren Schritt angegeben wird.
    • Fügen Sie die benutzerdefinierten Fluent Bit-Ausgabe-Plug-in-Konfigurationen im Abschnitt Output block des Objekts hinzu.

    Die folgende YAML-Datei zeigt eine Vorlage des ConfigMap-Objekts, um die vorherigen Anforderungen zu veranschaulichen.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      # The name should match the configmap name specified in step 3.
      name: <descriptive configmap name>
      namespace: obs-system
      labels:
        # This label is required and must be system_logs for system logs
        logmon: system_logs
    data:
      # The file name must be output.conf
    output.conf: 
      # ===== Output block =====
        ### Add customized fluent-bit output plugin configurations here
    
  2. Öffnen Sie die benutzerdefinierte ObservabilityPipeline-Ressource in einem Befehlszeileneditor:

    kubectl --kubeconfig=ROOT_ADMIN_CLUSTER_KUBECONFIG -n obs-system edit observabilitypipelines.observability.gdc.goog default
    

    Ersetzen Sie dabei ORG_ADMIN_CLUSTER_KUBECONFIG durch den Pfad der kubeconfig-Datei für den Administratorcluster.

  3. Fügen Sie in der benutzerdefinierten Ressource ObservabilityPipeline das Array fluentbitConfigMaps dem Feld additionalSinks im Logging-Feld des Spec-Abschnitts hinzu. Der Eintrag im fluentbitConfigMaps-Array muss mit dem Namen übereinstimmen, den Sie dem ConfigMap-Objekt in Schritt 1 zugewiesen haben.

    apiVersion: observability.gdc.goog/v1alpha1
    kind: ObservabilityPipeline
    metadata:
      # Don't change anything in this section
      ...
    spec:
      logging:
        # This section is for system logs and only needs to be edited if system logs have a custom output. 
        additionalSink:
          fluentbitConfigMaps:
          # The name should match the configmap name created in step 1.
          - "<system logs output configmap name>"
          # Scheme: []v1.VolumeMount. Add volumeMounts if necessary
          volumeMounts:
          - ...
          - ...
          # Scheme: []v1.Volume. Add volumes if necessary
          volumes:
          - ...
          - ...
    
  4. Um die Änderungen an der benutzerdefinierten Ressource ObservabilityPipeline zu übernehmen, speichern Sie im Befehlszeileneditor und beenden Sie ihn.

Wenn Sie diese Schritte ausführen, wird ein Roll-out Ihrer Änderungen gestartet und das anthos-log-forwarder-DaemonSet wird neu gestartet.

Audit-Logs exportieren

Führen Sie die folgenden Schritte aus, um Audit-Logs in externen Speicher zu exportieren:

  1. Erstellen Sie ein ConfigMap-Objekt im Namespace obs-system mit dem Label logmon: audit_logs. Fügen Sie die zusätzliche Ausgabekonfiguration in der Datei output.conf im Abschnitt data hinzu. Sie muss dieselbe Syntax wie die Fluent Bit-Ausgabe-Plug-ins haben.

    Achten Sie beim Erstellen des ConfigMap-Objekts darauf, dass die folgenden Anforderungen erfüllt sind:

    • Merken Sie sich den Namen, den Sie dem ConfigMap-Objekt zuweisen, da er mit einem Wert übereinstimmen muss, der in einem späteren Schritt angegeben wird.
    • Fügen Sie die benutzerdefinierten Fluent Bit-Ausgabe-Plug-in-Konfigurationen im Abschnitt Output block des Objekts hinzu.

    Die folgende YAML-Datei zeigt eine Vorlage des ConfigMap-Objekts, um die vorherigen Anforderungen zu veranschaulichen.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      # The name should match the configmap name specified in step 3.
      name: <descriptive configmap name>
      namespace: obs-system
      labels:
        # This label is required and must be audit_logs for audit logs
        logmon: audit_logs
    data:
      # The file name must be output.conf
      output.conf: |
        # ===== Output block =====
        ### Add a customized fluent-bit output plugin configuration here
    
    
  2. Öffnen Sie die benutzerdefinierte ObservabilityPipeline-Ressource in einem Befehlszeileneditor:

    kubectl --kubeconfig=ORG_ADMIN_CLUSTER_KUBECONFIG -n obs-system edit observabilitypipelines.observability.gdc.goog default
    

    Ersetzen Sie dabei ORG_ADMIN_CLUSTER_KUBECONFIG durch den Pfad der kubeconfig-Datei für den Administratorcluster.

  3. Fügen Sie in der benutzerdefinierten Ressource ObservabilityPipeline das Array fluentbitConfigMaps dem Feld additionalSinks im Logging-Feld des Spec-Abschnitts hinzu. Der Eintrag im fluentbitConfigMaps-Array muss mit dem Namen übereinstimmen, den Sie dem ConfigMap-Objekt in Schritt 1 zugewiesen haben.

    apiVersion: observability.gdc.goog/v1alpha1
    kind: ObservabilityPipeline
    metadata:
      # Don't change anything in this section
      ...
    spec:
      auditLogging:
        # This section is for audit logs and only needs to be edited if audit logs have a custom output.
        additionalSink:
          fluentbitConfigMaps:
          # The name should match the configmap name created in step 1.
          - "<audit logs output configmap name>"
          # Scheme: []v1.VolumeMount. Add volumeMounts if necessary
          volumeMounts:
          - ...
          - ...
          # Scheme: []v1.Volume. Add volumes if necessary
          volumes:
    
  4. Um die Änderungen an der benutzerdefinierten Ressource ObservabilityPipeline zu übernehmen, speichern Sie im Befehlszeileneditor und beenden Sie ihn.

Wenn Sie diese Schritte ausführen, wird ein Roll-out Ihrer Änderungen gestartet und das anthos-log-forwarder-DaemonSet wird neu gestartet.