Logging e monitoraggio per i cluster collegati

Questa pagina mostra come esportare log e metriche da un cluster collegato in Cloud Logging e Cloud Monitoring.

Come funziona

Google Cloud Observability è la soluzione di osservabilità integrata per Google Cloud. Per esportare la telemetria a livello di cluster da un cluster collegato in Google Cloud, devi eseguire il deployment dei seguenti agenti di esportazione open source nel cluster:

  • Aggregatore di log di Stackdriver (stackdriver-log-aggregator-*). Un StatefulSet Fluentd che invia i log all'API Cloud Logging (in precedenza Stackdriver Logging).
  • Stackdriver Log Forwarder (stackdriver-log-forwarder-*). Un daemonset Fluentbit che inoltra i log da ogni nodo Kubernetes all'aggregatore di log di Stackdriver.
  • Stackdriver Metrics Collector (stackdriver-prometheus-k8s-*). Un StatefulSet Prometheus configurato con un contenitore sidecar di esportazione Stackdriver per inviare le metriche Prometheus all'API Cloud Monitoring (in precedenza Stackdriver Monitoring). Il sidecar è un altro contenitore all'interno dello stesso pod che legge le metriche memorizzate sul disco dal server Prometheus e le inoltra all'API Cloud Monitoring.

Prerequisiti

  1. Un progetto Google Cloud con la fatturazione abilitata. Consulta la nostra guida ai prezzi per informazioni sui costi di Suite operativa di Google Cloud.

  2. Un cluster collegato, registrato utilizzando questa guida. Esegui il comando seguente per verificare che il cluster sia registrato.

    gcloud container fleet memberships list
    

    Output di esempio:

    NAME  EXTERNAL_ID
    eks   ae7b76b8-7922-42e9-89cd-e46bb8c4ffe4
    

  3. Un ambiente locale da cui puoi accedere al cluster ed eseguire i comandi kubectl. Consulta la guida rapida di GKE per istruzioni su come installare kubectl tramite gcloud. Esegui il comando seguente per verificare di poter raggiungere il cluster collegato utilizzando kubectl.

    kubectl cluster-info
    

    Output di esempio:

    Kubernetes master is running at https://[redacted].gr7.us-east-2.eks.amazonaws.com
    

Configurazione

  1. Clona il repository di esempio e vai alla directory di questa guida.

    git clone https://github.com/GoogleCloudPlatform/anthos-samples
    cd anthos-samples/attached-logging-monitoring
    
  2. Imposta la variabile ID progetto sul progetto in cui hai registrato il cluster.

    PROJECT_ID="your-project-id"
    
  3. Crea un Google Cloud account di servizio con autorizzazioni per scrivere metriche e log nelle API Cloud Monitoring e Cloud Logging. Aggiungerai la chiave di questo account di servizio ai carichi di lavoro di cui verrà eseguito il deployment nella sezione successiva.

    gcloud iam service-accounts create anthos-lm-forwarder
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com" \
      --role=roles/logging.logWriter
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com" \
      --role=roles/monitoring.metricWriter
    
  4. Crea e scarica una chiave JSON per l'account di servizio che hai appena creato, quindi crea un secret Kubernetes nel tuo cluster utilizzando questa chiave.

    gcloud iam service-accounts keys create credentials.json \
    --iam-account anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com
    
    kubectl create secret generic google-cloud-credentials -n kube-system --from-file credentials.json
    

Installazione dell'agente di logging

  1. Passa alla directory logging/.

    cd logging/
    
  2. Apri aggregator.yaml. Nella parte inferiore del file, imposta le seguenti variabili sul valore corrispondente al progetto e al cluster:

    project_id [PROJECT_ID]
    k8s_cluster_name [CLUSTER_NAME]
    k8s_cluster_location [CLUSTER_LOCATION]
    

    Puoi trovare la posizione del cluster eseguendo il seguente comando con il nome dell'appartenenza del cluster collegato e ottenendo la posizione visualizzata in /locations/<location>.

    gcloud container fleet memberships describe eks | grep name
    

    Output:

    name: projects/my-project/locations/global/memberships/eks
    

  3. In aggregator.yaml, in volumeClaimTemplates/spec, specifica il PersistentVolumeClaim storageClassName per il tuo cluster: abbiamo fornito valori predefiniti per EKS e AKS da rimuovere dal commento in base alle esigenze. Se utilizzi EKS, questo è gp2. Per AKS, è default.

    Se hai configurato una classe di archiviazione Kubernetes personalizzata in AWS o Azure, vuoi utilizzare una classe di archiviazione non predefinita o stai utilizzando un altro tipo di cluster conforme, puoi aggiungere il tuo storageClassName. Il valore storageClassName appropriato si basa sul tipo di PersistentVolume (PV) di cui è stato eseguito il provisioning da parte di un amministratore per il cluster utilizzando StorageClass. Puoi scoprire di più sulle classi di archiviazione e sulle classi di archiviazione predefinite per altri principali provider Kubernetes nella documentazione di Kubernetes.

    # storageClassName: standard #Google Cloud
    # storageClassName: gp2 #AWS EKS
    # storageClassName: default #Azure AKS
    
  4. Esegui il deployment dell'aggregatore e del forwarder dei log nel cluster.

    kubectl apply -f aggregator.yaml
    kubectl apply -f forwarder.yaml
    
  5. Verifica che i pod siano stati avviati. Dovresti vedere 2 pod aggregatore e un pod forwarder per nodo worker Kubernetes. Ad esempio, in un cluster di 4 nodi, dovresti aspettarti di vedere 4 pod di inoltro.

    kubectl get pods -n kube-system | grep stackdriver-log
    

    Output:

    stackdriver-log-aggregator-0                 1/1     Running   0          139m
    stackdriver-log-aggregator-1                 1/1     Running   0          139m
    stackdriver-log-forwarder-2vlxb              1/1     Running   0          139m
    stackdriver-log-forwarder-dwgb7              1/1     Running   0          139m
    stackdriver-log-forwarder-rfrdk              1/1     Running   0          139m
    stackdriver-log-forwarder-sqz7b              1/1     Running   0          139m
    

  6. Recupera i log dell'aggregatore e verifica che vengano inviati a Google Cloud.

    kubectl logs stackdriver-log-aggregator-0 -n kube-system
    

    Output:

    2020-10-12 14:35:40 +0000 [info]: #3 [google_cloud] Successfully sent gRPC to Stackdriver Logging API.
    

  7. Esegui il deployment di un'applicazione di test nel cluster. Si tratta di un server web HTTP di base con un generatore di carico.

    kubectl apply -f  https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml
    
    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml
    
  8. Verifica di poter visualizzare i log del cluster collegato nella dashboard di Cloud Logging. Vai a Esplora log nella Google Cloud console:

    Vai a Esplora log

  9. In Esplora log, copia la query di esempio riportata di seguito nel campo Query Builder, sostituendo ${your-cluster-name} con il nome del cluster. Fai clic su Esegui query. Dovresti vedere i log recenti del cluster in Risultati delle query.

    resource.type="k8s_container" resource.labels.cluster_name="${your-cluster-name}"
    

Log per il cluster collegato

Installazione dell'agente di monitoraggio

  1. Esci dalla directory logging/ e vai alla directory monitoring/.

    cd ../monitoring
    
  2. Apri prometheus.yaml. In stackdriver-prometheus-sidecar/args, imposta le seguenti variabili in base al tuo ambiente.

    "--stackdriver.project-id=[PROJECT_ID]"
    "--stackdriver.kubernetes.location=[CLUSTER_LOCATION]"
    "--stackdriver.generic.location=[CLUSTER_LOCATION]"
    "--stackdriver.kubernetes.cluster-name=[CLUSTER_NAME]"
    
  3. In prometheus.yaml, in volumeClaimTemplates/spec, rimuovi il commento da storageClassName corrispondente al tuo provider cloud, come descritto in Installazione dell'agente di logging.

    # storageClassName: standard #Google Cloud
    # storageClassName: gp2 #AWS EKS
    # storageClassName: default #Azure AKS
    
  4. Esegui il deployment del StatefulSet stackdriver-prometheus, configurato con il sidecar dell'esportatore, nel tuo cluster.

    kubectl apply -f server-configmap.yaml
    kubectl apply -f sidecar-configmap.yaml
    kubectl apply -f prometheus.yaml
    
  5. Verifica che il pod stackdriver-prometheus sia in esecuzione.

    watch kubectl get pods -n kube-system | grep stackdriver-prometheus
    
    Output:
    stackdriver-prometheus-k8s-0         2/2     Running   0          5h24m
    
  6. Recupera i log del container sidecar di Stackdriver Prometheus per verificare che il pod sia stato avviato.

    kubectl logs stackdriver-prometheus-k8s-0 -n kube-system stackdriver-prometheus-sidecar
    
    Output:
    level=info ts=2020-11-18T21:37:24.819Z caller=main.go:598 msg="Web server started"
    level=info ts=2020-11-18T21:37:24.819Z caller=main.go:579 msg="Stackdriver client started"
    
  7. Verifica che le metriche del cluster vengano esportate correttamente in Cloud Monitoring. Vai a Metrics Explorer nella Google Cloud console:

    Vai a Esplora metriche

  8. Fai clic su Editor query, poi copia il seguente comando sostituendo ${your-project-id} e ${your-cluster-name} con le informazioni del tuo progetto e del tuo cluster. Poi fai clic su Esegui query. Dovresti vedere 1.0.

    fetch k8s_container
    | metric 'kubernetes.io/anthos/up'
    | filter
        resource.project_id == '${your-project-id}'
        && (resource.cluster_name =='${your-cluster-name}')
    | group_by 1m, [value_up_mean: mean(value.up)]
    | every 1m
    

Monitoraggio del cluster collegato

Esegui la pulizia

  1. Per rimuovere tutte le risorse create in questa guida:

    kubectl delete -f logging
    kubectl delete -f monitoring
    kubectl delete secret google-cloud-credentials -n kube-system
    kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml
    kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml
    rm -r credentials.json
    gcloud compute service-accounts delete anthos-lm-forwarder
    

Passaggi successivi

Scopri di più su Cloud Logging:

Scopri di più su Cloud Monitoring: