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. Liberar espaço.


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

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 Google Cloud de.

  2. Faça login na sua Google Cloud conta do. Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho dos 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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  4. If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.

  5. Verify that billing is enabled for your Google Cloud project.

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  8. If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.

  9. Verify that billing is enabled for your Google Cloud project.

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

Funções exigidas

Para receber as permissões necessárias para criar um cluster do Google Kubernetes Engine e visualizar os spans de rastreamento, solicite ao seu administrador que lhe conceda as seguintes funções do IAM em seu projeto:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias usando personalizados papéis ou outros predefinidos papéis.

Criar um cluster do GKE

Este guia cria um cluster padrão do GKE. Se você usar o modo Autopilot para o Google Kubernetes Engine ou ativar a Federação de Identidade da Carga de Trabalho para GKE, então você deve configurar seu aplicativo para usar a Federação de Identidade da Carga de Trabalho para GKE.

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

  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
    

Baixar e implantar um aplicativo

Baixe 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 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.

    A captura de tela a seguir mostra o resultado da execução do comando curl várias vezes. O gráfico mostra dados de latência agregados para spans, que descrevem suboperações de rastreamento.

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

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

    A caixa de diálogo de detalhes do trace é aberta, conforme mostrado na captura de tela a seguir:

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

    Um diagrama de Gantt mostra informações sobre o trace selecionado. A primeira linha no diagrama de Gantt é para o trace, e cada linha seguinte é um período no trace.

  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 amostra é escrito em Python, usa o framework Flask e os pacotes OpenTelemetry e é executado em um cluster do GKE.

Este guia cria um cluster padrão do GKE. Se você usar o modo Autopilot para o Google Kubernetes Engine ou ativar a Federação de Identidade da Carga de Trabalho para GKE, então você deve configurar seu aplicativo para usar a Federação de Identidade da Carga de Trabalho para 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 Google Cloud projeto:

  • O aplicativo importa vários pacotes 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 os handlers 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 trace, 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 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 ao 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.

Liberar espaço

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

Se você criou um novo projeto e não precisa mais dele, então exclua 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