Registro de sessão em uma atividade Copy

APLICA-SE A: Azure Data Factory Azure Synapse Analytics

Dica

Experimente o Data Factory no Microsoft Fabric, uma solução de análise tudo-em-um para empresas. O Microsoft Fabric abrange desde movimentação de dados até ciência de dados, análise em tempo real, business intelligence e relatórios. Saiba como iniciar uma avaliação gratuita!

Você pode registrar os nomes de arquivo copiados em um atividade Copy. Isso pode ajudar a garantir que os dados não sejam apenas copiados com êxito da origem para o destino, mas também validem a consistência entre a origem e o destino.

Quando você habilita a configuração de tolerância a falhas em uma atividade Copy para ignorar dados com falha, as linhas e os arquivos ignorados também podem ser registrados em log. Você pode obter mais detalhes da tolerância a falhas na atividade Copy.

A possibilidade de que todos os nomes de arquivo sejam copiados pela atividade Copy do ADF (Azure Data Factory) por meio da habilitação do log de sessão é útil nos seguintes cenários:

  • Depois de usar as atividades Copy do ADF para copiar os arquivos de um armazenamento para outro, você encontra alguns arquivos inesperados em um armazenamento de destino. Você pode verificar os logs de sessão da atividade Copy para ver qual atividade realmente copiou os arquivos e quando. Com essa abordagem, é possível encontrar a causa raiz e corrigir as configurações no ADF com facilidade.
  • Depois de usar as atividades Copy do ADF para copiar os arquivos de um armazenamento para outro, você verifica que os arquivos copiados para o destino não são os esperados do repositório de origem. Você pode verificar os logs de sessão da atividade Copy para obter o carimbo de data/hora dos trabalhos de cópia e os metadados de arquivos, quando as atividades Copy do ADF as leem a partir do armazenamento de origem. Com essa abordagem, é possível confirmar se os arquivos foram atualizados por outros aplicativos no armazenamento de origem depois de serem copiados pelo ADF.

Configuração com o Studio do Azure Data Factory

Para configurar o registro em log da atividade Copy, primeiro adicione um atividade Copy ao pipeline e, em seguida, use sua guia Configurações para configurar o registro em log e várias opções de registro em log. Shows how to configure logging for a Copy activity in the settings tab.

Para monitorar posteriormente o log, você pode verificar a saída de uma execução de pipeline na guia Monitoramento do ADF Studio em execuções de pipeline. Nessa opção, selecione a execução de pipeline que você deseja monitorar e passe o mouse sobre a área ao lado do Nome da atividade, onde você encontrará ícones para links mostrando a entrada do pipeline, a saída (quando for concluída) e outros detalhes.

Shows how to find the output of a Copy activity in ADF Studio.

Selecione o ícone de saída para ver detalhes do registro em log do trabalho e anote o local de registro em log na conta de armazenamento selecionada, onde é possível ver os detalhes de todas as atividades registradas.

Shows the output of a Copy activity with logging enabled.

Consulte abaixo para obter detalhes do formato de saída do log.

Configuração com JSON

O exemplo a seguir fornece uma definição de JSON para habilitar o registro da sessão na atividade Copy:

{
  "name": "CopyActivityLog",
  "type": "Copy",
  "typeProperties": {
    "source": {
      "type": "BinarySource",
      "storeSettings": {
        "type": "AzureDataLakeStoreReadSettings",
        "recursive": true
      },
      "formatSettings": {
        "type": "BinaryReadSettings"
      }
    },
    "sink": {
      "type": "BinarySink",
      "storeSettings": {
        "type": "AzureBlobFSWriteSettings"
      }
    },
    "skipErrorFile": {
      "fileForbidden": true,
      "dataInconsistency": true
    },
    "validateDataConsistency": true,
    "logSettings": {
      "enableCopyActivityLog": true,
      "copyActivityLogSettings": {
        "logLevel": "Warning",
        "enableReliableLogging": false
      },
      "logLocationSettings": {
        "linkedServiceName": {
          "referenceName": "ADLSGen2",
          "type": "LinkedServiceReference"
        },
        "path": "sessionlog/"
      }
    }
  }
}
Propriedade Descrição Valores permitidos Obrigatório
enableCopyActivityLog Quando definido como true, você terá a oportunidade de registrar arquivos copiados, arquivos ignorados ou linhas ignoradas. True
False (padrão)
Não
logLevel “Info” registrará em log todos os arquivos copiados, arquivos ignorados e linhas ignoradas. “Aviso” registrará em log somente arquivos ignorados e linhas ignoradas. Info
Aviso (padrão)
Não
enableReliableLogging Quando for true, a atividade Copy em modo confiável libera os registros imediatamente depois que cada arquivo for copiado para o destino. Ao copiar muitos arquivos com o modo de log confiável habilitado na atividade Copy, você deve esperar que a taxa de transferência seja afetada, uma vez que as operações de gravação dupla são necessárias para cada arquivo copiado. Uma solicitação é para o repositório de destino e outra é para o repositório de armazenamento de registro. Uma atividade Copy no modo de melhor esforço limpará os registros com o lote de registros em um período e a taxa de transferência de cópia será muito menos afetada. A integridade e a pontualidade do registro em log não são garantidas nesse modo, pois há algumas possibilidades de que o último lote de eventos de log não tenha sido liberado para o arquivo de log quando a atividade Copy falhou. Neste cenário, você verá que alguns arquivos copiados para o destino não foram registrados. True
False (padrão)
Não
logLocationSettings Um grupo de propriedades que pode ser utilizado para especificar o local para armazenar os registros de sessão. Não
linkedServiceName O serviço vinculado do Armazenamento de Blobs do Azure ou Azure Data Lake Storage Gen2 para armazenar os arquivos de log da sessão. O nome de um serviço vinculado AzureBlobStorage ou AzureBlobFS, que se refere à instância de armazenamento que você usa para armazenar os arquivos de log. Não
caminho O caminho dos arquivos de log. Especifique o caminho que você quer armazenar os arquivos de log. Se você não fornecer um caminho, o serviço criará um contêiner para você. Não

Monitoramento

Saída de uma atividade Copy

Depois que a atividade Copy for executada completamente, você poderá ver o caminho dos arquivos de log a partir da saída de cada execução de atividade Copy. Você pode encontrar os arquivos de log do caminho: https://[your-blob-account].blob.core.windows.net/[logFilePath]/copyactivity-logs/[copy-activity-name]/[copy-activity-run-id]/[auto-generated-GUID].txt. Os arquivos de log gerados têm a extensão TXT, e os dados deles estão no formato CSV.

"output": {
            "dataRead": 695,
            "dataWritten": 186,
            "filesRead": 3,  
            "filesWritten": 1, 
            "filesSkipped": 2, 
            "throughput": 297,
            "logFilePath": "myfolder/a84bf8d4-233f-4216-8cb5-45962831cd1b/",
            "dataConsistencyVerification": 
           { 
                "VerificationResult": "Verified", 
                "InconsistentData": "Skipped" 
           } 
        }

Observação

Quando a propriedade enableCopyActivityLog é definida como Enabled, os nomes de arquivos de log são gerados pelo sistema.

O esquema do arquivo de log

A tabela a seguir mostra o esquema de um arquivo de log.

Coluna Descrição
Timestamp O carimbo de data/hora quando o ADF lê, grava ou ignora o objeto.
Nível O nível de log deste item. Pode ser “Aviso” ou “Info”.
OperationName Comportamento operacional da atividade Copy do ADF em cada objeto. Pode ser “FileRead”, “FileWrite”, “FileSkip” ou “TabularRowSkip”.
OperationItem Os nomes de arquivo ou as linhas ignoradas.
Mensagem Mais informações para mostrar se o arquivo foi lido do repositório de origem ou gravado no repositório de destino. Também pode ser o motivo pelo qual o arquivo ou as linhas estão sendo ignorados.

Segue abaixo um exemplo de um arquivo de log:

Timestamp, Level, OperationName, OperationItem, Message
2020-10-19 08:39:13.6688152,Info,FileRead,"sample1.csv","Start to read file: {""Path"":""sample1.csv"",""ItemType"":""File"",""Size"":104857620,""LastModified"":""2020-10-19T08:22:31Z"",""ETag"":""\""0x8D874081F80C01A\"""",""ContentMD5"":""dGKVP8BVIy6AoTtKnt+aYQ=="",""ObjectName"":null}"
2020-10-19 08:39:56.3190846, Warning, FileSkip, "sample1.csv", "File is skipped after read 548000000 bytes: ErrorCode=DataConsistencySourceDataChanged,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Source file 'sample1.csv' is changed by other clients during the copy activity run.,Source=,'." 
2020-10-19 08:40:13.6688152,Info,FileRead,"sample2.csv","Start to read file: {""Path"":""sample2.csv"",""ItemType"":""File"",""Size"":104857620,""LastModified"":""2020-10-19T08:22:31Z"",""ETag"":""\""0x8D874081F80C01A\"""",""ContentMD5"":""dGKVP8BVIy6AoTtKnt+aYQ=="",""ObjectName"":null}"
2020-10-19 08:40:13.9003981,Info,FileWrite,"sample2.csv","Start to write file from source file: sample2.csv."
2020-10-19 08:45:17.6508407,Info,FileRead,"sample2.csv","Complete reading file successfully. "
2020-10-19 08:45:28.7390083,Info,FileWrite,"sample2.csv","Complete writing file from source file: sample2.csv. File is successfully copied."

No arquivo de log acima, você pode ver que sample1.csv foi ignorado porque ele não pôde ser verificado para ser consistente entre o repositório de origem e de destino. Você pode obter mais detalhes sobre por que o sample1.csv se torna inconsistente: ele estava sendo alterado por outros aplicativos quando a atividade Copy do ADF estava sendo copiada ao mesmo tempo. Você também pode ver que sample2.csv foi copiado com êxito do repositório de origem para o de destino.

Você pode usar vários mecanismos de análise para analisar ainda mais os arquivos de log. Há alguns exemplos abaixo para usar a consulta SQL para analisar o arquivo de log importando o arquivo de log CSV para o banco de dados SQL em que o nome da tabela pode ser SessionLogDemo.

  • Forneça a lista de arquivos copiados.
select OperationItem from SessionLogDemo where Message like '%File is successfully copied%'
  • Forneça a lista de arquivos copiados em um intervalo de tempo específico.
select OperationItem from SessionLogDemo where TIMESTAMP >= '<start time>' and TIMESTAMP <= '<end time>' and Message like '%File is successfully copied%'
  • Forneça um arquivo específico com o tempo e metadados copiados.
select * from SessionLogDemo where OperationItem='<file name>'
  • Forneça uma lista de arquivos com os metadados copiados dentro de um intervalo de tempo.
select * from SessionLogDemo where OperationName='FileRead' and Message like 'Start to read%' and OperationItem in (select OperationItem from SessionLogDemo where TIMESTAMP >= '<start time>' and TIMESTAMP <= '<end time>' and Message like '%File is successfully copied%')
  • Forneça a lista de arquivos ignorados.
select OperationItem from SessionLogDemo where OperationName='FileSkip'
  • Forneça o motivo pelo qual um arquivo específico foi ignorado.
select TIMESTAMP, OperationItem, Message from SessionLogDemo where OperationName='FileSkip'
  • Forneça a lista de arquivos ignorados devido ao mesmo motivo: “o arquivo de blob não existe”.
select TIMESTAMP, OperationItem, Message from SessionLogDemo where OperationName='FileSkip' and Message like '%UserErrorSourceBlobNotExist%'
  • Forneça o nome do arquivo que requer o tempo mais longo para copiar.
select top 1 OperationItem, CopyDuration=DATEDIFF(SECOND, min(TIMESTAMP), max(TIMESTAMP)) from SessionLogDemo group by OperationItem order by CopyDuration desc

Consulte os outros artigos sobre atividade de cópia: