Ř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_task a 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 , WARNING a 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_task
a 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 ']
Neplatné právní značky nebo seznamy ACL v manifestu
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: