Como usar a interface de monitoramento do Dataflow

Quando você executa o pipeline usando o serviço gerenciado do Dataflow, é possível visualizar todos os jobs usando a interface do usuário de monitoramento do Dataflow baseada na Web. A interface de monitoramento permite visualizar e interagir com suas tarefas do Dataflow.

É possível acessar a interface de monitoramento do Dataflow usando o Console do Google Cloud. A interface de monitoramento mostra:

  • Uma lista de todos os jobs do Dataflow em andamento e já executados nos últimos 30 dias;
  • uma representação gráfica de cada pipeline;
  • detalhes do status, execução e versão do SDK do job;
  • links para informações sobre os serviços do Google Cloud executando seu pipeline, como o Compute Engine e o Cloud Storage;
  • quaisquer erros ou avisos que ocorrem durante um job.
  • Diagnósticos adicionais para um job.

É possível visualizar os gráficos de monitoramento de jobs na interface de monitoramento do Dataflow. Esses gráficos exibem métricas ao longo da duração de um job de pipeline e incluem as seguintes informações:

  • Visibilidade em nível de etapa para ajudar a identificar quais etapas podem estar causando atraso no pipeline.
  • Informações estatísticas que podem apresentar comportamento anômalo.
  • Métricas de E/S que podem ajudar a identificar os gargalos nas suas fontes e coletas.

Como acessar a interface de monitoramento do Dataflow

Para acessar a interface de monitoramento do Dataflow, siga estas etapas:

  1. Fazer login no Console do Cloud.
  2. Selecione seu projeto do Google Cloud.
  3. Clique no menu no canto superior esquerdo.
  4. Acesse a seção Big Data e clique em Dataflow.

Uma lista de jobs do Dataflow é exibida junto com o status deles. Se você não vir nenhum job, precisará executar um novo. Para saber como executar um job, consulte o guia de início rápido do Dataflow.

Uma lista de jobs do Cloud Dataflow nos estados em execução, com falha e com êxito.
Figura 1: uma lista de jobs do Dataflow no Console do Cloud com os status em exibição, com falha e concluído.

Um job pode ter os seguintes status:

  • : a IU de monitoramento ainda não recebeu um status do serviço Dataflow.
  • Em execução: o job está sendo executado no momento.
  • Iniciando...: o job é criado, mas o sistema precisa de tempo para se preparar antes da inicialização.
  • Em fila: um job do FlexRS que entrou na fila.
  • Cancelando...: o job está sendo cancelado.
  • Cancelado: o job que foi cancelado pelo usuário.
  • Drenando...: o job está sendo drenado.
  • Drenado: o usuário drenou o job.
  • Atualizando...: o job está sendo atualizado.
  • Atualizado: o usuário atualizou o job.
  • Com êxito: o job foi concluído com sucesso.
  • Com falha: o job não foi concluído.

Para mais informações sobre um pipeline, clique no Nome do job.

Como acessar gráficos de monitoramento de jobs

Para acessar os gráficos de monitoramento de um job, clique no job Nome na interface de monitoramento do Dataflow. Navegue até a página Detalhes do job, que contém o seguinte:

  • Gráfico do job: a representação visual do pipeline
  • Métricas do job: métricas sobre a execução do job
  • Painel de informações do Job: informações descritivas sobre seu pipeline
  • Registros do job: registros gerados pelo serviço Dataflow no nível do job
  • Logs do worker: registros gerados pelo serviço do Dataflow no nível do worker
  • Diagnóstico: tabela que mostra onde ocorreram erros ao longo do cronograma escolhido e possíveis recomendações para o pipeline
  • Seletor de tempo: ferramenta que permite ajustar o período de suas métricas

Na página Detalhes do job, é possível alternar a visualização de jobs com as guias gráfico do Job e métricas do Job.

Visualização da IU de monitoramento do Dataflow com a guia gráfico do Job selecionada. Neste modo,
é possível visualizar o gráfico do pipeline, as informações e registros do Job, os registros do worker, diagnósticos
e a ferramenta de seleção de tempo.

Visualização da IU de monitoramento do Dataflow com a guia "métricas do Job" selecionada.
Neste modo, é possível visualizar os gráficos de métricas do Job, as informações e os registros do Job, os registros do worker, diagnósticos
e a ferramenta de seleção de horário.

Como criar alertas do Cloud Monitoring

O Dataflow é totalmente integrado ao Cloud Monitoring, o que permite criar alertas para quando seu job exceder um limite definido pelo usuário. Para criar um alerta do Cloud Monitoring a partir de um gráfico de métricas, clique em Criar política de alertas.

O link **Criar política de alertas** permite criar um alerta de um gráfico de métricas.

Para mais instruções sobre como criar esses alertas, leia a página Como usar o Cloud Monitoring para pipelines do Dataflow.

Modo tela cheia

Para visualizar um gráfico de métricas em tela cheia, clique em .

Como usar a ferramenta de seleção de horário

É possível ajustar o período das métricas com a ferramenta de seleção de horário. É possível selecionar uma duração predefinida ou um intervalo de tempo personalizado para analisar seu job.

A ferramenta de seleção de horário permite que você selecione um intervalo de tempo usando incrementos de hora e dias ou um período personalizado.

Para jobs em lote de streaming ou durante a veiculação, a exibição padrão dos gráficos mostra as seis horas anteriores de métricas desse job. Para jobs de fluxo interrompido ou concluídos, a exibição padrão dos gráficos mostra todo o ambiente de execução da duração do job.

Métricas da etapa e do worker

É possível visualizar os gráficos das seguintes métricas:

  • Atualização de dados (somente streaming de pipelines)
  • Latência do sistema (somente pipelines de streaming)
  • Escalonamento automático
  • Capacidade
  • Uso da CPU
  • Contagem do registro de erros do worker
  • Métricas de entrada e saída

Para acessar mais informações nesses gráficos, clique no botão de alternância para "Expandir legenda de gráfico".

O botão para ativar as legendas está localizado próximo ao botão
"Criar política de alertas".

Atualização de dados (somente streaming de pipelines)

A atualização de dados é a quantidade de tempo entre o tempo real e a marca d'água de saída. Cada etapa do pipeline tem uma marca-d'água de dados de saída. Uma marca-d'água de dados de saída de T indica que a computação processou todos os elementos com um tempo de evento anterior a T. A marca-d'água de dados de saída é limitada acima pela primeira marca-d'água de dados de entrada de todos as computações upstream. Se alguns dados de entrada ainda não foram processados, a marca-d'água de saída talvez seja retida, o que afeta a atualização de dados.

Uma visualização de dados que mostra a atualização de dados em um
pipeline de streaming.

Latência do sistema (somente pipelines de streaming)

A latência do sistema é a duração máxima atual que um item de dados estava sendo processado ou esperando por processamento. Essa métrica indica quanto tempo em segundos um elemento aguarda dentro de qualquer fonte no pipeline. A duração máxima é ajustada após o processamento. Os casos a seguir são considerações extras:

  • Se houver várias fontes e coletores, a latência do sistema será o maior tempo que um elemento aguarda dentro de uma fonte antes de ser gravado em todos os coletores.
  • Se uma fonte não fornecer um valor para o tempo de espera de um elemento dentro da fonte e esse elemento não tiver metadados para definir o tempo de evento, a latência do sistema será calculada a partir do momento em que o pipeline receber o elemento pela primeira vez.

Uma visualização de dados que mostra a latência do sistema em um
pipeline de streaming.

Escalonamento automático

O serviço Dataflow escolhe automaticamente o número de instâncias de worker obrigatórias na execução do job de escalonamento automático. O número de instâncias de worker pode mudar ao longo do tempo de acordo com as necessidades do job.

Uma visualização de dados que mostra o número de workers em um pipeline.

Para ver o histórico das alterações de escalonamento automático, clique no botão Mais histórico. Uma tabela com informações sobre o histórico de worker do pipeline será exibida abaixo do gráfico.

Tabela mostrando o histórico de worker do pipeline.

Capacidade

A capacidade é o volume de dados processados a qualquer momento. Essa métrica por etapa é exibida como um número de elementos por segundo. Para visualizar essa métrica em bytes por segundo, clique em Capacidade (elementos por segundo) > Capacidade (bytes por segundo).

Uma visualização de dados que mostra a capacidade de quatro etapas em um pipeline.

Uso da CPU

O uso da CPU é a quantidade de CPU usada dividida pela quantidade de CPU disponível para processamento. Essa métrica por worker é exibida como uma porcentagem.

Uma visualização de dados que mostra a utilização da CPU é um worker
do Dataflow.

Métricas de entrada e saída

Métricas de entrada e saída são exibidas se o job de streaming do Dataflow tiver registros de leitura ou gravação usando Pub/Sub.

Por padrão, todas as métricas de entrada são combinadas e todas as métricas de saída são combinadas. Para alterar as métricas exibidas, há um menu suspenso de filtro em cada seção. As imagens a seguir mostram todos os filtros disponíveis.

O menu suspenso de filtro disponível para as métricas de entrada de um job do Dataflow. O menu suspenso de filtro disponível para as métricas de saída de um job do Dataflow.

Os três gráficos a seguir são exibidos nas seções Métricas de entrada e Métricas de saída.

Uma série de gráficos que mostra métricas de entrada e saída para um job de streaming do Dataflow.

Solicitações por segundo

Solicitações por segundo é a taxa de solicitações de API para ler ou gravar dados pela origem ou coletor ao longo do tempo. Se essa taxa cair para zero ou diminuir significativamente por um período prolongado inesperado, é provável que o pipeline esteja bloqueado devido à execução de determinadas operações (ou que não haja dados para leitura). Revise as etapas do sistema com alta marca d'água. Além disso, examine os registros de worker para verificar se há erros ou indicações de que o processamento está lento.

Gráfico que mostra o número de solicitações de API para ler ou gravar dados pela origem ou coletor ao longo do tempo.

Erros de resposta por segundo de acordo com o tipo de erro

A taxa de erros de resposta por segundo pelo tipo de erro é a taxa de solicitações de API com falha para ler ou gravar dados pela origem ou pelo coletor ao longo do tempo. Caso haja erros frequentes e repetidos, o processamento dessas solicitações de API pode atrasar o processamento e deve ser investigado. Para ajudar a resolver esses problemas, consulte a documentação geral do código de erro de E/S e qualquer documentação de código de erro específica usada pela origem ou pelo coletor, como os códigos de erro do Pub/Sub. para criar um anexo da VLAN de monitoramento.

Gráfico que mostra a taxa de falhas de solicitação de API para ler ou gravar dados pela origem ou coletor ao longo do tempo.

Como usar o Metrics Explorer

É possível visualizar as seguintes métricas de E/S do Dataflow no Metrics Explorer:

  • job/pubsub/write_count: solicitações de publicação do Pub/Sub de PubsubIO.Write em jobs do Dataflow.
  • job/pubsub/read_count: solicitações de envio do Pub/Sub de Pubsub.IO.Read em jobs do Dataflow.
  • job/bigquery/write_count: solicitações de publicação do BigQuery do BigQueryIO.Write em jobs do Dataflow.
    • As métricas job/bigquery/write_count estão disponíveis em pipelines do Python usando a transformação WriteToBigQuery com method='STREAMING_INSERTS' ativado no Apache Beam v2.28.0 ou posterior.

Para acessar a lista completa de métricas do Dataflow, consulte a documentação sobre métricas do Google Cloud.

Como visualizar um pipeline

Quando você seleciona um job específico do Dataflow, a interface de monitoramento mostra informações detalhadas sobre o pipeline desse job. Essas informações incluem uma representação gráfica do seu pipeline à medida que ele é executado no serviço Dataflow, além de um resumo e registro do job e informações detalhadas sobre cada etapa do pipeline.

A interface de monitoramento do Dataflow fornece uma representação gráfica do pipeline: o gráfico de execução. O gráfico de execução de um pipeline representa cada transformação no pipeline como uma caixa. Cada caixa contém o nome da transformação e as informações sobre o status do job, que incluem o seguinte:

  • Em execução: a etapa está sendo executada atualmente.
  • Em fila: a etapa em que um job do FlexRS entra na fila.
  • Com êxito: a etapa foi concluída com sucesso.
  • Parado: a etapa foi interrompida porque o job parou.
  • Desconhecido: a etapa falhou ao informar o status.
  • Com falha: a etapa não foi concluída.

Gráfico de execução básica

Código do pipeline:

Java: SDK 2.x


  // Read the lines of the input text.
  p.apply("ReadLines", TextIO.read().from(options.getInputFile()))
     // Count the words.
     .apply(new CountWords())
     // Write the formatted word counts to output.
     .apply("WriteCounts", TextIO.write().to(options.getOutput()))
         .to(options.getOutput()));

Python


(
    p
    # Read the lines of the input text.
    | 'ReadLines' >> beam.io.ReadFromText(options.input)
    # Count the words.
    | CountWords()
    # Write the formatted word counts to output.
    | 'WriteCounts' >> beam.io.WriteToText(options.output))

Java: SDK 1.x

Gráfico de execução:

O gráfico de execução de um pipeline WordCount, conforme mostrado na interface de monitoramento do Cloud Dataflow.

Figura 2: o código de um pipeline WordCount mostrado lado a lado com o gráfico de execução resultante na interface de monitoramento do Dataflow.

Transformações compostas

No gráfico de execução, as transformações compostas (aquelas que contêm várias subtransformações aninhadas) são expansíveis. Transformações compostas expansíveis são marcadas com uma seta no gráfico. Clique na seta para expandir a transformação e visualizar as subtransformações internas.

Código do pipeline:

Java: SDK 2.x


  // The CountWords Composite Transform
  // inside the WordCount pipeline.

  public static class CountWords
    extends PTransform<PCollection<String>, PCollection<String>> {

    @Override
    public PCollection<String> apply(PCollection<String> lines) {

      // Convert lines of text into individual words.
      PCollection<String> words = lines.apply(
        ParDo.of(new ExtractWordsFn()));

      // Count the number of times each word occurs.
      PCollection<KV<String, Long>> wordCounts =
        words.apply(Count.<String>perElement());

      return wordCounts;
    }
  }

Observação: na imagem à direita, FormatCounts não é relevante neste SDK.

Python


# The CountWords Composite Transform inside the WordCount pipeline.
class CountWords(beam.PTransform):
  def expand(self, pcoll):
    return (
        pcoll
        # Convert lines of text into individual words.
        | 'ExtractWords' >> beam.ParDo(ExtractWordsFn())
        # Count the number of times each word occurs.
        | beam.combiners.Count.PerElement()
        # Format each word and count into a printable string.
        | 'FormatCounts' >> beam.ParDo(FormatCountsFn()))

Java: SDK 1.x

Gráfico de execução:

O gráfico de execução de um pipeline WordCount com CountWords expandida para mostrar as transformações dos componentes.

Figura 3: o código do pipeline para as subetapas da transformação CountWords, mostradas lado a lado com o gráfico de execução expandido para todo o pipeline.

Nomes de transformação

O Dataflow tem algumas maneiras diferentes para chegar ao nome da transformação mostrado no gráfico de execução de monitoramento:

Java: SDK 2.x

  • O Dataflow pode usar um nome já atribuído quando você aplica a transformação. O primeiro argumento fornecido para o método apply será o nome da transformação.
  • O Dataflow pode inferir o nome da transformação, seja do nome da classe, se você criou uma transformação personalizada, ou do nome do objeto de função DoFn, se você estiver usando uma transformação básica, como ParDo.

Python

  • O Dataflow pode usar um nome já atribuído quando você aplica a transformação. Para definir o nome da transformação, especifique o argumento label dela.
  • O Dataflow pode inferir o nome da transformação, seja do nome da classe, se você criou uma transformação personalizada, ou do nome do objeto de função DoFn, se você estiver usando uma transformação básica, como ParDo.

Java: SDK 1.x

Como interpretar as métricas

Tempo decorrido

Quando você clica em uma etapa, a métrica de Tempo decorrido é exibida. Esta métrica fornece o tempo total aproximado gasto por meio de todas as linhas de execução em todos os workers nas ações a seguir:

  • Inicialização da etapa
  • Processamento dos dados
  • Embaralhamento dos dados
  • Finalização da etapa

Para etapas compostas, o tempo decorrido informa a soma do tempo gasto nas etapas do componente. Essa estimativa pode ajudar a identificar etapas lentas e diagnosticar qual parte do pipeline está demorando mais tempo do que o necessário.

É possível ver a quantidade de tempo necessária para executar uma etapa no pipeline.
Figura 4: a métrica Tempo decorrido ajuda a garantir que o pipeline esteja funcionando de maneira eficiente.

Consulte Noções básicas sobre tempo nos pipelines do Dataflow (em inglês) para ver um exemplo que usa a métrica Tempo decorrido (anteriormente chamada de Tempo total de execução) para investigar o que está causando um tempo de execução do pipeline maior do que o esperado.

Métricas de entrada secundária

As métricas de entrada secundária mostram como os algoritmos e os padrões de acesso de entradas secundárias (em inglês) afetam o desempenho do pipeline. Quando o pipeline usa uma entrada secundária, o Dataflow grava a coleção em uma camada permanente (como um disco) e as transformações são lidas nessa coleção permanente. Essas leituras e gravações afetam o tempo de execução do job.

A interface de monitoramento do Dataflow exibe métricas de entrada secundária quando você seleciona uma transformação que cria ou consome uma coleção de entrada secundária. É possível ver as métricas na seção Métricas de entrada secundária da guia Etapa.

Transformações que criam uma entrada secundária

Se a transformação selecionada criar uma coleção de entrada secundária, a seção Métricas de entrada secundária exibirá o nome da coleção, junto com as seguintes métricas:

  • Tempo gasto na gravação: o tempo de execução gasto gravando a coleção de entrada secundária.
  • Bytes gravados: o número total de bytes gravados na coleção de entrada secundária.
  • Tempo de leitura da entrada secundária e bytes lidos: uma tabela que contém outras métricas para todas as transformações que consomem a coleção de entradas secundárias, chamadas de consumidores de entrada secundária.

A tabela Tempo de leitura da entrada secundária e bytes lidos exibe as seguintes informações para cada consumidor de entrada secundária:

  • Consumidor de entrada secundária: o nome da transformação do consumidor de entrada secundária.
  • Tempo gasto lendo: o tempo que esse consumidor gastou lendo a coleção de entrada secundária.
  • Bytes lidos: o número de bytes que este consumidor leu da coleção de entrada secundária.

Se o pipeline tiver uma transformação composta que crie uma entrada secundária, expanda a transformação composta até que a subtransformação específica que cria a entrada secundária esteja visível. Depois, selecione essa subtransformação para visualizar a seção Métricas de entrada secundária.

A Figura 5 mostra as métricas de entrada secundária de uma transformação que cria uma coleção de entrada secundária.

Selecione a subtransformação. Assim, as métricas de entrada secundária estarão
          visíveis no painel lateral de informações da etapa.
Figura 5: o gráfico de execução tem uma transformação composta expandida (MakeMapView). A subtransformação que cria a entrada secundária (CreateDataflowView) está selecionada e as métricas de entrada secundária podem ser visualizadas no painel lateral Informações da etapa.

Transformações que consomem uma ou mais entradas secundárias

Se a transformação selecionada consumir uma ou mais entradas secundárias, a seção Métricas de entrada secundária exibirá a tabela Tempo de leitura da entrada secundária e bytes lidos. Nesta tabela, as seguintes informações para cada coleção de entrada secundária são exibidas:

  • Coleção de entrada secundária: o nome da coleção de entrada secundária.
  • Tempo gasto na leitura: o tempo que a transformação gastou lendo a coleção de entrada secundária.
  • Bytes lidos: o número de bytes que a transformação leu da coleção de entrada secundária.

Se o pipeline tiver uma transformação composta que crie uma entrada secundária, expanda a transformação composta até que a subtransformação específica que lê a entrada secundária esteja visível. Depois, selecione essa subtransformação para visualizar a seção Métricas de entrada secundária.

A Figura 6 mostra as métricas de entrada secundária de uma transformação que lê uma coleção de entrada secundária.

Selecione a transformação. Assim, as métricas de entrada secundária estarão
         visíveis no painel lateral de informações da etapa.
Figura 6: a transformação JoinBothCollections faz leituras em uma coleção de entradas secundárias. JoinBothCollections está selecionada no gráfico de execução e as métricas de entrada secundária podem ser visualizadas no painel lateral Informações da etapa.

Como identificar problemas de desempenho de entrada secundária

A reiteração é um problema comum de desempenho da entrada secundária. Se a entrada secundária PCollection for muito grande, os workers não poderão armazenar em cache a coleção inteira na memória. Como resultado, os workers leem repetidamente a coleção de entrada secundária permanente.

Na figura 7, as métricas de entrada secundária mostram que o total de bytes lidos da coleção de entrada secundária é muito maior que o tamanho da coleção (total de bytes gravados).

Selecione a transformação. Assim, as métricas de entrada secundária estarão
         visíveis no painel lateral de informações da etapa.
Figura 7: um exemplo de reiteração. A coleção de entradas secundárias é de 563 MB e a soma dos bytes lidos por transformações de consumo é de quase 12 GB.

Para melhorar o desempenho desse pipeline, recrie o algoritmo para evitar iterar ou refazer os dados de entrada secundária. Neste exemplo, o pipeline cria o produto cartesiano de duas coleções. O algoritmo itera toda a coleção de entrada secundária para cada elemento da coleção principal. Você pode melhorar o padrão de acesso do pipeline ao agrupar vários elementos da coleção principal. Essa alteração reduz o número de vezes que os workers releem a coleção de entrada secundária.

Outro problema comum de desempenho pode ocorrer se o pipeline executar uma mesclagem aplicando uma ParDo com uma ou mais entradas secundárias grandes. Nesse caso, os workers dedicam uma grande porcentagem do tempo de execução da junção lendo as coleções de entrada secundária.

A Figura 8 mostra um exemplo de métricas de entrada secundária para esse problema:

Selecione a transformação. Assim, as métricas de entrada secundária estarão
         visíveis no painel lateral de informações da etapa.
Figura 8: a transformação JoinBothCollections tem um tempo de execução total de 18 minutos e 31 segundos. Os workers passam a maior parte desse tempo (10 minutos e 3 segundos) na leitura da coleção de entradas secundárias de 10 GB.

Para melhorar o desempenho desse canal, use CoGroupByKey em vez de entradas secundárias.

Error Reporting

A interface do Error Reporting agrega e exibe erros produzidos nos pipelines.

O relatório de erros inclui:

  • uma lista de erros com mensagens de erro;
  • o número de vezes que ocorreu cada erro;
  • um histograma indicando quando ocorreu cada erro;
  • a hora em que o erro ocorreu recentemente.

Para visualizar o relatório de erros do seu pipeline, clique no menu Registros acima do gráfico de pipeline e, em seguida, na guia Rastreamentos de pilha abaixo do gráfico de pipeline. Na interface de monitoramento do Dataflow, você verá um resumo de cada erro registrado e o número de ocorrências.

Os painéis contagem de registros de erros do worker mostram a taxa de erros observada em todos os workers a qualquer momento.

Um resumo de cada erro registrado e o número de ocorrências.

Para mais informações sobre os erros, clique em um resumo de erros. Você será direcionado à interface do Error Reporting.

Mais informações sobre os erros na interface do Error Reporting.

A interface do Error Reporting oferece recursos adicionais. Consulte Como visualizar erros para mais informações sobre os erros produzidos pelos seus pipelines.