📖 Scenario: You are managing workflows using Apache Airflow. You want to track the performance of your DAG runs by recording the duration of each run.This helps you understand how long your workflows take and identify any delays.
🎯 Goal: Build a simple Airflow DAG that tracks the duration of each DAG run and stores this information in a Python dictionary.You will create the data structure, add a configuration variable for minimum duration threshold, calculate durations, and finally print the durations.
📋 What You'll Learn
Create a dictionary to store DAG run durations
Add a minimum duration threshold variable
Calculate the duration of each DAG run using start and end times
Print the dictionary with DAG run durations
💡 Why This Matters
🌍 Real World
Tracking DAG run durations helps teams monitor workflow performance and detect delays or failures early.
💼 Career
Understanding how to track and analyze DAG performance is important for DevOps engineers and data engineers working with workflow automation.
Progress0 / 4 steps
1
Create a dictionary to store DAG run durations
Create a dictionary called dag_run_durations with these exact entries: 'run_1': 0, 'run_2': 0, 'run_3': 0.
Apache Airflow
Hint
Use curly braces to create a dictionary with keys and values.
2
Add a minimum duration threshold variable
Add a variable called min_duration_threshold and set it to 5 (minutes).
Apache Airflow
Hint
Just assign the number 5 to the variable min_duration_threshold.
3
Calculate the duration of each DAG run
Given these start and end times in minutes for each run: start_times = {'run_1': 0, 'run_2': 10, 'run_3': 20} and end_times = {'run_1': 7, 'run_2': 15, 'run_3': 30}, use a for loop with variables run and start to iterate over start_times.items(). Calculate the duration as end_times[run] - start and update dag_run_durations[run] with this value.
Apache Airflow
Hint
Use a for loop to go through start_times and calculate duration using end_times.
4
Print the dictionary with DAG run durations
Write a print statement to display the dag_run_durations dictionary.
Apache Airflow
Hint
Use print(dag_run_durations) to show the durations.
Practice
(1/5)
1. What is the main purpose of tracking DAG performance in Airflow?
easy
A. To measure how long workflows and tasks take to run
B. To change the order of tasks in a DAG
C. To create new DAGs automatically
D. To delete old task logs
Solution
Step 1: Understand DAG performance tracking
DAG performance tracking focuses on measuring execution times of workflows and tasks.
Step 2: Identify the main goal
The goal is to find how long tasks and DAG runs take to help improve pipeline speed.
Final Answer:
To measure how long workflows and tasks take to run -> Option A
Quick Check:
DAG performance tracking = measuring run times [OK]
Hint: Think: performance means measuring speed or time [OK]
Common Mistakes:
Confusing performance tracking with task ordering
Thinking it creates or deletes DAGs
Mixing logs management with performance tracking
2. Which Airflow model stores information about individual task execution times?
easy
A. DagRun
B. Variable
C. TaskInstance
D. Connection
Solution
Step 1: Identify models related to execution times
DagRun stores info about the whole DAG run, TaskInstance stores info about each task run.
Step 2: Match model to task execution time
TaskInstance tracks start and end times for each task, so it holds execution time data.
Final Answer:
TaskInstance -> Option C
Quick Check:
TaskInstance = task execution info [OK]
Hint: TaskInstance = single task run details [OK]
Common Mistakes:
Choosing DagRun which tracks whole DAG, not tasks
Confusing Variables or Connections with timing data
Assuming all info is in one model
3. Given this code snippet, what will be printed?
from airflow.models import TaskInstance
from datetime import datetime, timedelta
start = datetime(2024, 6, 1, 10, 0, 0)
end = datetime(2024, 6, 1, 10, 5, 30)
ti = TaskInstance(dag_id='example_dag', task_id='task1', execution_date=start)
ti.start_date = start
ti.end_date = end
print((ti.end_date - ti.start_date).total_seconds())
medium
A. 5.5
B. 330
C. SyntaxError
D. 330.0
Solution
Step 1: Identify variable name mismatch
The code assigns TaskInstance to 'ti' but prints using 'ti', which is correct. However, the code snippet uses 'ti' consistently, so no mismatch here.
Step 2: Check for syntax errors
The code is syntactically correct, but the TaskInstance constructor requires a DAG object or context in recent Airflow versions, so this code may raise a runtime error.
Step 3: Consider the actual output
Assuming the code runs, the output would be 330.0 seconds.
Final Answer:
330.0 -> Option D
Quick Check:
5 min 30 sec = 330.0 seconds [OK]
Hint: Subtract datetimes, use total_seconds() for float seconds [OK]
Common Mistakes:
Confusing minutes with seconds
Expecting integer instead of float
Syntax errors from missing imports (not here)
4. You wrote this code to get task duration but it raises an error: