This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new 9338ab9d63f Rename dag serialization metrics. (#70838)
9338ab9d63f is described below
commit 9338ab9d63f73bd5ef8e756d0a0f949eb90cdd75
Author: Ei Sandi Aung <[email protected]>
AuthorDate: Thu Aug 13 13:43:07 2026 +0100
Rename dag serialization metrics. (#70838)
---
airflow-core/newsfragments/70838.feature.rst | 1 +
airflow-core/src/airflow/models/serialized_dag.py | 10 ++++++++--
airflow-core/tests/unit/models/test_serialized_dag.py | 16 ++++++++--------
.../observability/metrics/metrics_template.yaml | 16 ++++++++++++----
4 files changed, 29 insertions(+), 14 deletions(-)
diff --git a/airflow-core/newsfragments/70838.feature.rst
b/airflow-core/newsfragments/70838.feature.rst
new file mode 100644
index 00000000000..e54e473fc45
--- /dev/null
+++ b/airflow-core/newsfragments/70838.feature.rst
@@ -0,0 +1 @@
+Added the ``dag.serialization.version_created`` and
``dag.serialization.version_updated`` metrics, which count Dag serializations
in each of the two situations where serialization happens: when a new Dag
version is created, and when the latest Dag version is updated in place.
diff --git a/airflow-core/src/airflow/models/serialized_dag.py
b/airflow-core/src/airflow/models/serialized_dag.py
index fa7d80335a3..95e581d7fa9 100644
--- a/airflow-core/src/airflow/models/serialized_dag.py
+++ b/airflow-core/src/airflow/models/serialized_dag.py
@@ -764,7 +764,10 @@ class SerializedDagModel(Base):
session.merge(dag_version)
# Update the latest DagCode
DagCode.update_source_code(dag_id=dag.dag_id, fileloc=dag.fileloc,
session=session)
- stats.incr("dag.serialization_writes", tags={"dag_id": dag.dag_id,
"bundle_name": bundle_name})
+ stats.incr(
+ "dag.serialization.version_updated",
+ tags={"dag_id": dag.dag_id, "bundle_name": bundle_name},
+ )
return True
dagv = DagVersion.write_dag(
@@ -787,7 +790,10 @@ class SerializedDagModel(Base):
cls._create_deadline_alert_records(new_serialized_dag,
deadline_uuid_mapping)
log.debug("DAG: %s written to the DB", dag.dag_id)
DagCode.write_code(dagv, dag.fileloc, session=session)
- stats.incr("dag.serialization_writes", tags={"dag_id": dag.dag_id,
"bundle_name": bundle_name})
+ stats.incr(
+ "dag.serialization.version_created",
+ tags={"dag_id": dag.dag_id, "bundle_name": bundle_name},
+ )
return True
@classmethod
diff --git a/airflow-core/tests/unit/models/test_serialized_dag.py
b/airflow-core/tests/unit/models/test_serialized_dag.py
index fd3568f3461..abbf179a714 100644
--- a/airflow-core/tests/unit/models/test_serialized_dag.py
+++ b/airflow-core/tests/unit/models/test_serialized_dag.py
@@ -206,18 +206,18 @@ class TestSerializedDagModel:
assert dag_updated is True
def test_serialization_metric_incremented_on_new_write(self,
testing_dag_bundle):
- """A brand new serialized DAG write emits the
``dag.serialization_writes`` metric."""
+ """A brand new serialized DAG write emits the
``dag.serialization.version_created`` metric."""
dag =
make_example_dags(example_dags_module).get("example_params_trigger_ui")
with mock.patch(self.SERIALIZED_DAG_STATS) as mock_stats:
assert SDM.write_dag(LazyDeserializedDAG.from_dag(dag),
bundle_name=self.TEST_BUNDLE_NAME) is True
mock_stats.incr.assert_called_once_with(
- "dag.serialization_writes",
+ "dag.serialization.version_created",
tags={"dag_id": dag.dag_id, "bundle_name": self.TEST_BUNDLE_NAME},
)
def test_serialization_metric_not_incremented_when_unchanged(self,
testing_dag_bundle):
- """Re-writing an unchanged DAG must not emit the
``dag.serialization_writes`` metric."""
+ """Re-writing an unchanged DAG must not emit any serialization
metric."""
dag =
make_example_dags(example_dags_module).get("example_params_trigger_ui")
assert SDM.write_dag(LazyDeserializedDAG.from_dag(dag),
bundle_name=self.TEST_BUNDLE_NAME) is True
@@ -240,7 +240,7 @@ class TestSerializedDagModel:
assert session.scalar(select(func.count()).select_from(DagVersion)) ==
1
mock_stats.incr.assert_called_once_with(
- "dag.serialization_writes",
+ "dag.serialization.version_updated",
tags={"dag_id": "metric_dag", "bundle_name":
self.TEST_BUNDLE_NAME},
)
@@ -256,14 +256,14 @@ class TestSerializedDagModel:
assert session.scalar(select(func.count()).select_from(DagVersion)) ==
2
mock_stats.incr.assert_called_once_with(
- "dag.serialization_writes",
+ "dag.serialization.version_created",
tags={"dag_id": "metric_dag", "bundle_name":
self.TEST_BUNDLE_NAME},
)
@mock.patch("airflow._shared.observability.metrics.stats._export_legacy_names",
True)
@mock.patch("airflow._shared.observability.metrics.stats._get_backend")
def test_serialization_metric_exports_new_and_legacy_names(self,
mock_get_backend, testing_dag_bundle):
- """Serializing a DAG emits both the modern
``dag.serialization_writes`` metric and its legacy name."""
+ """Serializing a DAG emits both the tagged serialization metric and
its legacy name."""
mock_backend = mock.MagicMock(spec=StatsLogger)
mock_get_backend.return_value = mock_backend
dag =
make_example_dags(example_dags_module).get("example_params_trigger_ui")
@@ -272,9 +272,9 @@ class TestSerializedDagModel:
mock_backend.incr.assert_has_calls(
[
-
mock.call(f"dag.serialization_writes.{dag.dag_id}.{self.TEST_BUNDLE_NAME}"),
+
mock.call(f"dag.serialization.version_created.{dag.dag_id}.{self.TEST_BUNDLE_NAME}"),
mock.call(
- "dag.serialization_writes",
+ "dag.serialization.version_created",
tags={"dag_id": dag.dag_id, "bundle_name":
self.TEST_BUNDLE_NAME},
),
]
diff --git
a/shared/observability/src/airflow_shared/observability/metrics/metrics_template.yaml
b/shared/observability/src/airflow_shared/observability/metrics/metrics_template.yaml
index 536e439f876..392b55d7c07 100644
---
a/shared/observability/src/airflow_shared/observability/metrics/metrics_template.yaml
+++
b/shared/observability/src/airflow_shared/observability/metrics/metrics_template.yaml
@@ -227,11 +227,19 @@ metrics:
legacy_name: "-"
name_variables: []
- - name: "dag.serialization_writes"
- description: "Number of times a Dag was serialized and written to the
metadata DB.
- Metric with dag_id and bundle_name tagging."
+ - name: "dag.serialization.version_created"
+ description: "Number of times a Dag was serialized into a new Dag version,
on its first serialization
+ or when its latest version already has task instances. Metric with dag_id
and bundle_name tagging."
type: "counter"
- legacy_name: "dag.serialization_writes.{dag_id}.{bundle_name}"
+ legacy_name: "dag.serialization.version_created.{dag_id}.{bundle_name}"
+ name_variables: ["dag_id", "bundle_name"]
+
+ - name: "dag.serialization.version_updated"
+ description: "Number of times a Dag was serialized over its latest Dag
version in place, without
+ creating a new version, because that version has no task instances. Metric
with dag_id and
+ bundle_name tagging."
+ type: "counter"
+ legacy_name: "dag.serialization.version_updated.{dag_id}.{bundle_name}"
name_variables: ["dag_id", "bundle_name"]
- name: "celery.task_timeout_error"