Como capturar o rastreamento e as métricas do Cloud Bigtable usando o Stackdriver e o OpenCensus

Neste tutorial, mostramos como implementar o rastreamento e registro de métricas do cliente em cargas de trabalho do Cloud Bigtable usando OpenCensus e Stackdriver. Embora o Cloud Bigtable mostre várias métricas úteis do servidor usando o Stackdriver, os aplicativos também oferecem benefícios por meio de rastreamento do cliente, instrumentação e métricas definidas pelo aplicativo. Por exemplo, as métricas do servidor não informam sobre a latência de ida e volta das chamadas feitas ao endpoint do Cloud Bigtable e só podem ser exibidas usando o rastreamento do cliente.

O OpenCensus é uma biblioteca de código aberto que pode ser usada para observar seus aplicativos. A biblioteca é independente de fornecedor e se integra a vários back-ends, como Prometheus e Zipkin. Neste tutorial, você usará o Stackdriver como back-end de rastreamento e métricas.

Para concluir as etapas deste tutorial, você deve estar familiarizado com a linha de comando do Linux. Embora não seja obrigatório, o conhecimento da linguagem de programação Java ajuda a entender o código de exemplo.

Objetivos

  • Implantar uma instância do Cloud Bigtable.
  • Implantar uma máquina virtual (VM) do Compute Engine para executar um exemplo de cliente Java instrumentado pelo OpenCensus.
  • Fazer o download, implementar e execute o app do cliente Java instrumentado.
  • Visualizar rastreamentos do OpenCensus no Stackdriver Trace.
  • Ver as métricas do OpenCensus no Stackdriver Metrics Explorer.

Custos

Neste tutorial, usamos os seguintes componentes faturáveis do Google Cloud Platform:

Use a calculadora de preços para gerar uma estimativa de custo com base no uso do projeto. Novos usuários do GCP são qualificados para uma avaliação gratuita.

Antes de começar

  1. Faça login na sua Conta do Google.

    Se você ainda não tiver uma, inscreva-se.

  2. Selecione ou crie um projeto do Google Cloud Platform.

    Acessar a página Gerenciar recursos

  3. Verifique se o faturamento foi ativado no projeto do Google Cloud Platform.

    Saiba como ativar o faturamento

  4. Ativar Compute Engine, Cloud Bigtable e Stackdriver Logging APIs.

    Ativar as APIs

  5. Instale e inicialize o SDK do Cloud.

Arquitetura de referência

Para simplificar, neste tutorial implementamos toda a lógica do cliente em um aplicativo de console Java. Para o nível do armazenamento de dados, você usa o Cloud Bigtable, que permite concentrar nos principais aspectos do rastreamento e das métricas do cliente sem precisar se preocupar com implantações de banco de dados e configurações relacionadas.

O diagrama de arquitetura a seguir mostra um aplicativo de console Java e uma camada do armazenamento de dados.

Arquitetura de referência com um aplicativo de console Java e uma camada do armazenamento de dados.

Como criar uma instância do Cloud Bigtable

Nesta seção, você cria uma instância do Cloud Bigtable que será usada pelo aplicativo Java posteriormente no tutorial.

  • No Cloud Shell, crie uma instância de desenvolvimento do Cloud Bigtable:

    gcloud bigtable instances create cbt-oc \
      --cluster=cbt-oc \
      --cluster-zone=us-central1-c \
      --display-name=cbt-oc \
      --instance-type=DEVELOPMENT
    

Isso pode demorar alguns minutos.

Como criar e configurar uma VM do Compute Engine

  • No Cloud Shell, crie uma VM do Compute Engine com os escopos de segurança necessários para 0Auth 2.0:

    gcloud compute instances create trace-client \
        --zone=us-central1-c \
        --scopes="https://www.googleapis.com/auth/bigtable.admin.table,\
    https://www.googleapis.com/auth/bigtable.data,\
    https://www.googleapis.com/auth/logging.write,\
    https://www.googleapis.com/auth/monitoring.write,\
    https://www.googleapis.com/auth/trace.append"
    

Exemplo de aplicativo Java

Esta seção usa um exemplo de aplicativo Java que gera transações para demonstrar os recursos de rastreamento do OpenCensus e do Stackdriver.

Fluxo de aplicativos

O exemplo de aplicativo Java em execução na VM do Compute Engine segue as etapas a seguir:

  1. Cria uma tabela na instância do Cloud Bigtable.
  2. Para uma série de 10.000 conjuntos de transações, faça o seguinte:
    1. Escreve um pequeno conjunto de linhas.
    2. Lê uma única linha.
    3. Executa uma verificação de tabela para essas linhas.
  3. Exclui a tabela.

Como implantar o app de amostra

Nesta seção, você faz o download do aplicativo Java que contém o código instrumentado, modifica-o para refletir seu ambiente e o executa.

  1. No Console do GCP, acesse a página Instâncias de VMs.

    ACESSAR A PÁGINA "INSTÂNCIAS DE VMs"

  2. Clique no botão SSH (destacado na captura de tela a seguir) para se conectar à VM usando SSH:

    Como usar SSH para se conectar à VM.

  3. Na instância da VM, instale o Git, o Java 8 JDK e o Maven:

    sudo apt-get install git openjdk-8-jdk maven -y
    
  4. Na instância, clone o repositório de origem para este tutorial:

    git clone https://github.com/GoogleCloudPlatform/community.git
    

    Agora, é possível atualizar o aplicativo Java com algumas configurações específicas do seu projeto.

  5. Navegue até a pasta que contém a origem Java:

    cd community/tutorials/bigtable-oc/java/
    
  6. Configure o código do aplicativo para usar a instância cbt-oc do Cloud Bigtable:

    export INSTANCE_ID=cbt-oc
    
  7. Agora, execute os comandos do Maven para criar e executar o programa:

    mvn package -DskipTests --quiet
    mvn exec:java -Dexec.mainClass=com.example.bigtable.App --quiet
    

    A saída será assim:

    ...
    2019-05-13 23:31:54 INFO  BigtableSession:89 - Opening connection for projectId your-project, instanceId cbt-oc, on data host bigtable.googleapis.com, admin host bigtableadmin.googleapis.com.
    2019-05-13 23:31:54 INFO  BigtableSession:89 - Bigtable options: {......}
    2019-05-13 23:31:54 INFO  OAuthCredentialsCache:89 - Refreshing the OAuth token
    2019-05-13 23:31:55 INFO  App:170 - Create table Hello-Bigtable
    2019-05-13 23:35:36 INFO  App:209 - Delete the table
    2019-05-13 23:35:36 WARN  BigtableAdmin:116 - Table Hello-Bigtable was disabled in memory only.
    

Destaques do exemplo de código de aplicativo

No segmento de código a seguir, a instância do Cloud Bigtable é fornecida ao ambiente de execução do Java usando a variável de ambiente INSTANCE_ID definida anteriormente.

private static final String PROJECT_ID = ServiceOptions.getDefaultProjectId();
private static final String INSTANCE_ID = System.getenv( "INSTANCE_ID");

O segmento de código abaixo mostra como definir um escopo de rastreamento rotulado manualmente:

try (Scope ss = tracer.spanBuilder("opencensus.Bigtable.Tutorial").startScopedSpan()) {

    // generate unique UUID
    UUID uuid = UUID.randomUUID();
    String randomUUIDString = uuid.toString();

    startRead = System.currentTimeMillis();
    // write to Bigtable
    writeRows(table, randomUUIDString);
    endRead = System.currentTimeMillis();

    startWrite = System.currentTimeMillis();
    // read from Bigtable
    readRows(table, randomUUIDString);
    endWrite = System.currentTimeMillis();

Veja o bloco try com uma chamada para spanBuilder. Isso ilustra como o programa usa o OpenCensus para rastrear. A cadeia de chamadas que gravam e leem a tabela na função doBigTableOperations é instrumentalizada dessa forma.

O programa também configura o Stackdriver Trace como o back-end de rastreamento:

private static void configureOpenCensusExporters(Sampler sampler) throws IOException {
    TraceConfig traceConfig = Tracing.getTraceConfig();

    // For demo purposes, lets always sample.

    traceConfig.updateActiveTraceParams(
      traceConfig.getActiveTraceParams().toBuilder().setSampler(sampler).build());

    // Create the Stackdriver trace exporter
    StackdriverTraceExporter.createAndRegister(
      StackdriverTraceConfiguration.builder()
        .setProjectId(PROJECT_ID)
        .build());

    // [Start Stackdriver Monitoring]
    StackdriverStatsExporter.createAndRegister();

Como ver rastros na interface do usuário do Stackdriver Trace

O programa de exemplo executa 10.000 conjuntos de transações: três gravações e uma leitura de intervalo. O exportador é configurado para registrar uma amostra de rastros para cada mil conjuntos de transações. Como resultado, 10 ou 11 rastros são capturados durante a execução do programa.

Depois que o programa estiver em execução por um curto período, faça o seguinte:

  1. Navegue até o console do Stackdriver Trace no Stackdriver:

    Console do Stackdriver Trace.

  2. Clique em Lista de rastreamento.

    À direita, você verá uma tabela semelhante a esta:

    Tabela da lista de rastreamento.

    A taxa de amostragem dos rastros é definida para registrar um rastro para cada 1.000 transações.

    O rótulo de rastreamento opencensus.Bigtable.Tutorial na Linha do tempo é o nome do escopo de rastreamento mais externo definido no snippet de código a seguir.

    // sample every 1000 transactions
    configureOpenCensusExporters(Samplers.probabilitySampler(1/1000.0));
  3. Selecione opencensus.Bigtable.Tutorial. Isso abre uma visualização detalhada que mostra mais informações sobre a cadeia de chamadas, além de outras informações úteis, como escopos de rastreamento para chamadas de API discretas instrumentadas na biblioteca de cliente e latências de chamada no nível da operação.

    Por exemplo, cada uma das séries de linhas de gravação e leitura é encapsulada pelos períodos de rastreamento WriteRows e ReadRows de nível inferior definidos pelo usuário.

    Abaixo de ReadRows, é possível ver a operação get, seguida pelas operações de verificação da tabela.

    Operações de verificação de tabela.

    Os outros itens incluídos na lista de rastreamento, como Operation.google.bigtable.admin.v2.BigtableTableAdmin.CreateTable, acontecem fora do escopo de rastreamento definido manualmente. Por isso, esses itens são incluídos como operações separadas na lista.

Como visualizar métricas na interface do usuário do Stackdriver Metrics Explorer

O código do aplicativo mostra como medir e registrar a latência e as contagens de transações.

Para as métricas, não há amostragem. Todos os valores registrados são incluídos nas representações de métricas. Cada métrica é definida pelo tipo de medição a ser realizada. Neste exemplo, a latência de gravação é registrada em microssegundos:

// The write latency in milliseconds
private static final MeasureDouble M_WRITE_LATENCY_MS = MeasureDouble.create("btapp/write_latency", "The latency in milliseconds for write", "ms");

A distribuição é agregada e armazenada usando estes intervalos: 0 a 5 ms, 5 a 10 m, 10 a 25 ms e assim por diante.

Aggregation latencyDistribution = Distribution.create(BucketBoundaries.create(
        Arrays.asList(
            0.0, 5.0, 10.0, 25.0, 100.0, 200.0, 400.0, 800.0, 10000.0)));
View.create(Name.create("btappmetrics/write_latency"),
            "The distribution of the write latencies",
            M_WRITE_LATENCY_MS,
            latencyDistribution,
            Collections.singletonList(KEY_LATENCY)),

As três métricas (latência de gravação, latência de leitura e contagens de transações) são registradas usando uma única chamada para quem gera o registro:

// record read, write latency metrics and count
STATS_RECORDER.newMeasureMap()
              .put(M_READ_LATENCY_MS, endRead - startRead)
              .put(M_WRITE_LATENCY_MS, endWrite - startWrite)
              .put(M_TRANSACTION_SETS, 1)
              .record();

Analise as métricas capturadas:

  1. No Console do GCP, acesse a página do Metrics Explorer:

    Acessar o Metrics Explorer

  2. No painel de navegação à esquerda, clique em Painéis/Criar painel.

  3. No título do painel, substitua Painel sem título por Métricas do Cloud Bigtable.

  4. No painel de navegação à esquerda, clique em Recursos/Metrics Explorer.

  5. No Metrics Explorer, pesquise as métricas usando Localizar tipo de recurso e métrica. Insira opencensus/btappmetrics/write_latency e clique em Enter.

  6. Na lista na parte superior, selecione Mapa de calor.

    O gráfico de distribuição por mapa de calor será exibido no painel direito.

  7. Clique em Salvar gráfico.

  8. Em Selecionar painel, selecione Métricas do Cloud Bigtable.

  9. Clique em Salvar.

  10. No painel à esquerda, ao lado do rótulo Métrica, clique em ao lado da métrica selecionada.

  11. Repita as etapas para as métricas opencensus/btappmetrics/read_latency e opencensus/btappmetrics/transaction_set_count.

  12. No painel de navegação à esquerda, selecione Painéis/Métricas do Cloud Bigtable.

    Serão exibidos os três gráficos de métricas.

  13. Aumente o zoom selecionando um intervalo de tempo, clicando em um dos gráficos e arrastando o cursor para a borda direita do gráfico.

    Para os mapas de calor, é possível ver mais detalhes sobre a distribuição segurando o cursor sobre os vários blocos coloridos.

    Detalhes da distribuição em mapas de calor.

    O Metrics Explorer exibe um mapa de calor sobre a latência de gravação. Como mostrado na imagem, há 2108 amostras de métricas no intervalo de 5 a 10 ms.

Limpeza

  1. No Console do GCP, acesse a página Projetos.

    Acessar a página Projetos

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir delete.
  3. Na caixa de diálogo, digite o código do projeto e clique em Encerrar para excluí-lo.

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…