Observabilidade com o Envoy

Este documento demonstra como gerar o rastreio e o registo para o proxy Envoy. Também mostra como exportar as informações para o Cloud Trace e o Cloud Logging.

A utilização de uma malha de serviços permite-lhe observar o tráfego de e para os serviços, o que permite uma monitorização e uma depuração mais detalhadas sem alterações ao código no próprio serviço. Na arquitetura de proxy sidecar que o Cloud Service Mesh usa, o proxy é o componente que processa pedidos e fornece as informações de telemetria necessárias. As informações de telemetria têm de ser recolhidas e armazenadas numa localização centralizada para utilização posterior, como análise de dados, alertas e resolução de problemas.

Configuração da demonstração

Este documento usa a seguinte configuração para demonstrar a monitorização e o registo:

  • Uma única aplicação que escuta na porta HTTP e devolve o nome do anfitrião da instância da máquina virtual (VM) que processou o pedido. No diagrama, esta aplicação encontra-se no canto superior direito, etiquetada como Serviços HTTP (10.10.10.10:80). Uma ou mais VMs podem fornecer este serviço.
  • Uma única VM do Compute Engine que executa um consumidor deste serviço. No diagrama, esta opção está etiquetada como VM do Compute Engine de demonstração.
  • Um proxy sidecar do Envoy instalado e configurado pela malha de serviço na nuvem. No diagrama, isto está etiquetado como envoy.
  • Uma aplicação de consumidor de serviços, apresentada na caixa à esquerda, é o consumidor do serviço HTTP em execução em 10.10.10.10:80.
Aplicação de demonstração para registo e monitorização do Envoy.
Aplicação de demonstração para registo e monitorização do Envoy (clique para aumentar)

Os passos seguintes correspondem às etiquetas numeradas no diagrama:

  1. O Cloud Service Mesh configura o proxy Envoy para fazer o seguinte:

    • Equilibre a carga do tráfego para o serviço 10.10.10.10:80.
    • Armazenar informações do registo de acesso para cada pedido emitido para este serviço.
    • Gerar informações de rastreio para o serviço.
  2. Depois de o consumidor enviar um pedido para 10.10.10.10, o proxy sidecar encaminha o pedido para o destino correto.

  3. O proxy sidecar também gera as informações de telemetria necessárias:

    1. Adiciona uma entrada ao registo de acesso no disco local com informações adicionais sobre o pedido.
    2. Gera uma entrada de rastreio e envia-a para o Trace através do rastreio do OpenCensus Envoy.
  4. O agente Logging exporta estes dados para a API Cloud Logging para que os dados fiquem disponíveis na interface do Cloud Logging.

Pré-requisitos

Antes de concluir os passos de configuração, certifique-se de que o seguinte está feito:

  1. A API Traffic Director está ativada e outros pré-requisitos são cumpridos, conforme descrito em Prepare-se para a configuração com cargas de trabalho sem proxy e de VM.
  2. A API Cloud Trace está ativada.
  3. A conta de serviço que a VM do Compute Engine usa tem as seguintes funções de gestão de identidade e de acesso (IAM) configuradas:
  4. As regras de firewall permitem o tráfego para a VM que configura como parte desta configuração.

Configure o serviço de demonstração e o Cloud Service Mesh

Este documento usa vários scripts de shell para executar os passos necessários para configurar o serviço de demonstração. Reveja os scripts para compreender os passos específicos que executam.

  1. Inicie uma VM do Compute Engine e configure o serviço HTTP na 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
    

    O script setup_demo_service.sh cria um modelo de VM que inicia o apache2 quando uma VM é iniciada e um grupo de instâncias geridas que usa este modelo. O script inicia uma única instância sem o dimensionamento automático ativado.

  2. Use o Cloud Service Mesh para configurar o encaminhamento para o serviço 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
    

    O script setup_demo_trafficdirector.sh configura os parâmetros necessários para o serviço gerido Cloud Service Mesh.

  3. Inicie uma VM do Compute Engine que execute um consumidor do serviço HTTP, com o proxy sidecar instalado e configurado na VM. No comando seguinte, substitua PROJECT_ID pelo ID do projeto para o qual as informações de rastreio devem ser enviadas. Normalmente, este é o mesmo Google Cloud projeto ao qual a sua VM pertence.

    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
    

    O script setup_demo_client.sh cria uma VM do Compute Engine com um proxy Envoy pré-configurado para usar a Cloud Service Mesh.

As seguintes definições de configuração adicionais ativam a monitorização e o registo:

Depois de executar estes scripts, pode iniciar sessão na td-observability-demo-client VM e aceder ao serviço HTTP disponível em 10.10.10.10:

curl http://10.10.10.10

Neste ponto, o Envoy gera informações de registo de acesso e rastreio. A secção seguinte descreve como exportar registos e informações de rastreio.

Configure a exportação de rastreios para o Cloud Trace

A configuração de arranque do Envoy que criou quando executou o script setup-demo-client.sh é suficiente para gerar informações de rastreio. Todas as outras configurações são opcionais. Se quiser configurar parâmetros adicionais, consulte a página de configuração do OpenCensus Envoy e modifique as opções de rastreio na configuração de arranque do Envoy.

Depois de emitir um pedido de amostra para o servidor de demonstração (curl 10.10.10.10), na consola Google Cloud , aceda à interface de rastreio (Rastreio > Lista de rastreios). Vê um registo de rastreio que corresponde ao pedido que emitiu.

Para mais informações sobre como usar o Trace, consulte a documentação do Cloud Trace.

Configure a exportação de registos de acesso para o Logging

Nesta fase, o Envoy deve estar a registar informações do registo de acesso no disco local da VM onde está a ser executado. Para exportar estes registos para o Logging, tem de instalar o agente de registos localmente. Isto requer a instalação e a configuração do agente de registo.

Instale o agente de registos

Instale o agente de registo na VM a partir da qual as informações de registo são exportadas. Para esta configuração de exemplo, a 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

Para mais informações, consulte o artigo Instale o agente do Cloud Logging numa única VM.

Configure o agente de registos

Pode exportar os registos do Envoy como texto não estruturado ou estruturado.

Exporte os registos do Envoy como texto não estruturado

Esta opção exporta registos do registo de acesso para o Cloud Logging como texto não processado. Cada entrada no registo de acesso é exportada como uma única entrada para o Logging. Esta configuração é mais fácil de instalar porque se baseia num analisador distribuído com a versão atual do agente Logging. No entanto, é mais difícil filtrar e processar entradas de registo de texto não processado quando usa esta opção.

  1. Transfira e instale o ficheiro de configuração de exportação não estruturada do registo de acesso do 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. Reinicie o agente. As alterações entram em vigor quando o agente é iniciado:

    sudo service google-fluentd restart
    

Exporte os registos do Envoy como texto estruturado

  1. Instale o analisador de registos de acesso do Envoy a partir do GitHub:

    sudo /opt/google-fluentd/embedded/bin/gem install fluent-plugin-envoy-parser
    
  2. Transfira e instale o ficheiro de configuração para exportar registos de acesso do Envoy num formato estruturado:

    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. Reinicie o agente. As alterações entram em vigor quando o agente é iniciado:

    sudo service google-fluentd restart
    

Para mais informações, consulte o artigo Configure o agente de registo.

Valide a configuração

  1. A partir da VM do proxy sidecar, gere um pedido para o serviço de demonstração. Esta ação cria um novo registo de registo local. Por exemplo, pode executar curl 10.10.10.10.
  2. Na Google Cloud consola, aceda a Registo > Explorador de registos. No menu pendente, selecione o tipo de registo envoy-access. É apresentada uma entrada de registo para o pedido mais recente no formato não estruturado ou estruturado, consoante o tipo de configuração que escolheu anteriormente.

Resolução de problemas

Leia as secções seguintes para obter informações sobre como resolver diferentes problemas de observabilidade com o Envoy.

Configure o rastreio em vários projetos

Se quiser rastrear pedidos em Envoys implementados em vários projetos, tenha em atenção o seguinte:

  • Cada Envoy tem de ser configurado com as credenciais do projeto onde está a ser executado.
  • Cada Envoy envia dados de rastreio para o projeto que corresponde às credenciais com as quais está a ser executado.
  • Pode ver intervalos de rastreio para pedidos entre projetos se as suas aplicações preservarem o valor do cabeçalho HTTP X-Cloud-Trace-Context quando os pedidos são feitos.

Rastreie a compatibilidade com aplicações gRPC sem proxy

A configuração do rastreador OpenCensus do Envoy permite que os rastreios exportados de aplicações gRPC sem proxy e proxies do Envoy sejam totalmente compatíveis numa malha de serviço. Para compatibilidade, o bootstrap do Envoy tem de configurar o contexto de rastreio para incluir o formato de rastreio GRPC_TRACE_BIN no respetivo OpenCensusConfig, da seguinte forma:

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 a configuração estiver concluída, mas não vir entradas de rastreio ou registo disponíveis, verifique o seguinte:

  1. As contas de serviço da VM do Compute Engine têm as autorizações IAM de rastreio e registo necessárias, conforme especificado nos pré-requisitos. Para informações sobre as autorizações de IAM do Trace, consulte o artigo Controlo de acesso. Para obter informações sobre as autorizações de registo, consulte o artigo Controlo de acesso.
  2. Para o registo: certifique-se de que não existem erros em /var/log/google-fluentd/google-fluentd.log.
  3. Para o registo: certifique-se de que as novas entradas aparecem no ficheiro de registo de acesso local quando são emitidos pedidos.

O que se segue?