Configurare il server di log centralizzati

Segui le istruzioni riportate in questa sezione per configurare il server dei log centralizzati.

Configurare il bucket di archiviazione

  1. Crea un nuovo bucket di archiviazione per archiviare i log dell'appliance:

    gcloud storage buckets create gs://BUCKET_NAME
    
  2. Abilita l'API IAM se non è già abilitata:

    gcloud services enable iam.googleapis.com
    
  3. Crea un account di servizio per accedere al bucket:

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

Trasferire dati da GDC a un bucket di archiviazione

Trasferisci dati per esportare i dati nei bucket di archiviazione.

Copia i grafici Helm di Grafana e Loki dall'appliance GDC air-gapped a un computer locale

Nel bootstrapper dell'appliance GDC con air gap, i grafici Helm per Grafana e Loki si trovano in RELEASE_DIR/appliance/observability. Copiali sul computer locale su cui stai eseguendo questa configurazione:

    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

Configura Grafana e Loki in un cluster GKE

  1. Crea un nuovo cluster GKE: https://cloud.google.com/sdk/gcloud/reference/container/clusters/create. Se utilizzi un cluster esistente per questa configurazione, procedi al passaggio successivo.

  2. Installa e configura kubectl per interagire con il cluster: https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl

  3. Abilita Workload Identity sul cluster: https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity#enable-existing-cluster

  4. Segui le istruzioni riportate all'indirizzo https://cloud.google.com/kubernetes-engine/docs/how-to/persistent-volumes/cloud-storage-fuse-csi-driver#enable per abilitare il driver CSI di Cloud Storage FUSE nel cluster GKE.

  5. Segui le istruzioni riportate all'indirizzo https://cloud.google.com/kubernetes-engine/docs/how-to/persistent-volumes/cloud-storage-fuse-csi-driver#authentication per configurare l'accesso ai bucket Cloud Storage utilizzando la federazione delle identità per i carichi di lavoro per GKE. Scegli roles/storage.objectAdmin quando configuri il binding dei criteri IAM nel passaggio 5.

  6. Segui la procedura descritta in https://cloud.google.com/artifact-registry/docs/repositories/remote-repo per creare un repository remoto Artifact Registry che fungerà da proxy per Docker Hub, il registro esterno che contiene le immagini container utilizzate dai grafici Helm di Grafana e Loki.

  7. Scarica ed estrai i grafici Helm di Grafana e Loki:

     tar -xzf WORKING_DIR/grafana.tgz
     tar -xzf WORKING_DIR/loki.tgz
    
  8. Imposta i valori del grafico Helm di Loki in WORKING_DIR/loki/values.yaml.in e installa il grafico Helm nel cluster:

    helm install LOKI_RELEASE_NAME WORKING_DIR/loki --namespace NAMESPACE
    
  9. Imposta i valori del grafico Helm di Grafana in WORKING_DIR/grafana/values.yaml.in e installa il grafico Helm nel cluster:

    helm install GRAFANA_RELEASE_NAME WORKING_DIR/grafana --namespace NAMESPACE
    

    Ad esempio:

      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 
    

Accedere alla UI di Grafana

Accedi alla UI di Grafana configurando l'inoltro delle porte tra il tuo computer e il servizio Grafana dal cluster Kubernetes:

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

Dopo aver eseguito il comando precedente, puoi accedere alla UI di Grafana. Se devi esporre la UI di Grafana a più utenti della tua organizzazione, valuta la possibilità di configurare GKE Ingress: https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer

Esportare i log in una memoria esterna

Per impostazione predefinita, l'istanza Loki in esecuzione in un cluster aggrega e archivia tutti i log. Tuttavia, puoi configurare un output Fluent Bit aggiuntivo per esportare i log in altre destinazioni oltre a questa istanza Loki nel cluster di amministrazione principale.

Questa sezione contiene i passaggi per configurare un sink aggiuntivo per instradare ed esportare i log in un archivio esterno. Fornisce istruzioni per i seguenti tipi di log in base al tuo caso d'uso:

Per un elenco completo delle destinazioni Fluent Bit supportate, visita la pagina https://docs.fluentbit.io/manual/pipeline/outputs.

Esportare i log operativi

Segui questi passaggi per esportare i log operativi in una memoria esterna:

  1. Crea un oggetto ConfigMap nello spazio dei nomi obs-system con l'etichetta logmon: system_logs. Aggiungi la configurazione dell'output aggiuntivo nel file output.conf della sezione data. Deve avere la stessa sintassi dei plug-in di output di Fluent Bit.

    Quando crei l'oggetto ConfigMap, assicurati di soddisfare i seguenti requisiti:

    • Conserva il nome che assegni all'oggetto ConfigMap perché deve corrispondere a un valore specificato in un passaggio futuro.
    • Aggiungi le configurazioni del plug-in di output Fluent Bit personalizzate nella sezione Blocco di output dell'oggetto.

    Il seguente file YAML mostra un modello dell'oggetto ConfigMap per illustrare i requisiti precedenti.

    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. Apri la risorsa personalizzata ObservabilityPipeline in un editor della riga di comando:

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

    Sostituisci ORG_ADMIN_CLUSTER_KUBECONFIG con il percorso del file kubeconfig per il cluster di amministrazione.

  3. Nella risorsa personalizzata ObservabilityPipeline, aggiungi l'array fluentbitConfigMaps al campo additionalSinks al campo di logging della sezione spec. La voce nell'array fluentbitConfigMaps deve corrispondere al nome che hai assegnato in precedenza all'oggetto ConfigMap nel passaggio 1.

    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. Per applicare le modifiche alla risorsa personalizzata ObservabilityPipeline, salva ed esci dall'editor della riga di comando.

Il completamento di questi passaggi avvia l'implementazione delle modifiche e riavvia il DaemonSet anthos-log-forwarder.

Esportare i log di controllo

Segui questi passaggi per esportare gli audit log in un archivio esterno:

  1. Crea un oggetto ConfigMap nello spazio dei nomi obs-system con l'etichetta logmon: audit_logs. Aggiungi la configurazione dell'output aggiuntivo nel file output.conf della sezione data. Deve avere la stessa sintassi dei plug-in di output di Fluent Bit.

    Quando crei l'oggetto ConfigMap, assicurati di soddisfare i seguenti requisiti:

    • Conserva il nome che assegni all'oggetto ConfigMap perché deve corrispondere a un valore specificato in un passaggio futuro.
    • Aggiungi le configurazioni del plug-in di output Fluent Bit personalizzate nella sezione Blocco di output dell'oggetto.

    Il seguente file YAML mostra un modello dell'oggetto ConfigMap per illustrare i requisiti precedenti.

    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. Apri la risorsa personalizzata ObservabilityPipeline in un editor della riga di comando:

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

    Sostituisci ORG_ADMIN_CLUSTER_KUBECONFIG con il percorso del file kubeconfig per il cluster di amministrazione.

  3. Nella risorsa personalizzata ObservabilityPipeline, aggiungi l'array fluentbitConfigMaps al campo additionalSinks al campo di logging della sezione spec. La voce nell'array fluentbitConfigMaps deve corrispondere al nome che hai assegnato in precedenza all'oggetto ConfigMap nel passaggio 1.

    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. Per applicare le modifiche alla risorsa personalizzata ObservabilityPipeline, salva ed esci dall'editor della riga di comando.

Il completamento di questi passaggi avvia l'implementazione delle modifiche e riavvia il DaemonSet anthos-log-forwarder.