Sdílet prostřednictvím


Řešení potíží s příjmem manifestu pomocí protokolů úloh Airflow

Tento článek vám pomůže vyřešit problémy s pracovními postupy při příjmu manifestu v Azure Data Manageru pro energii pomocí protokolů úloh Airflow.

Typy pracovních postupů DAG pro příjem manifestu

Existují dva typy pracovních postupů řízeného acyklického grafu (DAG) pro příjem manifestu: jeden manifest a dávkové nahrání.

Jeden manifest

Jeden soubor manifestu se používá k aktivaci pracovního postupu příjmu manifestu.

Hodnota DagTaskName Popis
update_status_running_task Zavolá službu pracovního postupu a označí stav DAG jako running v databázi.
check_payload_type Ověřuje, jestli je typ příjmu dat dávkový nebo jeden manifest.
validate_manifest_schema_task Zajišťuje, že jsou přítomny všechny typy schématu uvedené v manifestu a integrita referenčního schématu. Všechny neplatné hodnoty se vyřadí z manifestu.
provide_manifest_integrity_task Ověří odkazy uvnitř manifestu OSDU® R3 a odebere neplatné entity. Tento operátor zodpovídá za ověřování nadřazenosti a podřízenosti. Všechny osamocené entity jsou protokolovány a vyloučeny z ověřeného manifestu. Prohledávají se všechny externí odkazované záznamy. Pokud se žádná nenajde, entita manifestu se zahodí. Všechny náhradní odkazy na klíče jsou také vyřešeny.
process_single_manifest_file_task Provede ingestování konečných entit manifestu získaných z předchozího kroku. Datové záznamy se ingestují prostřednictvím služby úložiště.
update_status_finished_task Zavolá službu pracovního postupu a označí stav DAG jako finished nebo failed v databázi.

Nahrání dávky

Více souborů manifestu je součástí stejného požadavku služby pracovního postupu. Část manifestu v datové části požadavku je seznam místo slovníku položek.

Hodnota DagTaskName Popis
update_status_running_task Zavolá službu pracovního postupu a označí stav DAG jako running v databázi.
check_payload_type Ověřuje, jestli je typ příjmu dat dávkový nebo jeden manifest.
batch_upload Rozdělí seznam manifestů do tří dávek, které se mají zpracovat paralelně. (Nevygenerují se žádné protokoly úloh.)
process_manifest_task_(1 / 2 / 3) Rozdělí seznam manifestů do skupin tří a zpracuje je. Všechny kroky provedené v validate_manifest_schema_task, provide_manifest_integrity_taska jsou kondenzovány a process_single_manifest_file_task prováděny postupně v těchto úlohách.
update_status_finished_task Zavolá službu pracovního postupu a označí stav DAG jako finished nebo failed v databázi.

Na základě typu datové části (jedna nebo dávka) check_payload_type úloha zvolí příslušnou větev a přeskočí úkoly v druhé větvi.

Požadavky

Měli byste mít integrované protokoly úloh Airflow se službou Azure Monitor. Viz Integrace protokolů Airflow se službou Azure Monitor.

V protokolech úloh Airflow se zobrazí následující sloupce, které vám umožní problém ladit:

Název parametru Popis
RunID Jedinečné ID spuštění aktivovaného spuštění DAG
CorrelationID Jedinečné ID korelace spuštění DAG (stejné jako ID spuštění)
DagName Název pracovního postupu DAG Je to například Osdu_ingest název pracovního postupu pro příjem manifestu.
DagTaskName Název úkolu pro pracovní postup DAG Je to například update_status_running_task název úlohy pro příjem manifestu.
Content Zprávy protokolu chyb (chyby nebo výjimky), které Airflow generuje během provádění úlohy.
LogTimeStamp Časový interval spuštění DAG
LogLevel Úroveň chyby. Hodnoty jsou DEBUG, INFO, WARNINGa ERROR. Většinu výjimek a chybových zpráv můžete zobrazit filtrováním na ERROR úrovni.

Neúspěšné spuštění DAG

Spuštění pracovního postupu se nezdařilo Update_status_running_task nebo Update_status_finished_taska datové záznamy se neingestovaly.

Možné příčiny

  • Volání rozhraní API pro dělení se neověřilo, protože ID datového oddílu je nesprávné.
  • Název klíče v kontextu provádění textu požadavku je nesprávný.
  • Služba pracovního postupu není spuštěná nebo vyvolává chyby 5xx.

Stav pracovního postupu

Stav pracovního postupu je označený jako failed.

Řešení

Zkontrolujte protokoly úkolů Airflow pro update_status_running_task nebo update_status_finished_task. Opravte datovou část předáním správného ID oddílu dat nebo názvu klíče.

Ukázkový dotaz Kusto:

    OEPAirFlowTask
        | where DagName == "Osdu_ingest"
        | where DagTaskName == "update_status_running_task"
        | where LogLevel == "ERROR" // ERROR/DEBUG/INFO/WARNING
        | where RunID == '<run_id>'

Ukázkový výstup trasování:

    [2023-02-05, 12:21:54 IST] {taskinstance.py:1703} ERROR - Task failed with exception
    Traceback (most recent call last):
      File "/home/airflow/.local/lib/python3.8/site-packages/osdu_ingestion/libs/context.py", line 50, in populate
        data_partition_id = ctx_payload['data-partition-id']
    KeyError: 'data-partition-id'
    
    requests.exceptions.HTTPError: 403 Client Error: Forbidden for url: https://contoso.energy.azure.com/api/workflow/v1/workflow/Osdu_ingest/workflowRun/e9a815f2-84f5-4513-9825-4d37ab291264

Ověření schématu se nezdařilo.

Záznamy se neingestovaly, protože ověření schématu se nezdařilo.

Možné příčiny

  • Služba schématu vyvolává chyby Schéma nenalezena.
  • Tělo manifestu neodpovídá typu schématu.
  • Odkazy na schéma jsou nesprávné.
  • Služba schématu vyvolává chyby 5xx.

Stav pracovního postupu

Stav pracovního postupu je označený jako finished. Ve stavu pracovního postupu se nezobrazuje chyba, protože neplatné entity se přeskočí a příjem dat bude pokračovat.

Řešení

Zkontrolujte protokoly úkolů Airflow pro validate_manifest_schema_task nebo process_manifest_task. Opravte datovou část předáním správného ID oddílu dat nebo názvu klíče.

Ukázkový dotaz Kusto:

    OEPAirFlowTask
    | where DagName has "Osdu_ingest"
    | where DagTaskName == "validate_manifest_schema_task" or DagTaskName has "process_manifest_task"
    | where LogLevel == "ERROR"
    | where RunID == "<run_id>"
    | order by ['time'] asc  

Ukázkový výstup trasování:

    Error traces to look out for
    [2023-02-05, 14:55:37 IST] {connectionpool.py:452} DEBUG - https://contoso.energy.azure.com:443 "GET /api/schema-service/v1/schema/osdu:wks:work-product-component--WellLog:2.2.0 HTTP/1.1" 404 None
    [2023-02-05, 14:55:37 IST] {authorization.py:137} ERROR - {"error":{"code":404,"message":"Schema is not present","errors":[{"domain":"global","reason":"notFound","message":"Schema is not present"}]}}
    [2023-02-05, 14:55:37 IST] {validate_schema.py:170} ERROR - Error on getting schema of kind 'osdu:wks:work-product-component--WellLog:2.2.0'
    [2023-02-05, 14:55:37 IST] {validate_schema.py:171} ERROR - 404 Client Error: Not Found for url: https://contoso.energy.azure.com/api/schema-service/v1/schema/osdu:wks:work-product-component--WellLog:2.2.0
    [2023-02-05, 14:55:37 IST] {validate_schema.py:314} WARNING - osdu:wks:work-product-component--WellLog:2.2.0 is not present in Schema service.
    [2023-02-05, 15:01:23 IST] {validate_schema.py:322} ERROR - Schema validation error. Data field.
    [2023-02-05, 15:01:23 IST] {validate_schema.py:323} ERROR - Manifest kind: osdu:wks:work-product-component--WellLog:1.1.0
    [2023-02-05, 15:01:23 IST] {validate_schema.py:324} ERROR - Error: 'string-value' is not of type 'number'
    
    Failed validating 'type' in schema['properties']['data']['allOf'][3]['properties']['SamplingStop']:
        {'description': 'The stop value/last value of the ReferenceCurveID, '
                        'typically the end depth of the logging.',
         'example': 7500,
         'title': 'Sampling Stop',
         'type': 'number',
         'x-osdu-frame-of-reference': 'UOM'}
    
    On instance['data']['SamplingStop']:
        'string-value'

Neúspěšné kontroly odkazů

Záznamy se neingestovaly, protože se nezdařily kontroly odkazů.

Možné příčiny

  • Odkazované záznamy nebyly nalezeny.
  • Nadřazené záznamy nebyly nalezeny.
  • Vyhledávací služba vyvolává chyby 5xx.

Stav pracovního postupu

Stav pracovního postupu je označený jako finished. Ve stavu pracovního postupu se nezobrazuje chyba, protože neplatné entity se přeskočí a příjem dat bude pokračovat.

Řešení

Zkontrolujte protokoly úkolů Airflow pro provide_manifest_integrity_task nebo process_manifest_task.

Ukázkový dotaz Kusto:

    OEPAirFlowTask
        | where DagName has "Osdu_ingest"
        | where DagTaskName == "provide_manifest_integrity_task" or DagTaskName has "process_manifest_task"
        | where Content has 'Search query "'or Content has 'response ids: ['
        | where RunID has "<run_id>"

Vzhledem k tomu, že neexistují žádné protokoly chyb speciálně pro úlohy referenční integrity, zkontrolujte příkazy protokolu ladění a zjistěte, zda byly všechny externí záznamy načteny prostřednictvím vyhledávací služby.

Například následující ukázkový výstup trasování ukazuje záznam dotazovaný prostřednictvím vyhledávací služby pro referenční integritu:

    [2023-02-05, 19:14:40 IST] {search_record_ids.py:75} DEBUG - Search query "contoso-dp1:work-product-component--WellLog:5ab388ae0e140838c297f0e6559" OR "contoso-dp1:work-product-component--WellLog:5ab388ae0e1b40838c297f0e6559" OR "contoso-dp1:work-product-component--WellLog:5ab388ae0e1b40838c297f0e6559758a"

Výstup zobrazuje záznamy, které byly načteny a byly v systému. Související objekt manifestu, který odkazoval na záznam, by se zahodil a už se neingestoval, pokud jste si všimli, že některé záznamy nebyly přítomny.

    [2023-02-05, 19:14:40 IST] {search_record_ids.py:141} DEBUG - response ids: ['contoso-dp1:work-product-component--WellLog:5ab388ae0e1b40838c297f0e6559758a:1675590506723615', 'contoso-dp1:work-product-component--WellLog:5ab388ae0e1b40838c297f0e6559758a    ']

Záznamy se neingestovaly, protože manifest obsahuje neplatné právní značky nebo seznamy řízení přístupu (ACL).

Možné příčiny

  • Seznamy ACL jsou nesprávné.
  • Právní značky jsou nesprávné.
  • Služba úložiště vyvolává chyby 5xx.

Stav pracovního postupu

Stav pracovního postupu je označený jako finished. Ve stavu pracovního postupu se nezobrazuje chyba.

Řešení

Zkontrolujte protokoly úkolů Airflow pro process_single_manifest_file_task nebo process_manifest_task.

Ukázkový dotaz Kusto:

    OEPAirFlowTask
    | where DagName has "Osdu_ingest"
    | where DagTaskName == "process_single_manifest_file_task" or DagTaskName has "process_manifest_task"
    | where LogLevel == "ERROR"
    | where RunID has "<run_id>"
    | order by ['time'] asc 

Ukázkový výstup trasování:

    "PUT /api/storage/v2/records HTTP/1.1" 400 None
    [2023-02-05, 16:57:05 IST] {authorization.py:137} ERROR - {"code":400,"reason":"Invalid legal tags","message":"Invalid legal tags: contoso-dp1-R3FullManifest-Legal-Tag-Test779759112"}
    

Výstup označuje záznamy, které byly načteny. Záznamy entit manifestu, které odpovídají chybějícím záznamům hledání, se zahodí a neingestují.

    "PUT /api/storage/v2/records HTTP/1.1" 400 None
    [2023-02-05, 16:58:46 IST] {authorization.py:137} ERROR - {"code":400,"reason":"Validation error.","message":"createOrUpdateRecords.records[0].acl: Invalid group name 'data1.default.viewers@contoso-dp1.dataservices.energy'"}
    [2023-02-05, 16:58:46 IST] {single_manifest_processor.py:83} WARNING - Can't process entity SRN: surrogate-key:0ef20853-f26a-456f-b874-3f2f5f35b6fb

Známé problémy

  • Vzhledem k tomu, že pro úlohy referenční integrity neexistují žádné konkrétní protokoly chyb, musíte ručně vyhledat příkazy protokolu ladění, abyste zjistili, jestli byly všechny externí záznamy načteny prostřednictvím vyhledávací služby.

Další kroky

Přejděte k následujícímu kurzu a zjistěte, jak provést příjem souborů založených na manifestu:

Reference