Osservabilità con Envoy

Questo documento mostra come generare la tracciabilità e la registrazione per il proxy Envoy. Mostra anche come esportare le informazioni in Cloud Trace e Cloud Logging.

L'utilizzo di un mesh di servizi ti consente di osservare il traffico da e verso i servizi, il che consente un monitoraggio e un debug più ricchi senza modifiche al codice nel servizio stesso. Nell'architettura proxy sidecar utilizzata da Cloud Service Mesh, il proxy è il componente che elabora le richieste e fornisce le informazioni di telemetria necessarie. Le informazioni di telemetria devono essere raccolte e archiviate in una posizione centralizzata per un ulteriore utilizzo, ad esempio analisi dei dati, avvisi e risoluzione dei problemi.

Configurazione della dimostrazione

Questo documento utilizza la seguente configurazione per dimostrare la tracciabilità e la registrazione:

  • Una singola applicazione che rimane in ascolto sulla porta HTTP e restituisce il nome host dell'istanza di macchina virtuale (VM) che ha gestito la richiesta. Nel diagramma, questa applicazione si trova nell'angolo in alto a destra ed è etichettata Servizi HTTP (10.10.10.10:80). Una o più VM possono fornire questo servizio.
  • Una singola VM di Compute Engine che esegue un consumer di questo servizio. Nel diagramma, questa è etichettata come VM Compute Engine demo.
  • Un proxy sidecar Envoy installato e configurato da Cloud Service Mesh. Nel diagramma, questo è etichettato come envoy.
  • Un'applicazione consumer di servizi, mostrata nel riquadro a sinistra, è il consumer del servizio HTTP in esecuzione su 10.10.10.10:80.
Applicazione dimostrativa per logging e monitoraggio per Envoy.
Applicazione dimostrativa per la registrazione e il monitoraggio per Envoy (fai clic per ingrandire)

I seguenti passaggi corrispondono alle etichette numerate nel diagramma:

  1. Cloud Service Mesh configura il proxy Envoy per eseguire le seguenti operazioni:

    • Bilancia il carico del traffico per il servizio 10.10.10.10:80.
    • Memorizza le informazioni del log degli accessi per ogni richiesta emessa per questo servizio.
    • Genera informazioni di tracciamento per il servizio.
  2. Dopo che il consumatore invia una richiesta a 10.10.10.10, il proxy sidecar instrada la richiesta alla destinazione corretta.

  3. Il proxy sidecar genera anche le informazioni di telemetria necessarie:

    1. Aggiunge una voce al log di accesso sul disco locale con informazioni aggiuntive sulla richiesta.
    2. Genera una voce di traccia e la invia a Trace utilizzando il tracciamento OpenCensus Envoy.
  4. L'agente Logging esporta questi dati nell'API Cloud Logging in modo che diventino disponibili nell'interfaccia Cloud Logging.

Prerequisiti

Prima di completare i passaggi di configurazione, assicurati che siano state eseguite le seguenti operazioni:

  1. L'API Traffic Director è abilitata e gli altri prerequisiti sono soddisfatti, come descritto in Preparati per la configurazione con VM e carichi di lavoro proxyless.
  2. L'API Cloud Trace è abilitata.
  3. Il account di servizio utilizzato dalla VM Compute Engine ha configurato i seguenti ruoli Identity and Access Management (IAM):
  4. Le regole firewall consentono il traffico verso la VM che configuri nell'ambito di questa configurazione.

Configura il servizio dimostrativo e Cloud Service Mesh

Questo documento utilizza diversi script shell per eseguire i passaggi necessari per configurare il servizio dimostrativo. Esamina gli script per comprendere i passaggi specifici che eseguono.

  1. Avvia una VM di Compute Engine e configura il servizio HTTP sulla VM:

    curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/setup_demo_service.sh
    chmod 755 setup_demo_service.sh && ./setup_demo_service.sh
    

    Lo script setup_demo_service.sh crea un modello di VM che avvia apache2 all'avvio di una VM e un gruppo di istanze gestite che utilizza questo modello. Lo script avvia una singola istanza senza la scalabilità automatica abilitata.

  2. Utilizza Cloud Service Mesh per configurare il routing per il servizio 10.10.10.10:

    curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/setup_demo_trafficdirector.sh
    chmod 755 setup_demo_trafficdirector.sh && ./setup_demo_trafficdirector.sh
    

    Lo script setup_demo_trafficdirector.sh configura i parametri necessari per il servizio gestito Cloud Service Mesh.

  3. Avvia una VM Compute Engine che esegue un consumer del servizio HTTP, con il proxy sidecar installato e configurato sulla VM. Nel comando seguente, sostituisci PROJECT_ID con l'ID progetto a cui devono essere inviate le informazioni di Trace. In genere si tratta dello stesso progetto a cui appartiene la VM. Google Cloud

    curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/setup_demo_client.sh
    chmod 755 setup_demo_client.sh && ./setup_demo_client.sh PROJECT_ID
    

    Lo script setup_demo_client.sh crea una VM di Compute Engine con un proxy Envoy preconfigurato per l'utilizzo di Cloud Service Mesh.

Le seguenti impostazioni di configurazione aggiuntive consentono la tracciabilità e il logging:

  • Le variabili di metadati dei nodi di bootstrap TRAFFICDIRECTOR_ACCESS_LOG_PATH e TRAFFICDIRECTOR_ENABLE_TRACING consentono la registrazione e la tracciabilità, come descritto in Configurare gli attributi di bootstrap di Envoy per Cloud Service Mesh.
  • La configurazione di bootstrap statico consente l'esportazione delle informazioni di traccia in Trace utilizzando OpenCensus.

Dopo aver eseguito questi script, puoi accedere alla VM td-observability-demo-client e accedere al servizio HTTP disponibile all'indirizzo 10.10.10.10:

curl http://10.10.10.10

A questo punto, Envoy genera informazioni di logging e tracciamento degli accessi. La sezione seguente descrive come esportare i log e le informazioni di tracciamento.

Configura l'esportazione delle tracce in Cloud Trace

La configurazione di bootstrap di Envoy che hai creato quando hai eseguito lo script setup-demo-client.sh è sufficiente per generare informazioni di tracciamento. Tutte le altre configurazioni sono facoltative. Se vuoi configurare parametri aggiuntivi, consulta la pagina di configurazione di OpenCensus Envoy e modifica le opzioni di tracciamento nella configurazione di bootstrap di Envoy.

Dopo aver inviato una richiesta di esempio al server dimostrativo (curl 10.10.10.10), nella Google Cloud console, vai all'interfaccia Trace (Trace > Elenco tracce). Viene visualizzato un record di traccia corrispondente alla richiesta che hai inviato.

Per ulteriori informazioni su come utilizzare Trace, consulta la documentazione di Cloud Trace.

Configurare l'esportazione dei log di accesso in Logging

A questo punto, Envoy dovrebbe registrare le informazioni del log di accesso sul disco locale della VM in cui è in esecuzione. Per esportare questi record in Logging, devi installare l'agente Logging localmente. Per questo è necessario installare e configurare l'agente Logging.

Installazione dell'agente Logging

Installa l'agente Logging sulla VM da cui vengono esportate le informazioni di logging. Per questa configurazione di esempio, la VM è td-observability-demo-vm.

curl -sSO https://dl.google.com/cloudagents/add-logging-agent-repo.sh
sudo bash add-logging-agent-repo.sh --also-install

Per saperne di più, vedi Installazione dell'agente Cloud Logging su una singola VM.

Configurazione dell'agente Logging

Puoi esportare i log di Envoy come testo non strutturato o strutturato.

Esportare i log di Envoy come testo non strutturato

Questa opzione esporta i record di log dal log di accesso a Cloud Logging come testo non elaborato. Ogni voce del log degli accessi viene esportata come singola voce in Logging. Questa configurazione è più facile da installare perché si basa su un parser distribuito con la versione corrente dell'agente Logging. Tuttavia, è più difficile filtrare ed elaborare le voci di log di testo non elaborato quando utilizzi questa opzione.

  1. Scarica e installa il file di configurazione per l'esportazione non strutturata dei log di accesso di Envoy:

    curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/envoy_access_fluentd_unstructured.conf
    sudo cp envoy_access_fluentd_unstructured.conf /etc/google-fluentd/config.d/envoy_access.conf
    
  2. Riavvia l'agente. Le modifiche diventano effettive all'avvio dell'agente:

    sudo service google-fluentd restart
    

Esportare i log di Envoy come testo strutturato

  1. Installa il parser dei log di accesso Envoy da GitHub:

    sudo /opt/google-fluentd/embedded/bin/gem install fluent-plugin-envoy-parser
    
  2. Scarica e installa il file di configurazione per l'esportazione dei log di accesso Envoy in un formato strutturato:

    curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/envoy_access_fluentd_structured.conf
    sudo cp envoy_access_fluentd_structured.conf /etc/google-fluentd/config.d/envoy_access.conf
    
  3. Riavvia l'agente. Le modifiche diventano effettive all'avvio dell'agente:

    sudo service google-fluentd restart
    

Per maggiori informazioni, vedi Configurare l'agente Logging.

Verificare la configurazione

  1. Dalla VM proxy sidecar, genera una richiesta al servizio dimostrativo. Viene creato un nuovo record di log locale. Ad esempio, puoi eseguire curl 10.10.10.10.
  2. Nella console Google Cloud , vai a Logging > Esplora log. Nel menu a discesa, seleziona il tipo di log envoy-access. Viene visualizzata una voce di log per la richiesta più recente nel formato non strutturato o strutturato, a seconda del tipo di configurazione scelto in precedenza.

Risoluzione dei problemi

Leggi le sezioni seguenti per informazioni su come risolvere diversi problemi di osservabilità con Envoy.

Configura la tracciabilità in più progetti

Se vuoi monitorare le richieste in più progetti in cui sono stati implementati gli inviati, tieni presente quanto segue:

  • Ogni Envoy deve essere configurato con le credenziali del progetto in cui viene eseguito.
  • Ogni Envoy invia i dati di traccia al progetto corrispondente alle credenziali con cui viene eseguito.
  • Puoi visualizzare gli intervalli di tracciamento per le richieste tra progetti se le tue applicazioni mantengono il valore dell'intestazione HTTP X-Cloud-Trace-Context quando vengono effettuate le richieste.

Compatibilità Trace con le applicazioni gRPC senza proxy

La configurazione del tracer OpenCensus di Envoy consente di esportare le tracce dalle applicazioni gRPC senza proxy e dai proxy Envoy in modo che siano completamente compatibili all'interno di un service mesh. Per la compatibilità, il bootstrap di Envoy deve configurare il contesto di traccia in modo da includere il formato di traccia GRPC_TRACE_BIN nel relativo OpenCensusConfig, come segue:

tracing:
  http:
      name: envoy.tracers.opencensus
      typed_config:
        "@type": type.googleapis.com/envoy.config.trace.v2.OpenCensusConfig
        stackdriver_exporter_enabled: "true"
        stackdriver_project_id: "PROJECT_ID"
        incoming_trace_context: ["CLOUD_TRACE_CONTEXT", "GRPC_TRACE_BIN"]
        outgoing_trace_context: ["CLOUD_TRACE_CONTEXT", "GRPC_TRACE_BIN"]

Se la configurazione è completa, ma non vedi voci di traccia o di logging disponibili, verifica quanto segue:

  1. Gli account di servizio per la VM Compute Engine dispongono delle autorizzazioni IAM Trace e Logging necessarie, come specificato nei prerequisiti. Per informazioni sulle autorizzazioni IAM di Trace, consulta Controllo dell'accesso. Per informazioni sulle autorizzazioni di Logging, consulta Controllo dell'accesso.
  2. Per la registrazione: assicurati che non ci siano errori in /var/log/google-fluentd/google-fluentd.log.
  3. Per la registrazione: assicurati che le nuove voci vengano visualizzate nel file di log di accesso locale quando vengono emesse le richieste.

Passaggi successivi