Sitzungsprotokoll in einer Copy-Aktivität

GILT FÜR: Azure Data Factory Azure Synapse Analytics

Tipp

Testen Sie Data Factory in Microsoft Fabric, eine All-in-One-Analyselösung für Unternehmen. Microsoft Fabric deckt alle Aufgaben ab, von der Datenverschiebung bis hin zu Data Science, Echtzeitanalysen, Business Intelligence und Berichterstellung. Erfahren Sie, wie Sie kostenlos eine neue Testversion starten!

Sie können die kopierten Dateienamen in einer Copy-Aktivität protokollieren. Dadurch kann nicht nur sichergestellt werden, dass Daten erfolgreich von der Quelle an das Ziel kopiert werden, sondern auch die Konsistenz zwischen Quelle und Ziel überprüft werden.

Wenn Sie die Fehlertoleranzeinstellung in einer Copy-Aktivität aktivieren, um fehlerhafte Daten zu überspringen, können auch die übersprungenen Dateien und die übersprungenen Zeilen protokolliert werden. Weitere Informationen finden Sie unter Fehlertoleranz der Kopieraktivität.

Wenn Sie die Möglichkeit haben, alle von der ADF-Copy-Aktivität (Azure Data Factory) kopierten Dateinamen durch Aktivieren des Sitzungsprotokolls zu erhalten, ist dies in den folgenden Szenarien hilfreich:

  • Nachdem Sie die Dateien mithilfe von ADF-Copy-Aktivitäten von einem Speicher in einen anderen Speicher kopiert haben, befinden sich einige unerwartete Dateien im Zielspeicher. Anhand der Sitzungsprotokolle der Copy-Aktivität können Sie ermitteln, wann und von welcher Aktivität die Dateien tatsächlich kopiert wurden. Dadurch können Sie mühelos die Grundursache ermitteln und Ihre Konfigurationen in ADF korrigieren.
  • Nachdem Sie die Dateien mithilfe von ADF-Copy-Aktivitäten von einem Speicher in einen anderen Speicher kopiert haben, stellen Sie fest, dass es sich bei den kopierten Dateien am Ziel nicht um erwartete Dateien aus dem Quellspeicher handelt. Anhand der Sitzungsprotokolle der Copy-Aktivität können Sie den Zeitstempel von Kopieraufträgen sowie die Metadaten von Dateien abrufen, wenn sie von ADF-Copy-Aktivitäten aus dem Quellspeicher gelesen werden. Dadurch können Sie überprüfen, ob die Dateien von anderen Anwendungen im Quellspeicher aktualisiert wurden, nachdem sie von ADF kopiert wurden.

Konfiguration mit Azure Data Factory Studio

Um die Protokollierung der Copy-Aktivität konfigurieren zu können, müssen Sie Ihrer Pipeline zunächst eine Copy-Aktivität hinzufügen. Anschließend können Sie die Registerkarte „Einstellungen“ verwenden, um die Protokollierung und verschiedene Protokollierungsoptionen zu konfigurieren. Shows how to configure logging for a Copy activity in the settings tab.

Für die anschließende Überwachung des Protokolls können Sie die Ausgabe einer Pipelineausführung auf der Registerkarte „Überwachung“ von ADF Studio unter „Pipelineausführungen“ überprüfen. Wählen Sie dort die zu überwachende Pipelineausführung aus, und zeigen Sie dann auf den Bereich neben dem Aktivitätsnamen. Dort finden Sie Symbole für Links zum Anzeigen der Pipelineeingabe, der Ausgabe (nach Abschluss) und anderer Details.

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

Wählen Sie das Ausgabesymbol aus, um Details zur Protokollierung für den Auftrag anzuzeigen, und beachten Sie den Protokollspeicherort im ausgewählten Speicherkonto. Dort finden Sie Details zu allen protokollierten Aktivitäten.

Shows the output of a Copy activity with logging enabled.

Details zum Protokollausgabeformat finden Sie weiter unten.

Konfiguration mit JSON

Das folgende Beispiel zeigt eine JSON-Definition, mit der das Sitzungsprotokoll in der Kopieraktivität aktiviert wird:

{
  "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/"
      }
    }
  }
}
Eigenschaft BESCHREIBUNG Zulässige Werte Erforderlich
enableCopyActivityLog Wenn diese Eigenschaft auf „true“ festgelegt wird, haben Sie die Möglichkeit, kopierte Dateien, übersprungene Dateien oder übersprungene Zeilen zu protokollieren. True
False (Standard)
Nein
logLevel Mit „Info“ werden alle kopierten Dateien, übersprungenen Dateien und übersprungenen Zeilen protokolliert. Mit „Warning“ werden nur übersprungene Dateien und übersprungene Zeilen protokolliert. Info
Warnung (Standardeinstellung)
Nein
enableReliableLogging Wenn diese Eigenschaft auf „true“ festgelegt ist, werden Protokolle bei der Copy-Aktivität im zuverlässigen Modus sofort geleert, nachdem die jeweilige Datei in das Ziel kopiert wurde. Wenn Sie zahlreiche Dateien mit aktiviertem zuverlässigem Protokollierungsmodus in der Copy-Aktivität kopieren, ist mit einer Beeinträchtigung des Durchsatzes zu rechnen, da für jede kopierte Datei doppelte Schreibvorgänge erforderlich sind. Eine Anforderung wird an den Zielspeicher und eine weitere Anforderung an den Protokollspeicher gesendet. Bei einer Copy-Aktivität im Modus für beste Leistung werden Protokolle mit einem Batch von Datensätzen innerhalb eines bestimmten Zeitraums geleert, was den Kopierdurchsatz wesentlich weniger beeinträchtigt. Vollständigkeit und Aktualität der Protokollierung sind in diesem Modus nicht gewährleistet, da es vorkommen kann, dass der letzte Batch von Protokollereignissen nicht in die Protokolldatei geleert wurde, wenn eine Copy-Aktivität nicht erfolgreich war. In diesem Szenario werden einige Dateien, die in das Ziel kopiert wurden, nicht protokolliert. True
False (Standard)
Nein
logLocationSettings Eine Gruppe von Eigenschaften, mit denen der Speicherort für die Sitzungsprotokolle angegeben werden kann. Nein
linkedServiceName Der verknüpfte Dienst von Azure Blob Storage oder Azure Data Lake Storage Gen2 zum Speichern der Sitzungsprotokolldateien. Die Namen eines verknüpften Diensts vom Typ AzureBlobStorage oder AzureBlobFS, der auf die Instanz verweist, in der Sie die Protokolldateien speichern. Nein
path Der Pfad der Protokolldateien. Geben Sie den Pfad an, in dem die Protokolldateien gespeichert werden sollen. Wenn Sie keinen Pfad angeben, erstellt der Dienst automatisch einen Container. Nein

Überwachung

Ausgabe einer Copy-Aktivität

Nach vollständiger Ausführung der Copy-Aktivität wird der Pfad der Protokolldateien in der Ausgabe der jeweiligen Copy-Aktivitätsausführung angezeigt. Sie finden die Protokolldateien im Pfad https://[your-blob-account].blob.core.windows.net/[logFilePath]/copyactivity-logs/[copy-activity-name]/[copy-activity-run-id]/[auto-generated-GUID].txt. Die generierten Protokolldateien verfügen über die Erweiterung TXT, und ihre Daten weisen das CSV-Format auf.

"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" 
           } 
        }

Hinweis

Wenn die Eigenschaft enableCopyActivityLog auf Enabled festgelegt ist, werden die Protokolldateinamen vom System generiert.

Schema der Protokolldatei

Die folgende Tabelle zeigt das Schema einer Protokolldatei:

Spalte BESCHREIBUNG
Timestamp Der Zeitstempel, wenn ADF das Objekt liest, schreibt oder überspringt.
Ebene Die Protokollstufe dieses Elements. Mögliche Optionen sind „Warnung“ und „Info“.
Vorgangsname Das Vorgangsverhalten der ADF-Copy-Aktivität für jedes Objekt. Mögliche Optionen sind „FileRead“, „FileWrite“, „FileSkip“ und „TabularRowSkip“.
OperationItem Die Dateinamen oder übersprungenen Zeilen.
`Message` Weitere Informationen zur Angabe, ob die Datei aus dem Quellspeicher gelesen oder in den Zielspeicher geschrieben wurde. Es kann auch der Grund angegeben sein, warum die Datei oder die Zeilen übersprungen wurden.

Hier sehen Sie ein Beispiel für eine Protokolldatei:

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

In der vorstehenden Protokolldatei können Sie sehen, dass die Datei „sample1.csv“ übersprungen wurde, weil die Konsistenz zwischen Quell- und Zielspeicher nicht überprüft werden konnte. Weitere Details dazu, warum „sample1.csv“ inkonsistent wird: Die Datei wurde von anderen Anwendungen bei gleichzeitiger Ausführung der ADF-Copy-Aktivität geändert. Sie können auch sehen, dass „sample2.csv“ erfolgreich aus dem Quell- in den Zielspeicher kopiert wurde.

Zur weiteren Analyse der Protokolldateien können Sie mehrere Analyse-Engines verwenden. Nachfolgend sehen Sie einige Beispiele für die Verwendung von SQL-Abfragen zum Analysieren der Protokolldatei. Hierbei wird eine CSV-Protokolldatei in SQL-Datenbank importiert, wobei der Tabellenname „SessionLogDemo“ lauten kann.

  • Ausgeben der Liste der kopierten Dateien
select OperationItem from SessionLogDemo where Message like '%File is successfully copied%'
  • Ausgeben der Liste der kopierten Dateien innerhalb eines bestimmten Zeitraums
select OperationItem from SessionLogDemo where TIMESTAMP >= '<start time>' and TIMESTAMP <= '<end time>' and Message like '%File is successfully copied%'
  • Ausgeben einer bestimmten Datei mit zugehöriger Kopierzeit und Metadaten
select * from SessionLogDemo where OperationItem='<file name>'
  • Ausgeben einer Liste von Dateien mit deren Metadaten, die innerhalb eines Zeitraums kopiert wurden
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%')
  • Ausgeben der Liste der übersprungenen Dateien
select OperationItem from SessionLogDemo where OperationName='FileSkip'
  • Ausgeben das Grunds, warum eine bestimmte Datei übersprungen wurde
select TIMESTAMP, OperationItem, Message from SessionLogDemo where OperationName='FileSkip'
  • Ausgeben einer Liste der Dateien, die aus dem gleichen Grund übersprungen wurden: „Blobdatei ist nicht vorhanden“
select TIMESTAMP, OperationItem, Message from SessionLogDemo where OperationName='FileSkip' and Message like '%UserErrorSourceBlobNotExist%'
  • Ausgeben des Dateinamens, der die längste Zeit zum Kopieren benötigt
select top 1 OperationItem, CopyDuration=DATEDIFF(SECOND, min(TIMESTAMP), max(TIMESTAMP)) from SessionLogDemo group by OperationItem order by CopyDuration desc

Weitere Informationen finden Sie in den anderen Artikeln zur Kopieraktivität: