Observabilidade com o Envoy

Neste guia, demonstramos como gerar rastreamento e geração de registros para o proxy Envoy. Ele também mostra como exportar as informações para o Cloud Trace e o Cloud Logging.

Usar uma malha de serviço permite observar o tráfego de e para serviços, o que permite monitoramento e depuração mais avançados sem alterações de código no próprio serviço. Na arquitetura de proxy sidecar que a Cloud Service Mesh usa, o proxy é o componente que processa as solicitações e fornece as informações de telemetria necessárias. As informações de telemetria precisam ser coletados e armazenados em um local centralizado para uso posterior, como dados a análise, a criação de alertas e a solução de problemas.

Configuração da demonstração

Neste guia, usamos a configuração a seguir para demonstrar o rastreamento e a geração de registros:

  • Um único aplicativo que detecta na porta HTTP e retorna o nome do host da instância de máquina virtual (VM) que atendeu à solicitação. No diagrama, esse aplicativo está no canto superior direito, chamado Serviços HTTP (10.10.10.10:80). Uma ou mais VMs podem fornecer esse serviço.
  • Uma única VM do Compute Engine que executa um consumidor desse serviço. No diagrama, isso é chamado de VM do Compute Engine de demonstração.
  • Um proxy sidecar do Envoy instalado e configurado pela do Cloud Service Mesh. No diagrama, isso é rotulado como Envoy.
  • Um aplicativo de consumidor de serviço, mostrado na caixa à esquerda, é o consumidor do serviço HTTP em execução em 10.10.10.10:80.
Aplicativo de demonstração para geração de registros e monitoramento do Envoy.
Aplicativo de demonstração para geração de registros e monitoramento do Stackdriver para Envoy (clique para ampliar)

As etapas a seguir correspondem aos rótulos numerados no diagrama:

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

    • Tráfego de balanceamento de carga do serviço 10.10.10.10:80.
    • Armazene informações de registro de acesso para cada solicitação emitida para esse serviço.
    • Gere informações de rastreamento para o serviço.
  2. Depois que o consumidor envia uma solicitação para 10.10.10.10, o proxy sidecar encaminha a solicitação para o destino correto.

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

    1. Adiciona uma entrada ao registro de acesso no disco local com novas informações sobre a solicitação.
    2. Gera uma entrada de trace e a envia para o Trace usando o rastreamento do Envoy em OpenCensus.
  4. O agente do Logging exporta esses dados para a API do Cloud Logging para que eles sejam disponibilizados na interface do Cloud Logging.

Pré-requisitos

Antes de concluir as etapas de configuração, faça o seguinte:

  1. A API Traffic Director está ativada e outros pré-requisitos são atendidos, conforme descrito em Preparar-se para a configuração com VMs e cargas de trabalho sem proxy.
  2. A API Cloud Trace está ativada.
  3. A conta de serviço que a VM do Compute Engine usa tem os seguintes papéis de gerenciamento de identidade e acesso (IAM) configurados:
  4. As regras de firewall permitem tráfego para a VM que você configura como parte dessa configuração.

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

Este guia usa vários scripts de shell para executar as etapas necessárias para configurar o serviço de demonstração. Revise os scripts para entender as etapas específicas que eles realizam.

  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 gerenciadas que usa esse modelo. O script inicia uma única instância sem o escalonamento automático ativado.

  2. Use o Cloud Service Mesh para configurar o roteamento 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 as instâncias para o serviço gerenciado do Cloud Service Mesh.

  3. Inicie uma VM do Compute Engine que execute um consumidor do serviço HTTP, com o proxy secundário instalado e configurado na VM. No comando a seguir, substitua PROJECT_ID pelo ID do projeto ao qual as informações do Trace precisam ser enviadas. Normalmente, é o mesmo projeto do Google Cloud a que a 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 que tem um proxy Envoy pré-configurado para usar a Cloud Service Mesh.

As novas configurações a seguir permitem o rastreamento e a geração de registros:

  • As variáveis de metadados do nó de inicialização TRAFFICDIRECTOR_ACCESS_LOG_PATH e TRAFFICDIRECTOR_ENABLE_TRACING permitem a geração de registros e o rastreamento, conforme descrito em Configurar atributos de inicialização do Envoy para a Cloud Service Mesh.
  • A configuração de inicialização estática permite a exportação de informações de trace para o Trace usando o OpenCensus.

Depois de executar esses scripts, faça login no td-observability-demo-client VM e acessar o serviço HTTP disponível em 10.10.10.10:

curl http://10.10.10.10

Nesse momento, o Envoy gera informações de registro de rastreamento e de acesso. A seção a seguir descreve como exportar registros e informações de rastreamento.

Como configurar a exportação de rastreamento para o Cloud Trace

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

Depois de emitir uma solicitação de amostra para o servidor de demonstração (curl 10.10.10.10), no Console do Google Cloud, acesse a interface do Trace (Trace > Lista de traces). Você verá um registro de rastreamento que corresponde à solicitação emitida.

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

Como configurar a exportação de registros de acesso para o Logging

Nesse estágio, o Envoy precisa gravar informações de registro de acesso no disco local da VM em que ele está sendo executado. Para exportar esses registros para o Logging, é preciso instalar o agente do Logging localmente. Isso requer a instalação e a configuração do agente do Logging.

Instale o agente do Logging.

Instale o agente do Logging na VM a partir da qual as informações de registro são exportadas. Para este exemplo de configuração, 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 Instalar o agente do Cloud Logging em uma única VM.

Configurar o agente do Logging

É possível exportar os registros do Envoy como texto não estruturado ou estruturado.

Como exportar os registros do Envoy como texto não estruturado

Essa opção exporta registros de registro do registro de acesso para o Cloud Logging como texto bruto. Cada entrada no registro de acesso é exportada como uma única entrada para o Logging. Essa configuração é mais fácil de instalar porque depende de um analisador distribuído com a versão atual do agente do Logging. No entanto, é mais difícil filtrar e processar entradas de registro de texto bruto ao usar essa opção.

  1. Faça o download e instale o arquivo de configuração de exportação não estruturado 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
    

Exportar os registros do Envoy como texto estruturado

  1. Instale o analisador de registros de acesso do Envoy no GitHub:

    sudo /opt/google-fluentd/embedded/bin/gem install fluent-plugin-envoy-parser
    
  2. Faça o download e instale o arquivo de configuração para exportar registros de acesso do Envoy em um 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 Configurar o agente do Logging.

Verificar a configuração

  1. Na VM do proxy sidecar, gere uma solicitação para o serviço de demonstração. Isso cria um novo registro local. Por exemplo, é possível executar curl 10.10.10.10:
  2. No Console do Google Cloud, acesse Logging > Explorador de registros. No menu suspenso, selecione o tipo de registro envoy-access. Você vê uma entrada de registro para a solicitação mais recente no formato não estruturado ou estruturado, dependendo do tipo de configuração escolhido anteriormente.

Solução de problemas

Leia as seções a seguir para saber como resolver diferentes problemas de observabilidade com o Envoy.

Configurar o rastreamento em vários projetos

Se você quiser rastrear solicitações entre os Envoys implantados nos vários projetos, observe o seguinte:

  • Cada Envoy precisa ser configurado com as credenciais do projeto em que está sendo executado.
  • Cada Envoy envia dados de trace para o projeto que corresponde às credenciais com que ele está sendo executado.
  • Será possível ver períodos de rastreamento para solicitações entre projetos se seus aplicativos preservarem o valor do cabeçalho HTTP X-Cloud-Trace-Context quando as solicitações forem feitas.

Compatibilidade do Trace com aplicativos gRPC sem proxy

A configuração do rastreador OpenCensus do Envoy permite que os traces exportados de aplicativos gRPC sem proxy e proxies do Envoy sejam totalmente compatíveis em uma malha de serviço. Para compatibilidade, a inicialização do Envoy precisa configurar o contexto do rastreamento para incluir o formato de trace GRPC_TRACE_BIN no OpenCensusConfig, da seguinte maneira:

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 as entradas de registro ou de trace não forem exibidas disponível, verifique o seguinte:

  1. As contas de serviço da VM do Compute Engine têm as permissões necessárias do IAM do Trace e Logging, conforme especificado nos pré-requisitos. Para informações sobre permissões do IAM do Trace, consulte Controle de acesso. Para informações sobre permissões do Logging, consulte Controle de acesso.
  2. Para geração de registros: verifique se não há erros em /var/log/google-fluentd/google-fluentd.log.
  3. Para geração de registros: certifique-se de que as novas entradas apareçam no arquivo de registros de acesso local quando as solicitações forem emitidas.

A seguir