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 CLI do Google Cloud.

  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 passo a passo 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. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  3. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  5. Enable the Google Kubernetes Engine and Cloud Trace APIs.

    Enable the APIs

  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  8. Enable the Google Kubernetes Engine and Cloud Trace APIs.

    Enable the APIs

Criar um cluster do GKE

  1. Na barra de ferramentas, clique em . Ative 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 e usar a mesma identidade da CLI do Google Cloud:

    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 é 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 comando a seguir para implantar o aplicativo de amostra:

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

    A consulta setup.sh leva alguns minutos para ser concluída.

    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 será parecida com 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.

Consultar dados de latência

  1. No console do Google Cloud, acesse a página Explorador de traces:

    Acessar o Explorador de traces

    Também é possível encontrar essa página usando a barra de pesquisa.

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

    Na captura de tela a seguir, há 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 é atualizado, e o ponto selecionado é destacado com um círculo desenhado ao redor do ponto e todos os outros pontos que representa todos os outros traços ficam 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 consultar 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 exemplo é 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 as solicitações da Web com contexto de trace e de forma automática rastreia gerenciadores e solicitações do Flask 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 traces, que propaga o contexto de 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 de trace para você com seus solicitações enviadas:

    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, 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 o string Hello, I am service C para o serviço b.
  6. O serviço b recebe a resposta do serviço c, a anexa à 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 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, excluir o projeto.

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

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

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

A seguir