Logowanie sesji w działanie Kopiuj

DOTYCZY: Azure Data Factory Azure Synapse Analytics

Skopiowane nazwy plików można rejestrować w działanie Kopiuj. Może to pomóc zapewnić, że dane nie tylko zostaną pomyślnie skopiowane ze źródła do miejsca docelowego, ale także zweryfikować spójność między źródłem a miejscem docelowym.

Po włączeniu ustawienia odporności na uszkodzenia w działanie Kopiuj pomijania uszkodzonych danych można również rejestrować pominięte pliki i pominięte wiersze. Więcej szczegółów można uzyskać od odporności na uszkodzenia w działaniu kopiowania.

Biorąc pod uwagę możliwość pobrania wszystkich nazw plików skopiowanych przez Azure Data Factory (ADF) działanie Kopiuj za pośrednictwem włączania dziennika sesji, pomocne będzie wykonanie następujących scenariuszy:

  • Po użyciu działań kopiowania usługi ADF w celu skopiowania plików z jednego magazynu do innego znajdziesz kilka nieoczekiwanych plików w magazynie docelowym. Dzienniki sesji działanie Kopiuj można skanować, aby zobaczyć, które działanie rzeczywiście skopiowało pliki i kiedy. Dzięki temu podejściu można łatwo znaleźć główną przyczynę i naprawić konfiguracje w usłudze ADF.
  • Po użyciu działań kopiowania usługi ADF w celu skopiowania plików z jednego magazynu do innego znajdź pliki skopiowane do miejsca docelowego nie są oczekiwane z magazynu źródłowego. Dzienniki sesji działanie Kopiuj można skanować, aby uzyskać sygnaturę czasową zadań kopiowania, a także metadane plików, gdy działania kopiowania usługi ADF odczytują je z magazynu źródłowego. Dzięki temu podejściu można sprawdzić, czy pliki zostały zaktualizowane przez inne aplikacje w magazynie źródłowym po skopiowaniu przez usługę ADF.

Konfiguracja za pomocą programu Azure Data Factory Studio

Aby skonfigurować rejestrowanie działanie Kopiuj, najpierw dodaj działanie Kopiuj do potoku, a następnie użyj jej karty Ustawienia, aby skonfigurować rejestrowanie i różne opcje rejestrowania. Shows how to configure logging for a Copy activity in the settings tab.

Aby następnie monitorować dziennik, możesz sprawdzić dane wyjściowe uruchomienia potoku na karcie Monitorowanie programu ADF Studio w obszarze Przebiegi potoku. W tym miejscu wybierz przebieg potoku, który chcesz monitorować, a następnie umieść kursor nad obszarem obok pozycji Nazwa działania, gdzie znajdziesz ikony zawierające linki pokazujące dane wejściowe potoku, dane wyjściowe (po zakończeniu) i inne szczegóły.

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

Wybierz ikonę danych wyjściowych, aby wyświetlić szczegóły rejestrowania dla zadania, a następnie zanotuj lokalizację rejestrowania na wybranym koncie magazynu, gdzie można wyświetlić szczegóły wszystkich zarejestrowanych działań.

Shows the output of a Copy activity with logging enabled.

Zobacz poniżej, aby uzyskać szczegółowe informacje o formacie danych wyjściowych dziennika.

Konfiguracja przy użyciu formatu JSON

Poniższy przykład zawiera definicję JSON umożliwiającą włączenie dziennika sesji w działaniu kopiowania:

"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/"
        }
    }
}
Właściwość Opis Dozwolone wartości Wymagane
enableCopyActivityLog Po ustawieniu wartości true będziesz mieć możliwość rejestrowania skopiowanych plików, pomijania plików lub pomijania wierszy. Prawda
False (domyślnie)
Nie
Loglevel Informacje będą rejestrować wszystkie skopiowane pliki, pomijać pliki i pomijać wiersze. Wyrażenie "Ostrzeżenie" spowoduje pominięcie plików i pominięcie tylko wierszy. Info
Ostrzeżenie (ustawienie domyślne)
Nie
enableReliableLogging Jeśli tak jest, działanie Kopiuj w trybie niezawodnym natychmiast opróżni dzienniki po skopiowaniu każdego pliku do miejsca docelowego. Podczas kopiowania wielu plików z włączonym trybem niezawodnego rejestrowania w działanie Kopiuj należy oczekiwać, że będzie to miało wpływ na przepływność, ponieważ dla każdego skopiowanego pliku wymagane są operacje podwójnego zapisu. Jedno żądanie przechodzi do magazynu docelowego, a drugi do magazynu magazynu dzienników. Działanie Kopiuj w trybie najlepszego nakładu pracy opróżni dzienniki z partią rekordów w danym okresie, a przepływność kopiowania będzie znacznie mniejsza. Ukończenie i osi czasu rejestrowania nie jest gwarantowane w tym trybie, ponieważ istnieje kilka możliwości, że ostatnia partia zdarzeń dziennika nie została opróżniona do pliku dziennika, gdy działanie Kopiuj nie powiodło się. W tym scenariuszu zobaczysz, że kilka plików skopiowanych do miejsca docelowego nie jest rejestrowanych. Prawda
False (domyślnie)
Nie
logLocationSettings Grupa właściwości, których można użyć do określenia lokalizacji do przechowywania dzienników sesji. Nie
linkedServiceName Połączona usługa Azure Blob Storage lub Azure Data Lake Storage Gen2 do przechowywania plików dziennika sesji. Nazwy połączonej AzureBlobStorage usługi lub AzureBlobFS , która odnosi się do wystąpienia używanego do przechowywania plików dziennika. Nie
path Ścieżka plików dziennika. Określ ścieżkę do przechowywania plików dziennika. Jeśli nie podasz ścieżki, usługa utworzy kontener. Nie

Monitorowanie

Dane wyjściowe z działanie Kopiuj

Po całkowitym uruchomieniu działania kopiowania można zobaczyć ścieżkę plików dziennika z danych wyjściowych każdego uruchomienia działanie Kopiuj. Pliki dziennika można znaleźć w ścieżce: https://[your-blob-account].blob.core.windows.net/[logFilePath]/copyactivity-logs/[copy-activity-name]/[copy-activity-run-id]/[auto-generated-GUID].txt. Wygenerowane pliki dziennika mają rozszerzenie .txt, a ich dane są w formacie 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" 
           } 
        }

Uwaga

Gdy właściwość jest ustawiona enableCopyActivityLog na Enabled, nazwy plików dziennika są generowane przez system.

Schemat pliku dziennika

W poniższej tabeli przedstawiono schemat pliku dziennika.

Kolumna Opis
Znacznik czasu Sygnatura czasowa, gdy usługa ADF odczytuje, zapisuje lub pomija obiekt.
Poziom Poziom dziennika tego elementu. Może to być "Ostrzeżenie" lub "Informacje".
OperationName ADF działanie Kopiuj zachowanie operacyjne dla każdego obiektu. Może to być "FileRead", FileWrite", "FileSkip" lub "TabularRowSkip".
OperationItem Nazwy plików lub pominięte wiersze.
Komunikat Więcej informacji, aby pokazać, czy plik został odczytany z magazynu źródłowego lub zapisany w magazynie docelowym. Może to być również przyczyną pomijania pliku lub wierszy.

Oto przykład pliku dziennika:

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

Z powyższego pliku dziennika widać, że sample1.csv został pominięty, ponieważ nie można zweryfikować, aby był spójny między magazynem źródłowym i docelowym. Możesz uzyskać więcej szczegółów na temat tego, dlaczego sample1.csv staje się niespójne, ponieważ została zmieniona przez inne aplikacje, gdy usługa ADF działanie Kopiuj kopiuje w tym samym czasie. Zobaczysz również, że sample2.csv został pomyślnie skopiowany ze źródła do magazynu docelowego.

Aby dokładniej analizować pliki dziennika, można użyć wielu aparatów analizy. Poniżej przedstawiono kilka przykładów, aby użyć zapytania SQL do analizowania pliku dziennika przez zaimportowanie pliku dziennika csv do SQL bazy danych, w której nazwa tabeli może być SessionLogDemo.

  • Nadaj mi skopiowaną listę plików.
select OperationItem from SessionLogDemo where Message like '%File is successfully copied%'
  • Nadaj mi listę plików skopiowaną w określonym zakresie czasu.
select OperationItem from SessionLogDemo where TIMESTAMP >= '<start time>' and TIMESTAMP <= '<end time>' and Message like '%File is successfully copied%'
  • Nadaj mi konkretny plik z skopiowanym czasem i metadanymi.
select * from SessionLogDemo where OperationItem='<file name>'
  • Nadaj mi listę plików z metadanymi skopiowanymi w zakresie czasu.
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%')
  • Nadaj mi pominiętą listę plików.
select OperationItem from SessionLogDemo where OperationName='FileSkip'
  • Daj mi powód, dla którego określony plik został pominięty.
select TIMESTAMP, OperationItem, Message from SessionLogDemo where OperationName='FileSkip'
  • Nadaj mi listę plików pominiętych z tego samego powodu: "plik obiektu blob nie istnieje".
select TIMESTAMP, OperationItem, Message from SessionLogDemo where OperationName='FileSkip' and Message like '%UserErrorSourceBlobNotExist%'
  • Nadaj mi nazwę pliku, która wymaga najdłuższego czasu kopiowania.
select top 1 OperationItem, CopyDuration=DATEDIFF(SECOND, min(TIMESTAMP), max(TIMESTAMP)) from SessionLogDemo group by OperationItem order by CopyDuration desc

Następne kroki

Zobacz inne artykuły dotyczące działania kopiowania: