Monitorar pipelines do Delta Live Tables

Este artigo descreve o uso de recursos internos de monitoramento e observabilidade para pipelines do Delta Live Tables. Esses recursos dão suporte a tarefas como:

Adicionar notificações por e-mail para eventos de pipeline

Você pode configurar um ou mais endereços de email para receber notificações quando o seguinte ocorrer:

  • Uma atualização de pipeline for concluída com êxito.
  • Falha em uma atualização de pipeline, com um erro com nova tentativa ou não. Selecione essa opção para receber uma notificação de todas as falhas do pipeline.
  • Uma atualização de pipeline falhar com um erro não repetível (fatal). Selecione essa opção para receber uma notificação somente quando ocorrer um erro sem nova tentativa.
  • Um único fluxo de dados falhar.

Para configurar notificações por email ao criar ou editar um pipeline:

  1. Clique em Adicionar notificação.
  2. Insira um ou mais endereços de email para receber notificações.
  3. Clique na caixa de seleção de cada tipo de notificação a ser enviada para os endereços de e-mail configurados.
  4. Clique em Adicionar notificação.

Quais detalhes do pipeline estão disponíveis na interface do usuário?

O gráfico de pipeline é exibido assim que uma atualização de um pipeline é iniciada com êxito. As setas representam dependências entre os conjuntos de dados no pipeline. Por padrão, a página de detalhes do pipeline mostra a atualização mais recente da tabela, mas você pode selecionar atualizações mais antigas em um menu suspenso.

Os detalhes incluem a ID do pipeline, o código-fonte, o custo de computação, a edição do produto e o canal configurado para o pipeline.

Para ver uma exibição tabular de conjuntos de dados, clique na guia Lista. A exibição Lista permite que você veja todos os conjuntos de dados em seu pipeline representados como uma linha em uma tabela e é útil quando o DAG do pipeline é muito grande para visualizar no modo de exibição do Graph. Você pode controlar os conjuntos de dados exibidos na tabela usando vários filtros, como nome, tipo e status do conjunto de dados. Para alternar de volta para a visualização do DAG, clique em Graph.

O usuário em Executar como é o proprietário do pipeline, e as atualizações de pipeline são executadas com as permissões desse usuário. Para alterar o usuário run as, clique em Permissões e altere o proprietário do pipeline.

Como você pode exibir os detalhes do conjunto de dados?

Clicar em um conjunto de dados no gráfico de pipeline ou na lista de conjuntos de dados exibe detalhes sobre o conjunto de dados. Os detalhes incluem o esquema do conjunto de dados, métricas de qualidade de dados e um link para o código-fonte que define o conjunto de dados.

Exibir histórico de atualização

Para exibir o histórico e o status das atualizações de pipeline, clique no menu suspenso de histórico de atualizações na barra superior.

Selecione a atualização no menu suspenso para exibir o gráfico, os detalhes e os eventos de uma atualização. Para retornar à atualização mais recente, clique em Mostrar a atualização mais recente.

O que é o log de eventos do Delta Live Tables?

O log de eventos do Delta Live Tables contém todas as informações relacionadas a um pipeline, incluindo logs de auditoria, verificações de qualidade de dados, progresso do pipeline e linhagem de dados. Use o log de eventos para acompanhar, entender e monitorar o estado dos seus pipelines de dados.

Você pode exibir entradas de log de eventos na interface do usuário do Delta Live Tables, na API do Delta Live Tables ou consultando diretamente o log de eventos. Esta seção se concentra em consultar o log de eventos diretamente.

Você também pode definir ações personalizadas a serem executadas quando os eventos são registrados, por exemplo, enviando alertas, com ganchos de evento.

Esquema de log de eventos

A tabela a seguir descreve o esquema do log de eventos. Alguns desses campos contêm documentos JSON que exigem a análise para execução de algumas consultas, como o campo details. O Azure Databricks dá suporte ao operador : para analisar campos JSON. Confira : operador (colon sign).

Campo Descrição
id Um identificador exclusivo para o registro do log de eventos.
sequence Um documento JSON que contém metadados para identificar e ordenar eventos.
origin Um documento JSON que contém metadados para a origem do evento, por exemplo, o provedor de nuvem, a região do provedor de nuvem, user_id, pipeline_id ou pipeline_type para mostrar onde o pipeline foi criado, seja DBSQL ou WORKSPACE.
timestamp A hora em que o evento foi registrado.
message Uma mensagem legível por humanos que descreve o evento.
level O tipo de evento, por exemplo, INFO, WARN, ERROR ou METRICS.
error Em caso de erro, detalhes que descrevem o erro.
details Um documento JSON que contém detalhes estruturados do evento. Esse é o campo primário usado para analisar eventos.
event_type O tipo de evento.
maturity_level A estabilidade do esquema de evento. Os valores possíveis são:

- STABLE: o esquema é estável e não será alterado.
- NULL: o esquema é estável e não será alterado. O valor poderá ser NULL se o registro tiver sido criado antes da adição do campo maturity_level (versão 2022.37).
- EVOLVING: o esquema não é estável e pode ser alterado.
- DEPRECATED: o esquema foi preterido e o runtime do Delta Live Tables pode parar de produzir esse evento a qualquer momento.

Consultando o log de eventos

O local do log de eventos e a interface para consultar o log de eventos dependem se o pipeline está configurado para usar o metastore do Hive ou o Catálogo do Unity.

Metastore do Hive

Se o pipeline publicar tabelas no metastore do Hive, o log de eventos será armazenado em /system/events no local storage. Por exemplo, se você tiver definido a configuração storage de pipeline como /Users/username/data, o log de eventos será armazenado no caminho /Users/username/data/system/events no DBFS.

Se você não tiver definido a configuração storage, o local padrão do log de eventos será /pipelines/<pipeline-id>/system/events no DBFS. Por exemplo, se a ID do pipeline for 91de5e48-35ed-11ec-8d3d-0242ac130003, o local de armazenamento será /pipelines/91de5e48-35ed-11ec-8d3d-0242ac130003/system/events.

Você pode criar uma exibição para simplificar a consulta do log de eventos. O exemplo a seguir cria uma exibição temporária chamada event_log_raw. Essa exibição é usada nas consultas de log de eventos de exemplo incluídas neste artigo:

CREATE OR REPLACE TEMP VIEW event_log_raw AS SELECT * FROM delta.`<event-log-path>`;

Substitua <event-log-path> pelo local do log de eventos.

Cada instância de uma execução de pipeline é chamada de atualização. Geralmente, você deseja extrair informações para a atualização mais recente. Execute a consulta a seguir para encontrar o identificador da atualização mais recente e salve-o na exibição temporária latest_update_id. Essa exibição é usada nas consultas de log de eventos de exemplo incluídas neste artigo:

CREATE OR REPLACE TEMP VIEW latest_update AS SELECT origin.update_id AS id FROM event_log_raw WHERE event_type = 'create_update' ORDER BY timestamp DESC LIMIT 1;

Você pode consultar o log de eventos em um notebook do Azure Databricks ou no editor SQL. Use um notebook ou o editor SQL para executar as consultas de log de eventos de exemplo.

Catálogo do Unity

Se o pipeline publicar tabelas no Catálogo do Unity, você deverá usar a event_log função com valor de tabela (TVF) para buscar o log de eventos do pipeline. Você recupera o log de eventos de um pipeline passando a ID do pipeline ou um nome de tabela para o TVF. Por exemplo, para recuperar os registros de log de eventos do pipeline com a ID 04c78631-3dd7-4856-b2a6-7d84e9b2638b:

SELECT * FROM event_log("04c78631-3dd7-4856-b2a6-7d84e9b2638b")

Para recuperar os registros de log de eventos do pipeline que criou ou possui a tabela my_catalog.my_schema.table1:

SELECT * FROM event_log(TABLE(my_catalog.my_schema.table1))

Para chamar o TVF, você deve usar um cluster compartilhado ou um SQL warehouse. Por exemplo, você pode usar um notebook anexado a um cluster compartilhado ou usar o editor SQL conectado a um SQL warehouse.

Para simplificar a consulta de eventos de um pipeline, o proprietário do pipeline pode criar uma exibição sobre o TVF event_log. O exemplo a seguir cria uma exibição sobre o log de eventos de um pipeline. Essa exibição é usada nas consultas de log de eventos de exemplo incluídas neste artigo.

Observação

O TVF event_log só pode ser chamado pelo proprietário do pipeline e uma exibição criada no TVF event_log só pode ser consultada pelo proprietário do pipeline. A exibição não pode ser compartilhada com outros usuários.

CREATE VIEW event_log_raw AS SELECT * FROM event_log("<pipeline-ID>");

Substitua <pipeline-ID> pelo identificador exclusivo do pipeline do Delta Live Tables. Você pode encontrar a ID no painel Detalhes do pipeline na interface do usuário do Delta Live Tables.

Cada instância de uma execução de pipeline é chamada de atualização. Geralmente, você deseja extrair informações para a atualização mais recente. Execute a consulta a seguir para encontrar o identificador da atualização mais recente e salve-o na exibição temporária latest_update_id. Essa exibição é usada nas consultas de log de eventos de exemplo incluídas neste artigo:

CREATE OR REPLACE TEMP VIEW latest_update AS SELECT origin.update_id AS id FROM event_log_raw WHERE event_type = 'create_update' ORDER BY timestamp DESC LIMIT 1;

Consultar informações de linhagem do log de evento

Os eventos que contêm informações sobre a linhagem têm o tipo de evento flow_definition. O objeto details:flow_definition contém o output_dataset e input_datasets definindo cada relação no grafo.

Você pode usar a consulta a seguir para extrair os conjuntos de dados de entrada e saída para ver as informações de linhagem:

SELECT
  details:flow_definition.output_dataset as output_dataset,
  details:flow_definition.input_datasets as input_dataset
FROM
  event_log_raw,
  latest_update
WHERE
  event_type = 'flow_definition'
  AND
  origin.update_id = latest_update.id
output_dataset input_datasets
customers null
sales_orders_raw null
sales_orders_cleaned ["customers", "sales_orders_raw"]
sales_order_in_la ["sales_orders_cleaned"]

Consultar a qualidade dos dados do log de eventos

Se você definir expectativas sobre conjuntos de dados em seu pipeline, as métricas de qualidade de dados serão armazenadas no objeto details:flow_progress.data_quality.expectations. Os eventos que contêm informações sobre a qualidade de dados têm o tipo de evento flow_progress. O seguinte exemplo consulta as métricas de qualidade de dados em busca da última atualização do pipeline:

SELECT
  row_expectations.dataset as dataset,
  row_expectations.name as expectation,
  SUM(row_expectations.passed_records) as passing_records,
  SUM(row_expectations.failed_records) as failing_records
FROM
  (
    SELECT
      explode(
        from_json(
          details :flow_progress :data_quality :expectations,
          "array<struct<name: string, dataset: string, passed_records: int, failed_records: int>>"
        )
      ) row_expectations
    FROM
      event_log_raw,
      latest_update
    WHERE
      event_type = 'flow_progress'
      AND origin.update_id = latest_update.id
  )
GROUP BY
  row_expectations.dataset,
  row_expectations.name
dataset expectation passing_records failing_records
sales_orders_cleaned valid_order_number 4083 0

Monitorar a lista de pendências de dados consultando o log de eventos

O Delta Live Tables rastreia quantos dados estão presentes na lista de pendências no objeto details:flow_progress.metrics.backlog_bytes. Os eventos que contêm as métricas de lista de pendências têm o tipo de evento flow_progress. O seguinte exemplo consulta as métricas de lista de pendências em busca da última atualização do pipeline:

SELECT
  timestamp,
  Double(details :flow_progress.metrics.backlog_bytes) as backlog
FROM
  event_log_raw,
  latest_update
WHERE
  event_type ='flow_progress'
  AND
  origin.update_id = latest_update.id

Observação

As métricas da lista de pendências podem não estar disponíveis dependendo do tipo de fonte de dados do pipeline e da versão do Databricks Runtime.

Monitorar eventos de dimensionamento automático aprimorados do log de eventos para pipelines sem sem servidor habilitado

Para pipelines DLT que não usam computação sem servidor, o log de eventos captura redimensionamentos de cluster quando o dimensionamento automático avançado está habilitado em seus pipelines. Os eventos que contêm informações sobre o dimensionamento automático avançado têm o tipo autoscalede evento . As informações da solicitação de redimensionamento do cluster são armazenadas no objeto details:autoscale. O exemplo a seguir consulta as solicitações de redimensionamento de cluster de dimensionamento automático aprimorado para a última atualização de pipeline:

SELECT
  timestamp,
  Double(
    case
      when details :autoscale.status = 'RESIZING' then details :autoscale.requested_num_executors
      else null
    end
  ) as starting_num_executors,
  Double(
    case
      when details :autoscale.status = 'SUCCEEDED' then details :autoscale.requested_num_executors
      else null
    end
  ) as succeeded_num_executors,
  Double(
    case
      when details :autoscale.status = 'PARTIALLY_SUCCEEDED' then details :autoscale.requested_num_executors
      else null
    end
  ) as partially_succeeded_num_executors,
  Double(
    case
      when details :autoscale.status = 'FAILED' then details :autoscale.requested_num_executors
      else null
    end
  ) as failed_num_executors
FROM
  event_log_raw,
  latest_update
WHERE
  event_type = 'autoscale'
  AND
  origin.update_id = latest_update.id

Monitorar a utilização dos recursos de computação

Os eventos cluster_resources fornecem métricas sobre o número de slots de tarefa no cluster, quanto se utiliza esses slots de tarefa e quantas tarefas estão aguardando para serem agendadas.

Quando o dimensionamento automático avançado está ativado, cluster_resources os eventos também contêm métricas para o algoritmo de dimensionamento automático, incluindo latest_requested_num_executors, e optimal_num_executors. Os eventos também mostram o status do algoritmo como estados diferentes, como CLUSTER_AT_DESIRED_SIZE, SCALE_UP_IN_PROGRESS_WAITING_FOR_EXECUTORS e BLOCKED_FROM_SCALING_DOWN_BY_CONFIGURATION. Essas informações podem ser exibidas em conjunto com os eventos de dimensionamento automático para fornecer uma visão geral do dimensionamento automático aprimorado.

O exemplo a seguir consulta o histórico de tamanho da fila de tarefas em busca da última atualização de pipeline:

SELECT
  timestamp,
  Double(details :cluster_resources.avg_num_queued_tasks) as queue_size
FROM
  event_log_raw,
  latest_update
WHERE
  event_type = 'cluster_resources'
  AND
  origin.update_id = latest_update.id

O exemplo a seguir consulta o histórico de utilização em busca da última atualização de pipeline:

SELECT
  timestamp,
  Double(details :cluster_resources.avg_task_slot_utilization) as utilization
FROM
  event_log_raw,
  latest_update
WHERE
  event_type = 'cluster_resources'
  AND
  origin.update_id = latest_update.id

O exemplo a seguir consulta o histórico de contagem de executores, acompanhado por métricas disponíveis apenas para pipelines de dimensionamento automático aprimorados, incluindo o número de executores solicitados pelo algoritmo na solicitação mais recente, o número ideal de executores recomendados pelo algoritmo com base nas métricas mais recentes e o estado do algoritmo de dimensionamento automático:

SELECT
  timestamp,
  Double(details :cluster_resources.num_executors) as current_executors,
  Double(details :cluster_resources.latest_requested_num_executors) as latest_requested_num_executors,
  Double(details :cluster_resources.optimal_num_executors) as optimal_num_executors,
  details :cluster_resources.state as autoscaling_state
FROM
  event_log_raw,
  latest_update
WHERE
  event_type = 'cluster_resources'
  AND
  origin.update_id = latest_update.id

Auditoria de pipelines do Delta Live Tables

Você pode usar os registros de log de eventos do Delta Live Tables e outros logs de auditoria do Azure Databricks para obter uma imagem completa de como os dados estão sendo atualizados no Delta Live Tables.

O Delta Live Tables usa as credenciais do proprietário do pipeline para executar atualizações. Você pode alterar as credenciais usadas atualizando o proprietário do pipeline. O Delta Live Tables registra o usuário para ações no pipeline, incluindo a criação do pipeline, edições na configuração e o disparo de atualizações.

Confira Eventos do Catálogo do Unity para obter uma referência de eventos de auditoria do Catálogo do Unity.

Consultar ações do usuário no log de eventos

Use o log de eventos para auditar eventos, por exemplo, as ações do usuário. Os eventos que contêm informações sobre as ações do usuário têm o tipo de evento user_action.

As informações sobre a ação são armazenadas no objeto user_action no campo details. Use a seguinte consulta para construir um log de auditoria dos eventos de usuário. Para criar a exibição event_log_raw usada nesta consulta, confira Consultando o log de eventos.

SELECT timestamp, details:user_action:action, details:user_action:user_name FROM event_log_raw WHERE event_type = 'user_action'
timestamp action user_name
2021-05-20T19:36:03.517+0000 START user@company.com
2021-05-20T19:35:59.913+0000 CREATE user@company.com
2021-05-27T00:35:51.971+0000 START user@company.com

Informações de runtime

Você pode exibir informações de runtime para uma atualização de pipeline, por exemplo, a versão do Databricks Runtime para a atualização:

SELECT details:create_update:runtime_version:dbr_version FROM event_log_raw WHERE event_type = 'create_update'
dbr_version
11.0