Questa pagina mostra come esportare log e metriche da un cluster collegato a 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:
- Stackdriver Log Aggregator (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 Stackdriver.
- Stackdriver Metrics Collector (stackdriver-prometheus-k8s-*). Un StatefulSet di Prometheus, configurato con un contenitore sidecar di esportazione di Stackdriver, per inviare le metriche di Prometheus all'API Cloud Monitoring (in precedenza Stackdriver Monitoring). Il sidecar è un altro container all'interno dello stesso pod che legge le metriche che il server Prometheus archivia su disco e le inoltra all'API Cloud Monitoring.
Prerequisiti
Un progetto Google Cloud con la fatturazione abilitata. Consulta la nostra guida ai prezzi per scoprire i costi di Suite operativa di Google Cloud.
Un cluster collegato, registrato utilizzando questa guida. Esegui questo comando per verificare che il cluster sia registrato.
gcloud container fleet memberships list
Output di esempio:
NAME EXTERNAL_ID eks ae7b76b8-7922-42e9-89cd-e46bb8c4ffe4
Un ambiente locale da cui puoi accedere al cluster ed eseguire i comandi
kubectl
. Consulta la guida rapida di GKE per istruzioni su come installarekubectl
tramite gcloud. Esegui questo comando per verificare di poter raggiungere il cluster collegato utilizzandokubectl
.kubectl cluster-info
Output di esempio:
Kubernetes master is running at https://[redacted].gr7.us-east-2.eks.amazonaws.com
Configurazione
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
Imposta la variabile ID progetto sul progetto in cui hai registrato il cluster.
PROJECT_ID="your-project-id"
Crea un service account Google Cloud con le 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 è stato 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
Crea e scarica una chiave JSON per il account di servizio che hai appena creato, quindi crea un secret Kubernetes nel 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 Logging
Passa alla directory
logging/
.cd logging/
Apri
aggregator.yaml
. Nella parte inferiore del file, imposta le seguenti variabili sul valore corrispondente al tuo progetto e al tuo 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
In
aggregator.yaml
, involumeClaimTemplates/spec
, specifica PersistentVolumeClaimstorageClassName
per il tuo cluster: abbiamo fornito valori predefiniti per EKS e AKS da decommentare in base alle esigenze. Se utilizzi EKS, questo ègp2
. Per AKS, èdefault
.Se hai configurato una StorageClass Kubernetes personalizzata in AWS o Azure, vuoi utilizzare una StorageClass non predefinita o utilizzi un altro tipo di cluster conforme, puoi aggiungere il tuo
storageClassName
. Il valorestorageClassName
appropriato si basa sul tipo di PersistentVolume (PV) di cui è stato eseguito il provisioning da parte di un amministratore per il cluster utilizzandoStorageClass
. Per saperne di più sulle classi di archiviazione e sulle classi di archiviazione predefinite per altri principali provider Kubernetes, consulta la documentazione di Kubernetes.# storageClassName: standard #Google Cloud # storageClassName: gp2 #AWS EKS # storageClassName: default #Azure AKS
Esegui il deployment dell'aggregatore e del forwarder di log nel cluster.
kubectl apply -f aggregator.yaml kubectl apply -f forwarder.yaml
Verifica che i pod siano stati avviati. Dovresti vedere due pod aggregatori e un pod inoltratore per ogni nodo worker Kubernetes. Ad esempio, in un cluster di 4 nodi, dovresti 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
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.
Esegui il deployment di un'applicazione di test nel cluster. Si tratta di un server web HTTP di base con un loadgenerator.
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
Verifica di poter visualizzare i log del cluster collegato nella dashboard di Cloud Logging. Vai a Esplora log nella console Google Cloud :
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 visualizzare i log recenti del cluster in Risultati delle query.resource.type="k8s_container" resource.labels.cluster_name="${your-cluster-name}"
Installazione dell'agente Monitoring
Esci dalla directory
logging/
e vai alla directorymonitoring/
.cd ../monitoring
Apri
prometheus.yaml
. Instackdriver-prometheus-sidecar/args
, imposta le seguenti variabili in modo che corrispondano al tuo ambiente."--stackdriver.project-id=[PROJECT_ID]" "--stackdriver.kubernetes.location=[CLUSTER_LOCATION]" "--stackdriver.generic.location=[CLUSTER_LOCATION]" "--stackdriver.kubernetes.cluster-name=[CLUSTER_NAME]"
In prometheus.yaml, nella sezione
volumeClaimTemplates/spec
, rimuovi il commento dastorageClassName
che corrisponde al tuo fornitore di servizi cloud, come descritto in Installazione dell'agente Logging.# storageClassName: standard #Google Cloud # storageClassName: gp2 #AWS EKS # storageClassName: default #Azure AKS
Esegui il deployment di StatefulSet stackdriver-prometheus, configurato con il file collaterale dell'esportatore, nel tuo cluster.
kubectl apply -f server-configmap.yaml kubectl apply -f sidecar-configmap.yaml kubectl apply -f prometheus.yaml
Verifica che il pod
stackdriver-prometheus
sia in esecuzione. Output:watch kubectl get pods -n kube-system | grep stackdriver-prometheus
stackdriver-prometheus-k8s-0 2/2 Running 0 5h24m
Recupera i log del container sidecar Stackdriver Prometheus per verificare che il pod sia stato avviato.
Output:kubectl logs stackdriver-prometheus-k8s-0 -n kube-system stackdriver-prometheus-sidecar
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"
Verifica che le metriche del cluster vengano esportate correttamente in Cloud Monitoring. Vai a Metrics Explorer nella console Google Cloud :
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 vedere1.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
Esegui la pulizia
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:
- Panoramica di Cloud Logging
- Utilizzo di Esplora log
- Creazione di query per Cloud Logging
- Creare metriche basate su log