Conferir a latência das solicitações do app

Saiba como coletar e visualizar dados de latência dos seus aplicativos:

  1. Criar um cluster do Google Kubernetes Engine (GKE) usando a Google Cloud CLI.

  2. Faça o download e implante um aplicativo de exemplo no cluster.

  3. Criar um trace enviando uma solicitação HTTP para o aplicativo de amostra.

  4. Conferir as informações de latência do trace criado.

  5. Fazer a limpeza.


Para seguir as instruções detalhadas desta tarefa diretamente no console do Google Cloud, clique em Orientação:

Orientações


Antes de começar

  1. As restrições de segurança definidas pela sua organização podem impedir que você conclua as etapas a seguir. Para informações sobre solução de problemas, consulte Desenvolver aplicativos em um ambiente restrito do Google Cloud.

  2. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  3. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  4. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  5. Ative as APIs Google Kubernetes Engine and Cloud Trace.

    Ative as APIs

  6. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  7. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  8. Ative as APIs Google Kubernetes Engine and Cloud Trace.

    Ative as APIs

Criar um cluster do GKE

  1. Na barra de ferramentas, clique em Ativar o Cloud Shell e execute as etapas a seguir no Cloud Shell.

  2. Crie um cluster:

    gcloud container clusters create cloud-trace-demo --zone us-central1-c
    

    O comando anterior, que leva vários minutos para ser concluído, cria um cluster padrão com o nome cloud-trace-demo na zona us-central1-c.

  3. Configure kubectl para atualizar automaticamente as credenciais para usar a mesma identidade da Google Cloud CLI:

    gcloud container clusters get-credentials cloud-trace-demo --zone us-central1-c
    
  4. Verifique o acesso ao cluster:

    kubectl get nodes
    

    Um exemplo de saída desse comando é:

    NAME                                              STATUS   ROLES    AGE   VERSION
    gke-cloud-trace-demo-default-pool-063c0416-113s   Ready    <none>   78s   v1.22.12-gke.2300
    gke-cloud-trace-demo-default-pool-063c0416-1n27   Ready    <none>   79s   v1.22.12-gke.2300
    gke-cloud-trace-demo-default-pool-063c0416-frkd   Ready    <none>   78s   v1.22.12-gke.2300
    

Fazer o download, implantar e aplicar

Faça o download e implante um aplicativo Python que usa o framework Flask e o pacote OpenTelemetry. O aplicativo está descrito na seção Sobre o app desta página.

No Cloud Shell, faça o seguinte:

  1. Clone um app Python do GitHub:

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  2. Execute o seguinte comando para implantar o aplicativo de amostra:

    cd python-docs-samples/trace/cloud-trace-demo-app-opentelemetry && ./setup.sh
    

    O script setup.sh leva alguns minutos para ser concluído.

    O script configura três serviços usando uma imagem pré-criada e aguarda o provisionamento de todos os recursos. As cargas de trabalho são chamadas de cloud-trace-demo-a, cloud-trace-demo-b e cloud-trace-demo-c.

    Um exemplo de saída desse comando é:

    deployment.apps/cloud-trace-demo-a is created
    service/cloud-trace-demo-a is created
    deployment.apps/cloud-trace-demo-b is created
    service/cloud-trace-demo-b is created
    deployment.apps/cloud-trace-demo-c is created
    service/cloud-trace-demo-c is created
    
    Wait for load balancer initialization complete......
    Completed.
    

Criar dados de trace

Um trace descreve o tempo que um aplicativo leva para concluir uma única operação.

Para criar um trace, execute o comando a seguir no Cloud Shell:

curl $(kubectl get svc -o=jsonpath='{.items[?(@.metadata.name=="cloud-trace-demo-a")].status.loadBalancer.ingress[0].ip}')

A resposta do comando anterior é semelhante a esta:

Hello, I am service A
And I am service B
Hello, I am service C

É possível executar o comando curl várias vezes para gerar vários traces.

Ver dados de latência

  1. No painel de navegação do console do Google Cloud, selecione Trace e depois Trace Explorer:

    Acessar o Explorador de traces

    Cada trace é representado por um ponto no gráfico e uma linha na tabela.

    A captura de tela a seguir mostra vários traces:

    Janela do Explorador de traces para o guia de início rápido.

  2. Para conferir os detalhes de um trace, selecione um ponto no gráfico ou uma linha na tabela.

    O gráfico de dispersão será atualizado, e o ponto selecionado será destacado com um círculo desenhado ao redor dele, e todos os outros pontos que representam todos os outros rastros serão esmaecidos.

    Um diagrama de Gantt mostra informações sobre o trace selecionado. A primeira linha no diagrama de Gantt é para o trace e existe uma linha para cada período no trace. Um período descreve quanto tempo leva para executar uma suboperação completa.

    Mais informações sobre cada período estão disponíveis no Painel de detalhes.

  3. Para ver informações detalhadas sobre um período, selecione o período no diagrama de Gantt.

Sobre o aplicativo

O aplicativo de amostra usado neste guia de início rápido está disponível em um repositório do GitHub. Esse repositório contém informações sobre como usar o aplicativo em ambientes diferentes do Cloud Shell. O aplicativo de amostra é escrito em Python, usa o framework Flask e os pacotes OpenTelemetry e é executado em um cluster do GKE.

Instrumentação

O arquivo app.py no repositório do GitHub contém a instrumentação necessária para capturar e enviar dados do trace para seu projeto do Google Cloud:

  • O aplicativo importa vários pacotes do OpenTelemetry:

    from opentelemetry import trace
    from opentelemetry.exporter.cloud_trace import CloudTraceSpanExporter
    from opentelemetry.instrumentation.flask import FlaskInstrumentor
    from opentelemetry.instrumentation.requests import RequestsInstrumentor
    from opentelemetry.propagate import set_global_textmap
    from opentelemetry.propagators.cloud_trace_propagator import CloudTraceFormatPropagator
    from opentelemetry.sdk.trace import TracerProvider
    from opentelemetry.sdk.trace.export import BatchSpanProcessor
    
  • O aplicativo instrumenta solicitações da Web com contexto de trace e rastreia automaticamente gerenciadores Flask e solicitações para outros serviços:

    app = flask.Flask(__name__)
    FlaskInstrumentor().instrument_app(app)
    RequestsInstrumentor().instrument()
  • O aplicativo configura o exportador do Cloud Trace como um provedor de trace, que propaga o contexto do trace no formato do Cloud Trace:

    def configure_exporter(exporter):
        """Configures OpenTelemetry context propagation to use Cloud Trace context
    
        Args:
            exporter: exporter instance to be configured in the OpenTelemetry tracer provider
        """
        set_global_textmap(CloudTraceFormatPropagator())
        tracer_provider = TracerProvider()
        tracer_provider.add_span_processor(BatchSpanProcessor(exporter))
        trace.set_tracer_provider(tracer_provider)
    
    configure_exporter(CloudTraceSpanExporter())
    tracer = trace.get_tracer(__name__)
  • O snippet de código a seguir mostra como enviar solicitações em Python. O OpenTelemetry propaga implicitamente o contexto do trace para você com suas solicitações de saída:

    if endpoint is not None and endpoint != "":
        data = {"body": keyword}
        response = requests.get(
            endpoint,
            params=data,
        )
        return keyword + "\n" + response.text
    else:
        return keyword, 200
    
    

Como o aplicativo funciona

Para maior clareza, nesta seção, cloud-trace-demo é omitido dos nomes de serviço. Por exemplo, o serviço cloud-trace-demo-c é referenciado como c.

Este aplicativo cria três serviços chamados a, b e c. O serviço a está configurado para chamar o serviço b, e o serviço b está configurado para chamar o serviço c. Para detalhes sobre a configuração dos serviços, consulte os arquivos YAML no repositório do GitHub.

Ao emitir uma solicitação HTTP para o serviço a neste guia de início rápido, você usou o seguinte comando curl:

curl $(kubectl get svc -o=jsonpath='{.items[?(@.metadata.name=="cloud-trace-demo-a")].status.loadBalancer.ingress[0].ip}')

O comando curl funciona da seguinte maneira:

  1. kubectl busca o endereço IP do serviço chamado cloud-trace-demo-a.
  2. O comando curl envia a solicitação HTTP para o serviço a.
  3. O serviço a recebe a solicitação HTTP e envia uma solicitação ao serviço b.
  4. O serviço b recebe a solicitação HTTP e envia uma solicitação ao serviço c.
  5. O serviço c recebe a solicitação HTTP do serviço b e retorna a string Hello, I am service C para o serviço b.
  6. O serviço b recebe a resposta do serviço c, anexa-a à string And I am service B e retorna o resultado para o serviço a.
  7. O serviço a recebe a resposta do serviço b e a anexa à string Hello, I am service A.
  8. A resposta do serviço a é impressa no Cloud Shell.

Limpar

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados nesta página, siga estas etapas.

Se você criou um novo projeto e não precisa mais dele, exclua o projeto.

Se você usou um projeto atual, faça o seguinte:

  1. Para excluir o cluster, execute este comando no Cloud Shell:

    gcloud container clusters delete cloud-trace-demo --zone us-central1-c

A seguir