Apache Airflow ist die führende Open Source Workflow Orchestration Plattform und steuert zuverlässig die digitalen Routineprozesse von Unternehmen auf der ganzen Welt. Wenn Ihr Unternehmen Airflow als Orchestrierungsdienst einsetzt, steigt die Menge an Log- und Prozessmetadaten im täglichen Betrieb rasant an und wird zum Kostenfaktor. Gleichzeitig wollen Sie statistisch erfassen, wie Ihr System langfristig arbeitet: Wie viele Workflows (oder “DAGs” im Airflow-Jargon, vom englischen directed acyclic graphs) steuert Ihr System im Monat, Quartal oder Jahr? Wie häufig kommt es zu Fehlern und wie schnell erholt sich der betroffene Prozess wieder?
Um diese beiden gegensätzlichen Ziele zu vereinen, setzen wir bei unseren Kunden auf eine Kombination aus automatischer Metadaten-Archivierung und Visualisierung mittels der Open Source Business Intelligence Lösung Apache Superset.
Im heutigen Artikel stellen wir Ihnen beide Seiten vor: wie Sie Prozessmetadaten archivieren können und wie Sie ein einfaches Dashboard zum Monitoring der langfristigen Performance von Airflow in Superset erstellen können.
Apache Superset ist ein Alleskönner, wenn es um Datenvisualisierung geht, mit einer Fülle von Diagrammen, die sofort verfügbar sind, und der Möglichkeit, anspruchsvolle Dashboards zu erstellen, die auf die Bedürfnisse eines jeden zugeschnitten sind. Ein interessanter Anwendungsfall von Superset ist die Überwachung und Visualisierung von Protokollen und Metadaten, die von Apache Airflow ETL-Pipelineläufen generiert werden. DAG-Lauf-Fehlerquoten, Ausführungszeiten und Aggregationen nach Operator-Typ sind nur einige der Statistiken, die mit Superset berechnet und visualisiert werden können, was für Data-Engineering-Teams nützlich sein kann, um Rückschlüsse auf den Zustand ihrer Infrastruktur zu ziehen.
Apache Airflow nutzt eine operative Datenbank, die Informationen über den Zustand des Systems und sämtlicher Workflows speichert. Zwei der wichtigsten Tabellen sind "dag_run" und "task_instance", die Details über die Ausführung von DAGs und die einzelnen Aufgaben darin enthalten. Zu diesen Details gehören Zeitstempel für Start und Ende, Zustände der DAGs, Informationen über die verschiedenen Operatoren, die für jede Aufgabe verwendet werden, die entsprechende Konfiguration und vieles mehr. Die in diesen Tabellen enthaltenen Informationen sind mehr als ausreichend, um mit Apache Superset aussagekräftige Plots und Diagramme über langfristige Qualitätsparameter zu erstellen. Da der Speicherbedarf für all diese Informationen aber schon bei einigen Dutzend aktiven DAGs rasant ansteigt, ist es gängige Betriebspraxis, regelmäßig Prozessmetadaten zu löschen, die ein bestimmtes Alter überschritten haben.
Um die wertvollen Informationen nicht zu verlieren, implementieren wir einen einfachen Archivierungs-DAG, der die Datensätze aus den Tabellen "dag_run" und "task_instance" sichert und sie in einer zusätzlichen Archivdatenbank speichert. Bei jedem DAG-Lauf werden nur die neuesten Einträge zum Einfügen ausgewählt, so dass Duplikate vermieden werden.
Apache Superset ermöglicht es uns, Diagramme und Grafiken zu erstellen und sie in Dashboards zu organisieren. Jedes Diagramm hängt von einem Dataset oder einer SQL-Abfrage ab, die wiederum mit einer Datenquelle verbunden ist. Superset bietet eine Fülle von Konnektoren für alle gängigen DBMS. Zudem ist es grundsätzlich möglich über SQLAlchemy-URIs eine Verbindung zu praktisch jeder Datenquelle herzustellen. Der erste Schritt besteht darin, die Datenbank, die die Tabellen "dag_run" und "task_instance" (extrahiert mit dem Airflow DAG) enthält, mit Superset zu verbinden.
Wir geben die Anmeldedaten an und die Verbindung wird hergestellt. Superset verwendet das Konzept der "Datensätze" als Quellen für seine Diagramme. Es gibt mehrere Möglichkeiten, ein Dataset zu erstellen. Wir können eine Datenbanktabelle als Dataset aus der Quelle angeben, mit der wir uns gerade über die Benutzeroberfläche verbunden haben. Ein anderer Ansatz besteht darin, eine SQL-Abfrage zu schreiben, die auf die Quelle zugreift, und die Ergebnisse als Dataset zu speichern. Während die erste Variante einfacher zu handhaben ist, bietet die zweite mehr Flexibilität und ermöglicht komplexere Datenaggregationen, wie z. B. die Verknüpfung mehrerer Tabellen. Im Grunde kann jede gültige "SELECT"-Abfrage als Datensatz verwendet werden. Zu diesem Zweck definieren wir über SQL Lab eine Abfrage, die die Ausführungszeit jedes DAG berechnet.
Andere notwendige SQL-Abfragen können auf ähnliche Weise definiert werden. Nun können wir mit der Erstellung von Diagrammen auf der Grundlage der soeben definierten Datensätze und Abfragen beginnen. Einige der interessantesten sind:
Dieses Diagramm ist recht einfach zu erstellen, da die Tabelle "dag_run" eine Spalte "state" enthält, so dass keine zusätzlichen Berechnungen erforderlich sind.
Dies ist ein einfaches Balkendiagramm, das die Vorkommen jedes möglichen Zustands zählt, in dem sich ein DAG befinden kann. Es ist im Wesentlichen gleichbedeutend mit der Ausführung von "SELECT state, COUNT(*) from dag_run GROUP BY state;". Diese Abfrage zählt die Vorkommnisse jedes möglichen Zustands ("success", "failed" und "running"). Die meisten DAGs werden erfolgreich ausgeführt, und eine Handvoll DAGs ist noch in Betrieb.
Ein ähnliches Diagramm ist dasjenige, das die Gesamtzahl der eingesetzten Airflow Operatoren zählt.
Dies entspricht wiederum der Ausführung von "SELECT operator, COUNT(*) FROM task_instance GROUP BY operator;". Wie oben, zählt diese Abfrage das Vorkommen von Task-Operatoren. Ein großer Teil der Operatoren besteht aus Python-Dekorationsoperatoren, da die TaskFlow-API häufig verwendet wird.
Eine nützliche Metrik zur Visualisierung ist die Verteilung der Ausführungszeit der DAGs. Zu diesem Zweck verwenden wir die Ergebnisse der SQL-Abfrage, die wir zuvor definiert haben.
Es ist ziemlich offensichtlich, dass die Mehrheit der DAG-Ausführungen innerhalb von 0 bis 5 Sekunden abgeschlossen wird. Wir können die Ausführungszeit basierend auf der DAG-ID aggregieren und erhalten einen Überblick über die durchschnittliche Ausführungszeit pro DAG.
Die zeitaufwändigste DAG scheint die DAG "Test_SFTPOperator" zu sein, deren durchschnittliche Ausführungszeit fast doppelt so hoch ist wie die der zweiten DAG.
Die Diagramme zur Veranschaulichung der Ausführungszeit von Aufgaben ähneln den vorherigen Diagrammen, bieten jedoch einen detaillierteren Einblick, da sie auf potenzielle Engpässe bei der Ausführung bestimmter Aufgaben hinweisen, die eventuell beachtet werden müssen.
Ausgehend von der Verteilung der Aufgabenausführungszeit wird deutlich, dass fast jede Aufgabe innerhalb von 5 Sekunden abgeschlossen wird. Aggregiert man nach Aufgabenkennung, kann man sehen, wie sich die einzelnen Aufgaben verhalten.
Die Aufgabe "create_testfile" ist mit einer durchschnittlichen Ausführungszeit von über 7 Sekunden bei weitem die zeitaufwändigste. Superset bietet eine Warnfunktion, mit der eine E-Mail gesendet werden kann, wenn ein überwachter Wert einen bestimmten Schwellenwert überschreitet. Wenn zum Beispiel eine Aufgabe ungewöhnlich lange läuft, kann eine E-Mail-Benachrichtigung an das für Airflow zuständige Team gesendet werden.
Um einen umfassenderen Überblick über die Infrastruktur der ETL-Pipelines zu erhalten, stellen wir aus den verschiedenen Diagrammen ein vollstädniges Airflow Monitoring Dashboard zusammen:
Die Kacheln können nach dem Ermessen des Analysten gezoomt, neu angeordnet und manipuliert werden. Der Airflow-DAG, die für das Laden der Tabellen in die Archivdatenbank verantwortlich ist, kann so geplant werden, dass er häufig ausgeführt wird, um das Dashboard auf dem neuesten Stand zu halten.
Wir haben Ihnen in diesem Artikel einen Einblick gegeben, wie Sie Leistungsindikatoren von Apache Airflow langfristig sichern und mit Apache Superset leicht zugänglich visualisieren können. Wenn Sie Ihre eigene Instanz von Superset einrichten möchten oder ein Expertenfeedback für Ihren Anwendungsfall wünschen, nehmen Sie noch heute Kontakt mit uns auf.