Configurazione di logging e monitoraggio

Google Distributed Cloud include diverse opzioni per il logging e il monitoraggio dei cluster, tra cui servizi gestiti basati su cloud, strumenti open source e compatibilità con soluzioni commerciali di terze parti. In questa pagina vengono spiegati disponibili e offre alcune indicazioni di base per la scelta della soluzione adeguata del tuo ambiente.

Opzioni per Google Distributed Cloud

Sono disponibili diverse opzioni di logging e monitoraggio per Google Distributed Cloud:

  • Cloud Logging e Cloud Monitoring, abilitati per impostazione predefinita sui componenti di sistema Bare Metal.
  • Prometheus e Grafana sono disponibili su Cloud Marketplace.
  • Configurazioni convalidate con soluzioni di terze parti.

Cloud Logging e Cloud Monitoring

Google Cloud Observability è la soluzione di osservabilità integrata in Google Cloud. Offre una soluzione di logging completamente gestita, metriche raccolta, monitoraggio, creazione di dashboard e avvisi. Cloud Monitoring monitora i cluster Google Distributed Cloud in modo simile a GKE basati su cloud cluster.

Gli agenti possono essere configurati per modificare l'ambito del logging e monitoraggio, nonché il livello di metriche raccolte:

  • L'ambito del logging e del monitoraggio può essere impostato solo sui componenti di sistema (impostazione predefinita) o per componenti e applicazioni di sistema.
  • Il livello di metriche raccolte può essere configurato per un insieme ottimizzato di metriche (impostazione predefinita) o per le metriche complete.

Per ulteriori informazioni, consulta Configurazione degli agenti Stackdriver per Google Distributed Cloud in questo documento.

Logging e Monitoring forniscono un'unica, potente soluzione di osservabilità basata su cloud e facile da configurare. Abbiamo moltissimo consigliamo Logging e Monitoring durante l'esecuzione carichi di lavoro standard su Google Distributed Cloud. Per le applicazioni con componenti in esecuzione su Google Distributed Cloud e l'infrastruttura on-premise standard, valuta altre soluzioni per una visione end-to-end di queste applicazioni.

Prometheus e Grafana

Prometheus e Grafana sono due prodotti di monitoraggio open source popolari nel Cloud Marketplace:

  • Prometeo raccoglie metriche di sistema e dell'applicazione.

  • Gestione avvisi gestisce l'invio di avvisi con diversi meccanismi di avviso.

  • Grafana è una dashboard lo strumento a riga di comando gcloud.

Ti consigliamo di utilizzare Google Cloud Managed Service per Prometheus, che è basato in Cloud Monitoring, per tutte le tue esigenze di monitoraggio. Con Google Cloud Managed Service per Prometheus consente di monitorare componenti senza costi aggiuntivi. Google Cloud Managed Service per Prometheus è compatibile anche con Grafana. Tuttavia, se Se preferisci un sistema di monitoraggio locale puro, puoi scegliere di installare Prometheus e Grafana nei tuoi cluster.

Se hai installato Prometheus in locale e vuoi raccogliere metriche dal sistema devi concedere l'autorizzazione all'istanza Prometheus locale per accedi agli endpoint delle metriche dei componenti del sistema:

  • Associa l'account di servizio per l'istanza Prometheus all'account gke-metrics-agent ClusterRole e usa il token dell'account di servizio come credenziale per eseguire lo scraping delle metriche dai seguenti componenti di sistema:

    • kube-apiserver
    • kube-scheduler
    • kube-controller-manager
    • kubelet
    • node-exporter
  • Utilizza la chiave e il certificato client archiviati kube-system/stackdriver-prometheus-etcd-scrape secret per autenticare il scraping delle metriche da etcd.

  • Crea un NetworkPolicy per consentire l'accesso dallo spazio dei nomi a kube-state-metrics, in cui l'oggetto kube-state-metrics.

Soluzioni di terze parti

Google ha collaborato con diverse soluzioni di logging e monitoraggio di terze parti in modo che i loro prodotti funzionino bene con Google Distributed Cloud. Questi includono: Datadog, Elastic e Splunk. Verranno aggiunte altre terze parti convalidate in futuro.

Le seguenti guide alle soluzioni sono disponibili per l'utilizzo di soluzioni di terze parti con Google Distributed Cloud:

Come funzionano Logging e Monitoring per Google Distributed Cloud

Cloud Logging e Cloud Monitoring sono installati e attivati quando crei un nuovo cluster di amministrazione o utente.

Gli agenti Stackdriver includono diversi componenti in ogni cluster:

  • Stackdriver Operator (stackdriver-operator-*). Gestisce il ciclo di vita per tutti gli altri agenti Stackdriver di cui è stato eseguito il deployment nel cluster.

  • Risorsa personalizzata Stackdriver. Si tratta di una risorsa creata automaticamente parte del processo di installazione di Google Distributed Cloud.

  • Agente delle metriche di GKE (gke-metrics-agent-*). Un raccoglitore OpenTelemetry basato su DaemonSet che esegue lo scraping delle metriche da ciascun nodo in Cloud Monitoring. Anche un deployment DaemonSet node-exporter e kube-state-metrics incluso per fornire più metriche sul cluster.

  • Stackdriver Log Forwarder (stackdriver-log-forwarder-*). Una punta discreta DaemonSet che inoltra i log da ogni macchina a Cloud Logging. La il server di forwarding del log memorizza in locale le voci di log sul nodo e le invia di nuovo per un massimo di 4 ore. Se il buffer si riempie o se il servizio di inoltro log non riesce quando raggiungono l'API Cloud Logging per più di quattro ore, i log vengono eliminati.

  • Agente metadati (stackdriver-metadata-agent-). Un deployment invia metadati per risorse Kubernetes come pod, deployment o nodi all'API Config Monitoring for Ops; Questi dati vengono utilizzati per arricchire le metriche query in base al nome del deployment, al nome del nodo o il nome del servizio Kubernetes.

Puoi vedere gli agenti installati da Stackdriver eseguendo questo comando: :

kubectl -n kube-system get pods -l "managed-by=stackdriver"

L'output di questo comando è simile al seguente:

kube-system   gke-metrics-agent-4th8r                                     1/1     Running   1 (40h ago)   40h
kube-system   gke-metrics-agent-8lt4s                                     1/1     Running   1 (40h ago)   40h
kube-system   gke-metrics-agent-dhxld                                     1/1     Running   1 (40h ago)   40h
kube-system   gke-metrics-agent-lbkl2                                     1/1     Running   1 (40h ago)   40h
kube-system   gke-metrics-agent-pblfk                                     1/1     Running   1 (40h ago)   40h
kube-system   gke-metrics-agent-qfwft                                     1/1     Running   1 (40h ago)   40h
kube-system   kube-state-metrics-9948b86dd-6chhh                          1/1     Running   1 (40h ago)   40h
kube-system   node-exporter-5s4pg                                         1/1     Running   1 (40h ago)   40h
kube-system   node-exporter-d9gwv                                         1/1     Running   2 (40h ago)   40h
kube-system   node-exporter-fhbql                                         1/1     Running   1 (40h ago)   40h
kube-system   node-exporter-gzf8t                                         1/1     Running   1 (40h ago)   40h
kube-system   node-exporter-tsrpp                                         1/1     Running   1 (40h ago)   40h
kube-system   node-exporter-xzww7                                         1/1     Running   1 (40h ago)   40h
kube-system   stackdriver-log-forwarder-8lwxh                             1/1     Running   1 (40h ago)   40h
kube-system   stackdriver-log-forwarder-f7cgf                             1/1     Running   2 (40h ago)   40h
kube-system   stackdriver-log-forwarder-fl5gf                             1/1     Running   1 (40h ago)   40h
kube-system   stackdriver-log-forwarder-q5lq8                             1/1     Running   2 (40h ago)   40h
kube-system   stackdriver-log-forwarder-www4b                             1/1     Running   1 (40h ago)   40h
kube-system   stackdriver-log-forwarder-xqgjc                             1/1     Running   1 (40h ago)   40h
kube-system   stackdriver-metadata-agent-cluster-level-5bb5b6d6bc-z9rx7   1/1     Running   1 (40h ago)   40h

Metriche di Cloud Monitoring

Per un elenco delle metriche raccolte da Cloud Monitoring, vedi Visualizza le metriche di Google Distributed Cloud.

Configurazione di agenti Stackdriver per Google Distributed Cloud

Gli agenti Stackdriver installati con Google Distributed Cloud raccolgono dati sui componenti di sistema allo scopo di eseguire la manutenzione e problemi con i cluster. Le seguenti sezioni descrivono Stackdriver la configurazione e le modalità operative.

Solo componenti di sistema (modalità predefinita)

Al momento dell'installazione, gli agenti Stackdriver sono configurati per impostazione predefinita per raccogliere i log e metriche, inclusi i dettagli sulle prestazioni (ad esempio CPU e memoria sull'utilizzo) e metadati simili per i componenti di sistema forniti da Google. Questi includono tutti i carichi di lavoro nel cluster di amministrazione e, per i cluster utente, i carichi di lavoro kube-system, gke-system, gke-connect, istio-system e config-management di sistema.

Componenti e applicazioni del sistema

Per attivare il logging e il monitoraggio delle applicazioni in aggiunta alla modalità predefinita, segui i passaggi descritti in Abilitare il logging e il monitoraggio delle applicazioni.

Metriche ottimizzate (metriche predefinite)

Per impostazione predefinita, i deployment kube-state-metrics in esecuzione nel cluster raccolgono e segnalano un un set ottimizzato di metriche Kubernetes a Google Cloud Observability (in precedenza Stackdriver).

Sono necessarie meno risorse per raccogliere questo dato un insieme ottimizzato di metriche, che migliora le prestazioni e la scalabilità complessive.

Per disabilitare le metriche ottimizzate (opzione non consigliata), esegui l'override dell'impostazione predefinita nella risorsa personalizzata di Stackdriver.

Utilizza Google Cloud Managed Service per Prometheus per i componenti di sistema selezionati

Google Cloud Managed Service per Prometheus fa parte di Cloud Monitoring e è disponibile come opzione per i componenti di sistema. I vantaggi di Google Cloud Managed Service per Prometheus include:

  • Puoi continuare a utilizzare il monitoraggio basato su Prometheus esistente senza modificare gli avvisi e le dashboard di Grafana.

  • Se utilizzi sia GKE che Google Distributed Cloud, puoi utilizzare lo stesso Linguaggio di query di Prometheus (PromQL) per le metriche su tutti i tuoi cluster. Puoi anche utilizzare la scheda PromQL in Esplora metriche nella console Google Cloud.

Abilita e disabilita Google Cloud Managed Service per Prometheus

Google Cloud Managed Service per Prometheus è abilitato per impostazione predefinita in Google Distributed Cloud.

Per disabilitare Google Cloud Managed Service per Prometheus:

  1. Apri l'oggetto Stackdriver denominato stackdriver per la modifica:

    kubectl --kubeconfig CLUSTER_KUBECONFIG --namespace kube-system \
        edit stackdriver stackdriver
    
  2. Aggiungi il blocco di caratteristiche enableGMPForSystemMetrics e impostalo su false:

    apiVersion: addons.gke.io/v1alpha1
    kind: Stackdriver
    metadata:
      name: stackdriver
      namespace: kube-system
    spec:
      featureGates:
        enableGMPForSystemMetrics: false
    
  3. Chiudi la sessione di modifica.

Visualizza i dati delle metriche

Se il criterio enableGMPForSystemMetrics è impostato su true, vengono utilizzate le metriche per: i componenti hanno un formato diverso per come vengono archiviati Cloud Monitoring:

  • kube-apiserver
  • kube-scheduler
  • kube-controller-manager
  • kubelet e cadvisor
  • kube-state-metrics
  • node-exporter

Nel nuovo formato puoi eseguire query sulle metriche precedenti utilizzando PromQL o Monitoraggio di Query Language (MQL):

PromQL

Esempio di query PromQL:

histogram_quantile(0.95, sum(rate(apiserver_request_duration_seconds_bucket[5m])) by (le))

MQL

Per utilizzare MQL, imposta la risorsa monitorata su prometheus_target, usa la metrica nome con prefisso kubernetes.io/anthos e aggiungi il tipo Prometheus come al nome della metrica.

fetch prometheus_target
| metric 'kubernetes.io/anthos/apiserver_request_duration_seconds/histogram'
| align delta(5m)
| every 5m
| group_by [], [value_histogram_percentile: percentile(value.histogram, 95)]

Configurazione delle dashboard di Grafana con Google Cloud Managed Service per Prometheus

Per utilizzare Grafana con i dati delle metriche di Google Cloud Managed Service per Prometheus, deve prima configurare e autenticare l'origine dati Grafana. Per configurare autenticare l'origine dati, utilizzerai lo strumento di sincronizzazione (datasource-syncer) per generare le credenziali OAuth2 e sincronizzarle con Grafana tramite l'API dell'origine dati Grafana. Lo strumento di sincronizzazione dell'origine dati imposta API Cloud Monitoring come URL del server Prometheus (il valore dell'URL inizia con https://monitoring.googleapis.com) nell'origine dati in Grafana.

Segui i passaggi descritti in Eseguire query utilizzando Da Grafana a autenticare e configurare un'origine dati Grafana per eseguire query sui dati Google Cloud Managed Service per Prometheus.

Nella sezione sono disponibili anche dashboard di esempio Grafana anthos-campioni su GitHub. Per installare le dashboard di esempio, segui questi passaggi:

  1. Scarica i file JSON di esempio:

    git clone https://github.com/GoogleCloudPlatform/anthos-samples.git
    cd anthos-samples/gmp-grafana-dashboards
    
  2. Se l'origine dati Grafana è stata creata con un nome diverso con Managed Service for Prometheus, modifica il campo datasource in tutti i file JSON:

    sed -i "s/Managed Service for Prometheus/[DATASOURCE_NAME]/g" ./*.json
    

    Sostituisci [DATASOURCE_NAME] con il nome dell'origine dati in Grafana che puntava al servizio frontend Prometheus.

  3. Accedi all'interfaccia utente di Grafana dal tuo browser e seleziona + Importa nel menu Dashboard.

    Stai passando all'importazione della dashboard in Grafana.

  4. Carica il file JSON oppure copia e incolla i contenuti del file e seleziona Carica. Una volta caricati correttamente i contenuti del file, seleziona Importa. Facoltativamente, puoi anche modificare il nome e l'UID della dashboard prima dell'importazione.

    Importazione della dashboard in Grafana.

  5. La dashboard importata dovrebbe caricarsi correttamente se Google Distributed Cloud e l'origine dati sono configurati correttamente. Ad esempio, il seguente screenshot mostra la dashboard configurata da cluster-capacity.json.

    Dashboard della capacità del cluster in Grafana.

Risorse aggiuntive

Per ulteriori informazioni su Google Cloud Managed Service per Prometheus, consulta quanto segue:

Configurazione delle risorse del componente Stackdriver

Quando crei un cluster, Google Distributed Cloud crea automaticamente una risorsa personalizzata di Stackdriver. Puoi modificare le specifiche nella risorsa personalizzata per eseguire l'override dei valori predefiniti per CPU e memoria richieste e limiti per un componente di Stackdriver. Puoi anche eseguire l'override separato dell'impostazione predefinita delle metriche ottimizzate.

Override delle richieste e dei limiti predefiniti di CPU e memoria per un componente di Stackdriver

I cluster con un'alta densità di pod introducono un logging e un monitoraggio più elevati overhead. In casi estremi, i componenti di Stackdriver potrebbero segnalare vicini alla CPU e utilizzo della memoria o che possono persino essere soggetti a riavvii costanti a causa delle risorse. In questo caso, per eseguire l'override dei valori predefiniti per CPU e memoria per un componente di Stackdriver, segui questi passaggi:

  1. Esegui questo comando per aprire la risorsa personalizzata di Stackdriver in un dell'editor a riga di comando:

    kubectl -n kube-system edit stackdriver stackdriver
  2. Nella risorsa personalizzata di Stackdriver, aggiungi la sezione resourceAttrOverride sotto il campo spec:

    resourceAttrOverride:
          DAEMONSET_OR_DEPLOYMENT_NAME/CONTAINER_NAME:
            LIMITS_OR_REQUESTS:
              RESOURCE: RESOURCE_QUANTITY

    Tieni presente che la sezione resourceAttrOverride sostituisce tutte le impostazioni predefinite esistenti limiti e richieste per il componente specificato. I seguenti componenti sono supportati da resourceAttrOverride:

    • gke-metrics-agent/gke-metrics-agent
    • stackdriver-log-forwarder/stackdriver-log-forwarder
    • stackdriver-metadata-agent-cluster-level/metadata-agent
    • node-exporter/node-exporter
    • kube-state-metrics/kube-state-metrics

    Un file di esempio ha il seguente aspetto:

    apiVersion: addons.gke.io/v1alpha1
    kind: Stackdriver
    metadata:
      name: stackdriver
      namespace: kube-system
    spec:
      anthosDistribution: baremetal
      projectID: my-project
      clusterName: my-cluster
      clusterLocation: us-west-1a
      resourceAttrOverride:
        gke-metrics-agent/gke-metrics-agent:
          requests:
            cpu: 110m
            memory: 240Mi
          limits:
            cpu: 200m
            memory: 4.5Gi
  3. Per salvare le modifiche alla risorsa personalizzata di Stackdriver, salva ed esci dall'editor a riga di comando.

  4. Controlla l'integrità del tuo pod:

    kubectl -n kube-system get pods -l "managed-by=stackdriver"

    La risposta per un pod integro è simile alla seguente:

    gke-metrics-agent-4th8r                1/1     Running   1   40h
  5. Controlla le specifiche del pod del componente per assicurarti che le risorse siano impostate correttamente.

    kubectl -n kube-system describe pod POD_NAME

    Sostituisci POD_NAME con il nome del pod che hai appena è cambiato. Ad esempio, gke-metrics-agent-4th8r.

    La risposta è simile alla seguente:

      Name:         gke-metrics-agent-4th8r
      Namespace:    kube-system
      ...
      Containers:
        gke-metrics-agent:
          Limits:
            cpu: 200m
            memory: 4.5Gi
          Requests:
            cpu: 110m
            memory: 240Mi
          ...

Disattiva le metriche ottimizzate

Per impostazione predefinita, i deployment kube-state-metrics in esecuzione nel cluster raccolgono e segnalano un un set ottimizzato di metriche Kubernetes a Stackdriver. Se hai bisogno di metriche aggiuntive, ti consigliamo di cercarne una sostitutiva nell'elenco di Google Distributed Cloud metriche.

Ecco alcuni esempi di sostituzioni che potresti usare:

Metrica disabilitata Sostituzioni
kube_pod_start_time container/uptime
kube_pod_container_resource_requests container/cpu/request_cores
container/memory/request_bytes
kube_pod_container_resource_limits container/cpu/limit_cores
container/memory/limit_bytes

Per disattivare l'impostazione predefinita delle metriche ottimizzate (non consigliato):

  1. Apri la risorsa personalizzata di Stackdriver in un editor della riga di comando:

    kubectl -n kube-system edit stackdriver stackdriver
  2. Imposta il campo optimizedMetrics su false:

    apiVersion: addons.gke.io/v1alpha1
    kind: Stackdriver
    metadata:
    name: stackdriver
    namespace: kube-system
    spec:
    anthosDistribution: baremetal
    projectID: my-project
    clusterName: my-cluster
    clusterLocation: us-west-1a
    optimizedMetrics: false
    
  3. Salva le modifiche ed esci dall'editor della riga di comando.

Server delle metriche

Server delle metriche è l'origine delle metriche delle risorse container per vari pipeline di dati. Il server delle metriche recupera le metriche dai kubelet e le espone tramite l'API Kubernetes Metrics. HPA e VPA utilizzano poi queste metriche per determinare quando attivare la scalabilità automatica. Il server delle metriche viene scalato utilizzando strumento di ridimensionamento.

Nei casi estremi in cui un'elevata densità dei pod comporta un numero eccessivo di logging e monitoraggio overhead, il server delle metriche potrebbe essere arrestato e riavviato a causa della risorsa limitazioni. In questo caso, puoi allocare più risorse al server delle metriche modificando la configmap metrics-server-config nello spazio dei nomi gke-managed-metrics-server e modificando il valore per cpuPerNode e memoryPerNode.

kubectl edit cm metrics-server-config -n gke-managed-metrics-server

I contenuti di esempio del ConfigMap sono:

apiVersion: v1
data:
  NannyConfiguration: |-
    apiVersion: nannyconfig/v1alpha1
    kind: NannyConfiguration
    cpuPerNode: 3m
    memoryPerNode: 20Mi
kind: ConfigMap

Dopo aver aggiornato il ConfigMap, ricrea i pod Metrics-server con seguente comando:

kubectl delete pod -l k8s-app=metrics-server -n gke-managed-metrics-server

Requisiti di configurazione per Logging e Monitoring

Esistono diversi requisiti di configurazione per abilitare Cloud Logging e Cloud Monitoring con Google Distributed Cloud. Questi passaggi sono inclusi Configurazione di un account di servizio da utilizzare con Logging e Monitoring nella pagina Abilitazione dei servizi Google e nel seguente elenco:

  1. Devi creare un'area di lavoro di Cloud Monitoring all'interno progetto Google Cloud. A questo scopo, fai clic su Monitoraggio nella console Google Cloud e seguendo il flusso di lavoro.
  2. Devi abilitare le seguenti API di Stackdriver:

  3. Devi assegnare i seguenti ruoli IAM al servizio utilizzato dagli agenti Stackdriver:

    • logging.logWriter
    • monitoring.metricWriter
    • stackdriver.resourceMetadata.writer
    • monitoring.dashboardEditor
    • opsconfigmonitoring.resourceMetadata.writer

Prezzi

Non è previsto alcun costo per i log di sistema e le metriche della versione Google Kubernetes Engine (GKE) Enterprise.

In un cluster Google Distributed Cloud, log di sistema e metriche della versione Google Kubernetes Engine (GKE) Enterprise include:

  • Log e metriche di tutti i componenti in un cluster di amministrazione
  • Log e metriche dei componenti in questi spazi dei nomi in un cluster utente: kube-system, gke-system, gke-connect e knative-serving istio-system, monitoring-system, config-management-system, gatekeeper-system e cnrm-system

Per ulteriori informazioni, vedi Prezzi per Google Cloud Observability.

Per saperne di più sul merito per le metriche di Cloud Logging, contatta il team di vendita per i prezzi.