Logging e monitoraggio per GKE su AWS

Questo argomento mostra come esportare log e metriche da un cluster utente GKE su AWS a Cloud Logging e Cloud Monitoring.

Panoramica

Esistono diverse opzioni per il logging e il monitoraggio con GKE su AWS. GKE può essere integrato con Cloud Logging e Cloud Monitoring. Poiché GKE si basa su Kubernetes open source, molti strumenti open source e di terze parti sono compatibili.

Opzioni di logging e monitoraggio

Hai a disposizione diverse opzioni di logging e monitoraggio per il tuo cluster GKE su AWS:

  1. Esegui il deployment degli agenti Cloud Logging e Cloud Monitoring per monitorare e visualizzare i log dei carichi di lavoro nella console Google Cloud . Questo argomento spiega la soluzione.

  2. Utilizza strumenti open source come Prometheus, Grafana ed Elasticsearch. Questo argomento non descrive questa soluzione.

  3. Utilizza soluzioni di terze parti come Datadog. Questo argomento non descrive questa soluzione.

Cloud Logging e Cloud Monitoring

Con Cloud Logging e Cloud Monitoring puoi creare dashboard, inviare avvisi, monitorare e rivedere i log per i carichi di lavoro in esecuzione sul cluster. Devi configurare gli agenti Cloud Logging e Cloud Monitoring per raccogliere log e metriche nel tuo progetto Google Cloud. Se non configuri questi agenti, GKE su AWS non raccoglie dati di logging o monitoraggio.

Quali dati vengono raccolti

Una volta configurati, gli agenti raccolgono i log e i dati delle metriche dal cluster e dai workload in esecuzione sul cluster. Questi dati sono archiviati nel tuo progettoGoogle Cloud . Configura l'ID progetto nel campo project_id di un file di configurazione quando installi lo strumento di inoltro dei log.

I dati raccolti includono:

  • Log per i servizi di sistema su ciascuno dei nodi worker.
  • Log delle applicazioni per tutti i carichi di lavoro in esecuzione sul cluster.
  • Metriche per i servizi di cluster e di sistema. Per ulteriori informazioni su metriche specifiche, consulta Metriche di Google Distributed Cloud.
  • Se le tue applicazioni sono configurate con target di scraping di Prometheus e annotate con la configurazione, inclusi prometheus.io/scrape, prometheus.io/path e prometheus.io/port, le metriche delle applicazioni per i pod.

Gli agenti possono essere disattivati in qualsiasi momento. Per ulteriori informazioni, vedi Pulizia. I dati raccolti dagli agenti possono essere gestiti ed eliminati come qualsiasi altra metrica e log, come descritto nella documentazione di Cloud Monitoring e Cloud Logging.

I dati dei log vengono archiviati in base alle regole di conservazione configurate. La conservazione dei dati delle metriche varia in base al tipo.

Componenti di logging e monitoraggio

Per esportare la telemetria a livello di cluster da GKE su AWS in Google Cloud, esegui il deployment dei seguenti componenti nel cluster:

  • Stackdriver Log Forwarder (stackdriver-log-forwarder-*). Un DaemonSet Fluentbit che inoltra i log da ogni nodo Kubernetes a Cloud Logging.
  • GKE Metrics Agent (gke-metrics-agent-*). Un DaemonSet basato su OpenTelemetry Collector che raccoglie i dati delle metriche e li inoltra a Cloud Monitoring.

I manifest per questi componenti si trovano nel repository anthos-samples su GitHub.

Prerequisiti

  1. Un progetto Google Cloud con la fatturazione abilitata. Per ulteriori informazioni sui costi, consulta la pagina Prezzi di Google Cloud Observability.

    Il progetto deve avere abilitate anche le API Cloud Logging e Cloud Monitoring. Per abilitare queste API, esegui i seguenti comandi:

    gcloud services enable logging.googleapis.com
    gcloud services enable monitoring.googleapis.com
    
  2. Un ambiente GKE su AWS, incluso un cluster utente registrato con Connect. Esegui questo comando per verificare che il cluster sia registrato.

    gcloud container fleet memberships list
    

    Se il cluster è registrato, Google Cloud CLI stampa il nome e l'ID del cluster.

    NAME       EXTERNAL_ID
    cluster-0  1abcdef-1234-4266-90ab-123456abcdef
    

    Se non vedi il tuo cluster elencato, consulta Connessione a un cluster con Connect.

  3. Installa lo strumento a riga di comando git sulla tua macchina.

Configurazione delle autorizzazioni per Google Cloud Observability

Gli agenti di logging e monitoraggio utilizzano Workload Identity per il parco progetti per comunicare con Cloud Logging e Cloud Monitoring. L'identità deve disporre delle autorizzazioni per scrivere log e metriche nel tuo progetto. Per aggiungere le autorizzazioni, esegui i seguenti comandi:

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="serviceAccount:PROJECT_ID.svc.id.goog[kube-system/stackdriver]" \
  --role=roles/logging.logWriter
gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="serviceAccount:PROJECT_ID.svc.id.goog[kube-system/stackdriver]" \
  --role=roles/monitoring.metricWriter

Sostituisci PROJECT_ID con il tuo progetto Google Cloud .

Connettiti al bastion host

Per connetterti alle risorse GKE su AWS, segui questi passaggi. Seleziona se hai una VPC AWS esistente (o una connessione diretta alla tua VPC) o se hai creato una VPC dedicata durante la creazione del servizio di gestione.

VPC esistente

Se hai una connessione diretta o VPN a un VPC esistente, ometti la riga env HTTP_PROXY=http://localhost:8118 dai comandi in questo argomento.

VPC dedicato

Quando crei un servizio di gestione in un VPC dedicato, GKE su AWS include un host bastion in una subnet pubblica.

Per connetterti al tuo servizio di gestione:

  1. Passa alla directory con la configurazione di GKE su AWS. Hai creato questa directory durante l'installazione del servizio di gestione.

    cd anthos-aws

  2. Per aprire il tunnel, esegui lo script bastion-tunnel.sh. Il tunnel inoltra a localhost:8118.

    Per aprire un tunnel all'bastion host, esegui questo comando:

    ./bastion-tunnel.sh -N
    

    I messaggi del tunnel SSH vengono visualizzati in questa finestra. Quando sei pronto a chiudere la connessione, interrompi la procedura utilizzando Ctrl+C o chiudendo la finestra.

  3. Apri un nuovo terminale e passa alla directory anthos-aws.

    cd anthos-aws
  4. Verifica di poter connetterti al cluster con kubectl.

    env HTTPS_PROXY=http://localhost:8118 \
    kubectl cluster-info
    

    L'output include l'URL del server API del servizio di gestione.

Cloud Logging e Cloud Monitoring sui nodi del control plane

Con GKE su AWS 1.8.0 e versioni successive, Cloud Logging e Cloud Monitoring per i nodi del control plane possono essere configurati automaticamente durante la creazione di nuovi cluster utente. Per abilitare Cloud Logging o Cloud Monitoring, compila la sezione controlPlane.cloudOperations della configurazione AWSCluster.

cloudOperations:
  projectID: PROJECT_ID
  location: GC_REGION
  enableLogging: ENABLE_LOGGING
  enableMonitoring: ENABLE_MONITORING

Sostituisci quanto segue:

  • PROJECT_ID: il tuo ID progetto.
  • GC_REGION: la Google Cloud regione in cui vuoi archiviare i log. Scegli una regione vicina alla regione AWS. Per saperne di più, consulta Località globali - Regioni e zone — ad esempio, us-central1.
  • ENABLE_LOGGING: true o false, a seconda che Cloud Logging sia abilitato sui nodi del control plane.
  • ENABLE_MONITORING: true o false, a seconda che Cloud Monitoring sia abilitato sui nodi del control plane.

Poi, segui i passaggi descritti in Creazione di un cluster utente personalizzato .

Cloud Logging e Cloud Monitoring sui nodi di lavoro

Rimozione della versione precedente

Se hai configurato una versione precedente degli agenti di logging e monitoraggio che include stackdriver-log-aggregator (Fluentd) e stackdriver-prometheus-k8s (Prometheus), ti consigliamo di disinstallarli prima di procedere.

Installazione del forwarder di logging

In questa sezione, installerai Stackdriver Log Forwarder sul tuo cluster.

  1. Dalla directory anthos-samples/aws-logging-monitoring/, passa alla directory logging/.

    cd logging/
    
  2. Modifica il file forwarder.yaml in modo che corrisponda alla configurazione del progetto:

    sed -i "s/PROJECT_ID/PROJECT_ID/g" forwarder.yaml
    sed -i "s/CLUSTER_NAME/CLUSTER_NAME/g" forwarder.yaml
    sed -i "s/CLUSTER_LOCATION/GC_REGION/g" forwarder.yaml
    

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto.
    • CLUSTER_NAME: il nome del tuo cluster, ad esempio cluster-0
    • GC_REGION: la Google Cloud regione in cui vuoi archiviare i log. Scegli una regione vicina alla regione AWS. Per saperne di più, consulta Località globali - Regioni e zone — ad esempio, us-central1.
  3. (Facoltativo) In base ai tuoi carichi di lavoro, al numero di nodi nel cluster e al numero di pod per nodo, potresti dover impostare richieste di risorse di memoria e CPU. Per ulteriori informazioni, consulta la pagina relativa alle allocazioni consigliate di CPU e memoria.

  4. Dalla directory anthos-aws, utilizza anthos-gke per passare al contesto del cluster utente.

    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    Sostituisci CLUSTER_NAME con il nome del cluster utente.

  5. Crea il account di servizio stackdriver se non esiste e implementa il log forwarder nel cluster.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl create serviceaccount stackdriver -n kube-system
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f forwarder.yaml
    
  6. Utilizza kubectl per verificare che i pod siano stati avviati.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get pods -n kube-system | grep stackdriver-log
    

    Dovresti vedere un pod forwarder per nodo in un pool di nodi. Ad esempio, in un cluster di 6 nodi, dovresti vedere sei pod di inoltro.

    stackdriver-log-forwarder-2vlxb              2/2     Running   0          21s
    stackdriver-log-forwarder-dwgb7              2/2     Running   0          21s
    stackdriver-log-forwarder-rfrdk              2/2     Running   0          21s
    stackdriver-log-forwarder-sqz7b              2/2     Running   0          21s
    stackdriver-log-forwarder-w4dhn              2/2     Running   0          21s
    stackdriver-log-forwarder-wrfg4              2/2     Running   0          21s
    

Test dell'inoltro dei log

In questa sezione, esegui il deployment di un carico di lavoro contenente un server web HTTP di base con un generatore di carico nel tuo cluster. Quindi, verifichi che i log siano presenti in Cloud Logging.

Prima di installare questo workload, puoi verificare i manifest per il web server e il generatore di carico.

  1. Esegui il deployment del server web e del generatore di carico nel cluster.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f  https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml
    
  2. Per verificare di poter visualizzare i log del cluster nella dashboard di Cloud Logging, vai a Esplora log nella console Google Cloud :

    Vai a Esplora log

  3. Copia la query di esempio riportata di seguito nel campo Query Builder.

    resource.type="k8s_container" resource.labels.cluster_name="CLUSTER_NAME"
    

    Sostituisci CLUSTER_NAME con il nome del cluster.

  4. Fai clic su Esegui query. Dovresti visualizzare i log recenti del cluster in Risultati query.

    Log dei cluster in Google Cloud Observability

  5. Dopo aver verificato che i log vengono visualizzati nei risultati della query, rimuovi il generatore di carico e il server web.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml
    
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml
    

Installazione del raccoglitore di metriche

In questa sezione installerai un agente per inviare dati a Cloud Monitoring.

  1. Dalla directory anthos-samples/aws-logging-monitoring/logging/, passa alla directory anthos-samples/aws-logging-monitoring/monitoring/.

    cd ../monitoring
    
  2. Modifica il file gke-metrics-agent.yaml in modo che corrisponda alla configurazione del progetto:

    sed -i "s/PROJECT_ID/PROJECT_ID/g" gke-metrics-agent.yaml
    sed -i "s/CLUSTER_NAME/CLUSTER_NAME/g" gke-metrics-agent.yaml
    sed -i "s/CLUSTER_LOCATION/GC_REGION/g" gke-metrics-agent.yaml
    

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto.
    • CLUSTER_NAME: il nome del tuo cluster, ad esempio cluster-0
    • GC_REGION: la Google Cloud regione in cui vuoi archiviare i log. Scegli una regione vicina alla regione AWS. Per saperne di più, consulta Località globali - Regioni e zone — ad esempio, us-central1.
  3. (Facoltativo) In base ai tuoi carichi di lavoro, al numero di nodi nel cluster e al numero di pod per nodo, potresti dover impostare richieste di risorse di memoria e CPU. Per ulteriori informazioni, consulta la pagina relativa alle allocazioni consigliate di CPU e memoria.

  4. Crea il account di servizio stackdriver se non esiste e implementa l'agente delle metriche nel cluster.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl create serviceaccount stackdriver -n kube-system
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f gke-metrics-agent.yaml
    
  5. Utilizza lo strumento kubectl per verificare che il pod gke-metrics-agent sia in esecuzione.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get pods -n kube-system | grep gke-metrics-agent
    

    Dovresti vedere un pod agente per nodo in un pool di nodi. Ad esempio, in un cluster a tre nodi, dovresti vedere tre pod agent.

    gke-metrics-agent-gjxdj                    2/2     Running   0          102s
    gke-metrics-agent-lrnzl                    2/2     Running   0          102s
    gke-metrics-agent-s6p47                    2/2     Running   0          102s
    
  6. Per verificare che le metriche del cluster vengano esportate in Cloud Monitoring, vai a Metrics Explorer nella console Google Cloud :

    Vai a Esplora metriche

  7. In Esplora metriche, fai clic su Editor di query e poi copia il seguente comando:

    fetch k8s_container
    | metric 'kubernetes.io/anthos/otelcol_exporter_sent_metric_points'
    | filter
        resource.project_id == 'PROJECT_ID'
        && (resource.cluster_name =='CLUSTER_NAME')
    | align rate(1m)
    | every 1m
    

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto.
    • CLUSTER_NAME: il nome del cluster che hai utilizzato durante la creazione di un cluster utente, ad esempio cluster-0.
  8. Fai clic su Esegui query. Viene visualizzata la frequenza dei punti metrici inviati a Cloud Monitoring da ogni pod gke-metrics-agent nel cluster.

    Monitoraggio del cluster

    Altre metriche da provare includono, a titolo esemplificativo:

    • kubernetes.io/anthos/container_memory_working_set_bytes: Utilizzo memoria container.
    • kubernetes.io/anthos/container_cpu_usage_seconds_total: Utilizzo CPU container.
    • kubernetes.io/anthos/apiserver_aggregated_request_total: conteggio delle richieste kube-apiserver, disponibile solo se Cloud Monitoring è abilitato sul piano di controllo.

    Per un elenco completo delle metriche disponibili, consulta Metriche di Anthos. Per informazioni su come utilizzare l'interfaccia utente, consulta Esplora metriche.

Creare una dashboard in Cloud Monitoring

In questa sezione, creerai una dashboard Cloud Monitoring che monitora lo stato dei container nel cluster.

  1. Dalla directory anthos-samples/aws-logging-monitoring/monitoring/, passa alla directory anthos-samples/aws-logging-monitoring/monitoring/dashboards.

    cd dashboards
    
  2. Sostituisci le istanze della stringa CLUSTER_NAME in pod-status.json con il nome del cluster.

    sed -i "s/CLUSTER_NAME/CLUSTER_NAME/g" pod-status.json
    

    Sostituisci CLUSTER_NAME con il nome del cluster.

  3. Crea una dashboard personalizzata con il file di configurazione eseguendo il seguente comando:

    gcloud monitoring dashboards create --config-from-file=pod-status.json
    
  4. Per verificare che la dashboard sia stata creata, vai a Dashboard di Cloud Monitoring nella console Google Cloud .

    Vai a Dashboard

    Apri la dashboard appena creata con un nome nel formato CLUSTER_NAME (Anthos cluster on AWS) pod status.

Pulizia

In questa sezione, rimuovi i componenti di logging e monitoraggio dal tuo cluster.

  1. Elimina la dashboard di monitoraggio nella visualizzazione elenco delle dashboard nella consoleGoogle Cloud facendo clic sul pulsante di eliminazione associato al nome della dashboard.

  2. Passa alla directory anthos-samples/aws-logging-monitoring/.

    cd anthos-samples/aws-logging-monitoring
    
  3. Per rimuovere tutte le risorse create in questa guida, esegui i seguenti comandi:

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete -f logging/
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete -f monitoring/
    

Allocazioni di CPU e memoria consigliate

Questa sezione include la CPU e le allocazioni consigliate per i singoli componenti utilizzati nella registrazione e nel monitoraggio. Ciascuna delle seguenti tabelle elenca le richieste di CPU e memoria per un cluster con una gamma di dimensioni dei nodi. Imposti le richieste di risorse per un componente nel file elencato nella tabella.

Per saperne di più, consulta Best practice di Kubernetes: richieste e limiti delle risorse e Gestione delle risorse per i container.

1-10 nodi

File Risorsa Richieste di CPU Limiti di CPU Richieste di memoria Limiti di memoria
monitoring/gke-metrics-agent.yaml gke-metrics-agent 30 min 100m 50Mi 500Mi
logging/forwarder.yaml stackdriver-log-forwarder 50m 100m 100Mi 600Mi

10-100 nodi

File Risorsa Richieste di CPU Limiti di CPU Richieste di memoria Limiti di memoria
monitoring/gke-metrics-agent.yaml gke-metrics-agent 50m 100m 50Mi 500Mi
logging/forwarder.yaml stackdriver-log-forwarder 60 min 100m 100Mi 600Mi

Più di 100 nodi

File Risorsa Richieste di CPU Limiti di CPU Richieste di memoria Limiti di memoria
monitoring/gke-metrics-agent.yaml gke-metrics-agent 50m 100m 100Mi N/D
logging/forwarder.yaml stackdriver-log-forwarder 60 min 100m 100Mi 600Mi

Passaggi successivi

Scopri di più su Cloud Logging:

Scopri di più su Cloud Monitoring: