MetricSign
NL|ENStart free →
Best Practices9 min·

Monitoring van ADF-pipeline fouten: waar native waarschuwingen niet meer werken

De native Azure Monitor detecteert fouten in de pipeline. Deze mist echter de copy activity die is geslaagd met een onjuist schema – en dat is nu juist de activiteit waarover je belanghebbenden contact zullen opnemen.

Read this article in English →

Een copy activity mislukt stilzwijgend om 3 uur 's nachts en Power BI wordt desondanks vernieuwd.

Het bronteam heeft customer_id hernoemd naar cust_id in de Salesforce-export. De ADF-copy activity leest uit een opgeslagen procedure die nog steeds naar de oude kolom verwijst. De activiteit retourneert 'Geslaagd' — nul rijen gekopieerd, geen uitzondering gegenereerd, omdat de kolomtoewijzing was ingesteld op 'automatisch' en het schema-driftbeleid het niet-toegewezen veld stilzwijgend heeft verwijderd. De pipeline meldt 'Geslaagd'. De downstream Power BI dataset wordt vernieuwd met de lege stagingtabel. Om 9 uur 's ochtends opent de CFO een dashboard dat de omzet van gisteren op $ 0 laat zien.

Dit is de kloof die de native Azure Monitor-waarschuwingen niet kunnen dichten — en precies het soort foutmodus waarvoor speciale data-observabilityplatformen zijn ontworpen.

ADF toont monitoring op vier plaatsen: het Azure Monitor-metriekvenster, de pipeline runsgeschiedenis in de studio, waarschuwingsregels via actiegroepen en Log Analytics met diagnostische logboeken. De meeste teams configureren er twee — pipeline runsgeschiedenis (standaard ingeschakeld) en een enkele actiegroep die de distributielijst van het team e-mailt wanneer een pipeline mislukt. Dat dekt het geval waarin de pipeline een foutmelding geeft. Het dekt het bovenstaande geval niet.

Zie ook: Best data observabilityplatforms in 2026

Wat de standaard ADF-waarschuwingsfunctie je nu eigenlijk biedt.

Het ondersteunde pad voor foutwaarschuwingen op pipelineniveau bestaat uit vijf stappen. Open in je Data Factory de diagnostische instellingen en routeer de categorieën PipelineRuns en ActivityRuns naar een Log Analytics-werkruimte. Wacht tot de logboeken binnenkomen (2-5 minuten na de volgende uitvoering). Maak in Azure Monitor een geplande queryregel voor die werkruimte. Koppel een actiegroep met e-mail, een Teams-webhook of een ITSM-connector. De basis-KQL voor pipeline fouten is:

``kusto ADFPipelineRun | where TimeGenerated > ago(15m) | where Status == "Failed" | project TimeGenerated, PipelineName, RunId, Status, FailureType, Message=ErrorMessage ``

End-to-end latentie: 3-10 minuten van fout tot e-mail. De regel wordt één keer per evaluatievenster uitgevoerd. De dekking is alleen op pipelineniveau (status) — alles wat als pipeline fout wordt gemeld, wordt opgevangen. Wat het mist: fouten op activiteitsniveau binnen een succesvolle pipeline, schema-afwijkingen die leiden tot onjuiste uitvoer, gevolgen voor Power BI of Databricks, en de vraag of de tien waarschuwingen die je zojuist om 3 uur 's nachts hebt ontvangen, één incident of tien betreffen.

Native ADF alert path {'step': 1, 'label': 'ADF Pipeline Fails'} {'step': 2, 'label': 'Azure Monitor ingests diagnostic {'step': 3, 'label': 'Alert Rule evaluates KQL'} {'step': 4, 'label': 'Action Group triggers'} {'step': 5, 'label': 'Email / Teams / Webhook'}
Native ADF alert path

De kloof in activiteitsniveau

De status van een pipeline wordt berekend op basis van het orchestratieresultaat, niet op basis van de data. Een copy activity met enableSkipIncompatibleRow: true slaat rijen over en rapporteert 'Geslaagd'. Een opzoekactiviteit met een onjuist geformuleerde query die een lege resultaatset retourneert, is een succesvolle uitvoering. Een ForEach-lus over een lege array wordt binnen milliseconden voltooid met de status 'Geslaagd'.

Het geval van een schema-mismatch is het meest problematisch. De tabulaire vertaler van ADF met mapComplexValuesToString en automatische mapping tolereert een hernoemde kolom door deze uit de projectie te verwijderen. De copy activity rapporteert rowsCopied: 487293 en de status 'Geslaagd' — het aantal rijen klopt, maar de kolommen zijn onjuist. Monitoring op pipeline niveau zal dit nooit zien. Het enige signaal is het aantal rijen zelf, geparseerd uit de JSON-output van de activiteit, vergeleken met een verwachte basislijn.

KQL voor activiteitsniveaudetectie

Voor het genereren van waarschuwingen op activiteitsniveau is het nodig om ADFActivityRun rechtstreeks op te vragen en de kolom Output te parsen. Hier is een werkende query die zowel expliciete fouten als copy activities met nul rijen detecteert:

```kusto ADFActivityRun | where TimeGenerated > ago(15m) | where ActivityType in ("Copy", "Lookup", "ExecuteDataFlow") | extend Output = parse_json(Output) | extend rowsCopied = toint(Output.rowsCopied),

rowsRead = toint(Output.rowsRead),

errors = toint(Output.errors) | where Status == "Failed"

or (ActivityType == "Copy" and Status == "Succeeded" and (rowsCopied == 0 or errors > 0)) | ```` project TimeGenerated, PipelineName, ActivityName, ActivityType, Status,

rowsRead, rowsCopied, errors, ErrorMessage=tostring(Error.message) ```

Dit werkt. Het vereist echter wel dat je weet welke activiteiten een zinvolle baseline van nul rijen hebben (een delta-load kan op een rustige dag legitiem nul rijen kopiëren), met welk verwacht aantal rijen je wilt vergelijken en welke pipelines deze behandeling nodig hebben. Reserveer 15-30 minuten per pipeline voor het schrijven, testen en afstemmen. Vermenigvuldig dit met je portfolio. De kosten zitten niet in de KQL, maar in het onderhoud wanneer activiteitsnamen veranderen, wanneer nieuwe pipelines worden uitgebracht zonder waarschuwingen en wanneer dezelfde fout vijf regels in een fan-out activeert.

Waar gerichte monitoring zijn nut bewijst

Er doen zich drie problemen voor zodra je portfolio ongeveer vijf pipelines omvat of je stack een mix is van ADF met Databricks, dbt of Power BI.

Correlatie tussen pipelines. De ADF-kopieerfout om 03:14 is hetzelfde incident als de dbt-modelfout 'staging_orders' om 03:22 en het Power BI signaal 'refresh_delayed' voor de dataset 'Sales Executive' om 06:00. De standaardtools behandelen deze als drie waarschuwingen in drie verschillende inboxen. Het betreft echter één incident met een duidelijke oorzaak-gevolgrelatie.

Deduplicatie. Een pipeline die via ForEach naar 12 datasets uitwaaiert, genereert 12 activiteitsfouten met dezelfde hoofdoorzaak. Actiegroepen sturen je 12 e-mails, of één per regel, afhankelijk van hoe je de drempelwaarde hebt ingesteld – geen van beide is de juiste oplossing. De juiste oplossing is groeperen op hoofdoorzaak.

Het blootleggen van de hoofdoorzaak. De ErrorMessage-kolom van ADF geeft de foutmelding Operation on target Copy data1 failed: ErrorCode=2200, ..., gevolgd door 2 KB aan stacktrace. Het relevante detail — kolom 'customer_id' niet gevonden in bron — staat erin, maar je moet het zelf lezen. Speciale tools parseren deze foutmeldingen, tonen de kolomnaam en koppelen deze aan de schemawijziging die de fout heeft veroorzaakt.

Hier komt MetricSign in beeld: het leest ADF-activiteitenlogboeken via dezelfde diagnostische stream die je al hebt geconfigureerd, groepeert fouten in incidenten voor ADF, Databricks, dbt en Power BI, en toont de aanwijzing voor de hoofdoorzaak in plaats van de stacktrace.

Wat moet er daadwerkelijk gebouwd worden?

Voor één tot vier pipelines zonder downstream BI-afhankelijkheden: configureer de diagnostische instellingen, schrijf de bovenstaande waarschuwingsregel op pipeline niveau, koppel een actiegroep en stop. De native methode is voldoende. Besteed de tijd liever aan datakwaliteitstests binnen de pipelines.

Voor portfolio's met gemengde orchestratie (ADF die Databricks triggert, dbt die volgens een schema draait, Power BI die daar bovenop ververst) of voor pipelines met een SLA waarbij stakeholders binnen een uur een probleem zullen opmerken: de KQL-aanpak per pipeline loopt tegen een onderhoudslimiet aan bij ongeveer vijf tot tien pipelines. De rekensom draait om: de engineeringuren die worden besteed aan het implementeren van waarschuwingen overstijgen de kosten van een tool die standaard correlatie, deduplicatie en oorzaakanalyse uitvoert. Beslis op basis van de portfoliogrootte en de diversiteit van de stack, niet op basis van of de native methode 'werkt'. Die werkt wel. Maar is niet schaalbaar voor de fouten die je wakker schudden.

Veelgestelde vragen

Hoe lang duurt het voordat Azure Monitor een ADF-waarschuwing genereert?+
Diagnostische logboeken komen binnen 2-5 minuten na voltooiing van de pipeline in Log Analytics terecht. Waarschuwingsregels worden volgens een schema geëvalueerd (1, 5 of 15 minuten), waardoor end-to-end detectie doorgaans 3-10 minuten na de fout plaatsvindt. Activity logwaarschuwingen op de Microsoft.DataFactory-provider kunnen binnen een minuut worden geactiveerd, maar hebben alleen betrekking op gebeurtenissen op service niveau, niet op de uitkomsten van de pipeline run.
Kan ik de activiteiten van ADF-pipelines volgen, en niet alleen de pipelines zelf?+
Ja, maar alleen via Log Analytics. Schakel de diagnostische categorie ActivityRuns in de diagnostische instellingen in en raadpleeg vervolgens de tabel ADFActivityRun. De tabel PipelineRuns rapporteert alleen de status op pipelineniveau, dus een pipeline die met de status 'Geslaagd' wordt voltooid, zal geen activiteitsfouten weergeven, tenzij je ADFActivityRun rechtstreeks raadpleegt.
Wat is het verschil tussen ADF-diagnoselogboeken en de uitvoeringsgeschiedenis van de pipeline?+
De uitvoeringsgeschiedenis van de pipeline wordt weergegeven in de gebruikersinterface van de ADF-portal, wordt 45 dagen bewaard en is niet buiten de studio opvraagbaar. Diagnostische logboeken vormen een aparte datastroom die je kunt inschakelen via de diagnostische instellingen en die naar Log Analytics, Storage of Event Hub wordt verzonden. Alleen diagnostische logboeken ondersteunen KQL-query's, waarschuwingsregels en een bewaartermijn van meer dan 45 dagen.
Heb ik voor elke melding een actiegroep nodig?+
Eén actiegroep kan meerdere waarschuwingsregels beheren. Definieer deze eenmalig met je e-maildistributielijst, Teams-webhook of ITSM-connector en koppel deze vervolgens aan elke geplande queryregel. Het splitsen van actiegroepen op basis van ernst (Sev2 voor oproepdiensten, Sev3 voor kanalen) is nuttiger dan splitsen op basis van pipeline.
Kan Azure Monitor een copy activity detecteren die slaagt, maar geen rijen schrijft?+
Niet standaard. De activiteit rapporteert 'Geslaagd' omdat deze zonder uitzonderingen is uitgevoerd. Je hebt een aangepaste KQL-query nodig voor ADFActivityRun die de uitvoer-JSON analyseert op 'rowsCopied' of 'rowsRead' en vervolgens een waarschuwing geeft wanneer de waarde onder een verwachte drempelwaarde komt. Dit is werk per activiteit en is niet van toepassing op een hele portfolio.
Kan ik in Microsoft Teams een melding ontvangen bij ADF-fouten zonder een webhook?+
Actiegroepen ondersteunen Teams alleen via inkomende webhooks. Configureer de webhook in het doel-Teams-kanaal, plak de URL in de webhookactie van de actiegroep en Azure Monitor plaatst een adaptieve kaart bij elke activering. Er is geen native Teams-connector die de webhook omzeilt.

Gerelateerde integraties