> ## Documentation Index
> Fetch the complete documentation index at: https://astronomer.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Universal Metrics Exporter metrics reference

This document lists every metric that Astro exports through the [Universal Metrics Exporter](/docs/astro/export-metrics). Use this reference to identify which metrics are available, the Prometheus labels you can query against, and how each Astro metric name maps to its upstream Apache Airflow name.

<Info>
  Airflow metrics for Dags or tasks with non-ASCII characters in their IDs are not supported and are not exported. Ensure all Dag IDs, task IDs, and TaskGroup IDs contain only ASCII characters (`A–Z`, `a–z`, `0–9`, `_`, `-`, `.`).
</Info>

Astro exports two categories of metrics:

* Airflow application metrics describe the health, success, and performance of Dag execution. Astro normalizes these from the StatsD format that Airflow emits before exporting them to your Prometheus endpoint.
* Infrastructure metrics describe the resource usage and lifecycle health of the Kubernetes Pods that run each Airflow component.

Astro doesn't export metrics outside of these tables. The mapping configuration drops any metric that doesn't match a rule.

## How Astro normalizes Airflow metrics

Astro applies the following transformations to Airflow metrics before they reach your Prometheus endpoint. For the source-of-truth mapping rules, see the [Astro StatsD mappings file](https://github.com/astronomer/ap-vendor/blob/main/statsd-exporter/include/mappings-gen2.yml).

* StatsD names become Prometheus names. Astro replaces dots with underscores. For example, `airflow.dag_processing.import_errors` becomes `airflow_dag_processing_import_errors`.
* Variable name parts become Prometheus labels. High-cardinality identifiers move out of the metric name and into labels so that one metric name covers many dimensions. For example, Astro exports the Airflow metric `airflow.dag.<dag_id>.<task_id>.duration` as `airflow_task_duration` with `dag_id` and `task_id` labels.
* Legacy and current Airflow names both flow through. Astro maps metrics that Airflow renamed across versions under both their legacy and current names so that Dags running on different Astro Runtime versions both emit. For example, both `zombies_killed` (Airflow 2.x) and `task_instances_without_heartbeats_killed` (Airflow 3 and later) export when Airflow emits them.
* Astro adds default metadata labels. Every exported metric carries the standard Astro labels documented in [Export metrics](/docs/astro/export-metrics#metric-categories), such as `deploymentId`, `organizationId`, and `workspaceId`.

<Warning>
  Dag IDs, task IDs, and TaskGroup IDs flow into metric names, so they must contain only ASCII characters (`A–Z`, `a–z`, `0–9`, `_`, `-`, `.`). Airflow's own validation accepts Unicode characters such as accented letters (`ç`, `ã`, `ö`), but metric backends don't. StatsD silently drops metrics whose names contain non-ASCII characters, and OpenTelemetry rejects them as invalid under the [instrument name syntax specification](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-name-syntax). The allowed characters for StatsD metric names are defined in [Airflow's metric validation source](https://github.com/apache/airflow/blob/main/shared/observability/src/airflow_shared/observability/metrics/validators.py).

  Audit your Dag files for non-ASCII identifiers before you enable metrics:

  ```sh wrap theme={null}
  grep -rn '[^\x00-\x7F]' dags/ --include="*.py"
  ```

  Rename any non-ASCII IDs to ASCII equivalents so that all metrics export correctly.
</Warning>

## Airflow application metrics

Apache Airflow classifies metrics into three types based on how the value behaves over time: counters, gauges, and timers. The following tables use Airflow's classification. For background on each type, see the [Apache Airflow metrics reference](https://airflow.apache.org/docs/apache-airflow/stable/administration-and-deployment/logging-monitoring/metrics.html).

### Counters

A counter records the cumulative count of events that occur over time, such as task failures or scheduler heartbeats.

| Name                                               | Airflow name                                    | Labels                       | Description                                                                                                                                                    |
| -------------------------------------------------- | ----------------------------------------------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `airflow_job_start`                                | `<job_name>_start`                              | `job_name`                   | Started jobs, such as `SchedulerJob` or `LocalTaskJob`.                                                                                                        |
| `airflow_job_end`                                  | `<job_name>_end`                                | `job_name`                   | Completed jobs.                                                                                                                                                |
| `airflow_job_heartbeat_failure`                    | `<job_name>_heartbeat_failure`                  | `job_name`                   | Heartbeat failures for a given job type.                                                                                                                       |
| `airflow_operator_successes`                       | `operator_successes_<operator>`                 | `operator`                   | Successful executions of a given operator type.                                                                                                                |
| `airflow_operator_failures`                        | `operator_failures_<operator>`                  | `operator`                   | Failures of a given operator type.                                                                                                                             |
| `airflow_scheduler_heartbeat`                      | `scheduler_heartbeat`                           | `type`                       | Scheduler heartbeat occurrences. Astro sets the `type` label to `counter` so dashboards can distinguish counter-typed values from older gauge-typed emissions. |
| `airflow_dag_processor_heartbeat`                  | `dag_processor_heartbeat`                       | None                         | Standalone Dag processor heartbeat occurrences. Available on Airflow 3 and later.                                                                              |
| `airflow_triggerer_heartbeat`                      | `triggerer_heartbeat`                           | None                         | Triggerer heartbeat occurrences.                                                                                                                               |
| `airflow_ti_start`                                 | `ti.start.<dag_id>.<task_id>`                   | `dag_id`, `task_id`          | Task instance initiations within a Dag.                                                                                                                        |
| `airflow_ti_finish`                                | `ti.finish.<dag_id>.<task_id>.<state>`          | `dag_id`, `task_id`, `state` | Task instance completions, broken out by terminal state.                                                                                                       |
| `airflow_ti_failures`                              | `ti_failures`                                   | None                         | Total task instance failures across all Dags.                                                                                                                  |
| `airflow_ti_successes`                             | `ti_successes`                                  | None                         | Total task instance successes across all Dags.                                                                                                                 |
| `airflow_task_instance_created`                    | `task_instance_created_<task_type>`             | `task_type`                  | Task instances created, broken out by operator type.                                                                                                           |
| `airflow_scheduler_tasks_killed_externally`        | `scheduler.tasks.killed_externally`             | None                         | Tasks terminated by external processes.                                                                                                                        |
| `airflow_zombies_killed`                           | `zombies_killed`                                | None                         | Zombie task instances terminated by the scheduler. Replaced by `airflow_task_instances_without_heartbeats_killed` on Airflow 3 and later.                      |
| `airflow_task_instances_without_heartbeats_killed` | `task_instances_without_heartbeats_killed`      | None                         | Task instances terminated due to missing heartbeats. Replaces `airflow_zombies_killed` on Airflow 3 and later.                                                 |
| `airflow_triggers_succeeded`                       | `triggers.succeeded`                            | None                         | Triggers that successfully fired at least one event.                                                                                                           |
| `airflow_triggers_failed`                          | `triggers.failed`                               | None                         | Triggers that failed before firing.                                                                                                                            |
| `airflow_dataset_updates`                          | `dataset.updates`                               | None                         | Dataset updates. Replaced by `airflow_asset_updates` on Airflow 3 and later.                                                                                   |
| `airflow_dataset_triggered_dagruns`                | `dataset.triggered_dagruns`                     | None                         | Dag runs triggered by dataset updates. Replaced by `airflow_asset_triggered_dagruns` on Airflow 3 and later.                                                   |
| `airflow_asset_updates`                            | `asset.updates`                                 | None                         | Asset modifications. Available on Airflow 3 and later; replaces `airflow_dataset_updates`.                                                                     |
| `airflow_asset_triggered_dagruns`                  | `asset.triggered_dagruns`                       | None                         | Dag runs initiated by asset updates. Available on Airflow 3 and later; replaces `airflow_dataset_triggered_dagruns`.                                           |
| `airflow_ol_emit_failed`                           | `ol.emit.failed`                                | None                         | Failed attempts to emit OpenLineage events.                                                                                                                    |
| `airflow_astro_logging_write_failed`               | `airflow.astro_logging.<provider>.write.failed` | `provider`                   | Log-write failures from the `astronomer-providers-logging` package, broken out by provider.                                                                    |
| `astro_bundle_backend_refresh_success`             | Astronomer only                                 | `instance`, `mount_path`     | Successful refreshes of an Astro bundle backend mount.                                                                                                         |
| `astro_bundle_backend_refresh_failure`             | Astronomer only                                 | `instance`, `mount_path`     | Failed refreshes of an Astro bundle backend mount.                                                                                                             |
| `astro_bundle_backend_download_urls_success`       | Astronomer only                                 | `instance`, `mount_path`     | Successful download URL fetches by the Astro bundle backend.                                                                                                   |
| `astro_bundle_backend_download_urls_failure`       | Astronomer only                                 | `instance`, `mount_path`     | Failed download URL fetches by the Astro bundle backend.                                                                                                       |

### Gauges

A gauge measures a point-in-time value that can rise and fall, such as the number of running tasks or open executor slots.

| Name                                          | Airflow name                                      | Labels                         | Description                                                                                                                  |
| --------------------------------------------- | ------------------------------------------------- | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- |
| `airflow_dagbag_size`                         | `dagbag_size`                                     | None                           | Number of Dags found during the last scheduler scan.                                                                         |
| `airflow_dag_processing_import_errors`        | `dag_processing.import_errors`                    | None                           | Number of errors encountered when parsing Dag files.                                                                         |
| `airflow_dag_processing_total_parse_time`     | `dag_processing.total_parse_time`                 | None                           | Total seconds spent scanning and importing Dag files in the most recent cycle.                                               |
| `airflow_dag_processing_last_run_seconds_ago` | `dag_processing.last_run.seconds_ago.<dag_file>`  | `dag_file`                     | Seconds elapsed since the named Dag file was last evaluated.                                                                 |
| `airflow_executor_open_slots`                 | `executor.open_slots`                             | None                           | Available execution slots on the executor.                                                                                   |
| `airflow_executor_queued_tasks`               | `executor.queued_tasks`                           | None                           | Tasks awaiting execution on the executor.                                                                                    |
| `airflow_executor_running_tasks`              | `executor.running_tasks`                          | None                           | Tasks currently executing on the executor.                                                                                   |
| `airflow_pool_open_slots`                     | `pool.open_slots.<pool>`                          | `pool`                         | Open slots in a named pool.                                                                                                  |
| `airflow_pool_used_slots`                     | `pool.used_slots.<pool>`                          | `pool`                         | Slots currently in use in a named pool. Available on Airflow 2.x.                                                            |
| `airflow_pool_queued_slots`                   | `pool.queued_slots.<pool>`                        | `pool`                         | Slots held by queued tasks in a named pool.                                                                                  |
| `airflow_pool_running_slots`                  | `pool.running_slots.<pool>`                       | `pool`                         | Slots held by running tasks in a named pool.                                                                                 |
| `airflow_pool_deferred_slots`                 | `pool.deferred_slots.<pool>`                      | `pool`                         | Slots held by deferred tasks in a named pool.                                                                                |
| `airflow_pool_scheduled_slots`                | `pool.scheduled_slots.<pool>`                     | `pool`                         | Slots held by scheduled tasks in a named pool.                                                                               |
| `airflow_pool_starving_tasks`                 | `pool.starving_tasks.<pool>`                      | `pool`                         | Tasks in a named pool that can't proceed because pool resources are exhausted.                                               |
| `airflow_scheduler_tasks_running`             | `scheduler.tasks.running`                         | None                           | Tasks currently running according to the scheduler. Available on Airflow 2.x.                                                |
| `airflow_scheduler_tasks_starving`            | `scheduler.tasks.starving`                        | None                           | Tasks the scheduler can't run because pool resources are exhausted.                                                          |
| `airflow_triggers_running`                    | `triggers.running`                                | None                           | Triggers currently executing on a triggerer host.                                                                            |
| `airflow_dataset_orphaned`                    | `dataset.orphaned`                                | None                           | Datasets no longer referenced by any Dag. Replaced by `airflow_asset_orphaned` on Airflow 3 and later.                       |
| `airflow_asset_orphaned`                      | `asset.orphaned`                                  | None                           | Assets no longer referenced by any Dag schedule or task output. Available on Airflow 3 and later.                            |
| `airflow_runner_resources`                    | `airflow.executor.runner_resources.<resource>`    | `resource`                     | Percentage of a resource in use on an executor runner. Values for the `resource` label include `slots`, `cpu`, and `memory`. |
| `airflow_executor_task_resources`             | `airflow.executor.task_resources.<resource_stat>` | `resource_stat`                | Task-level resource statistics. Values for the `resource_stat` label include `memory_rss` and `cpu_times_system`.            |
| `astro_bundle_backend_num_files`              | Astronomer only                                   | `instance`, `mount_path`, `le` | Histogram of file counts in Astro bundle backend mounts.                                                                     |
| `astro_bundle_backend_tarball_size`           | Astronomer only                                   | `instance`, `mount_path`, `le` | Histogram of tarball sizes downloaded by the Astro bundle backend.                                                           |

### Timers

A timer measures the duration of an event, such as how long a task or Dag run takes to complete. Astro exports timer values in milliseconds.

| Name                                         | Airflow name                                                  | Labels                         | Description                                                                                                                |
| -------------------------------------------- | ------------------------------------------------------------- | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------- |
| `airflow_task_duration`                      | `dag.<dag_id>.<task_id>.duration`                             | `dag_id`, `task_id`            | Total duration of a task instance.                                                                                         |
| `airflow_dagrun_duration`                    | `dagrun.duration.success.<dag_id>`                            | `dag_id`                       | Duration of a successful Dag run.                                                                                          |
| `airflow_dagrun_failed`                      | `dagrun.duration.failed.<dag_id>`                             | `dag_id`                       | Duration of a failed Dag run.                                                                                              |
| `airflow_dagrun_schedule_delay`              | `dagrun.schedule_delay.<dag_id>`                              | `dag_id`                       | Delay between the scheduled and actual start of a Dag run.                                                                 |
| `airflow_dagrun_first_task_scheduling_delay` | `dagrun.<dag_id>.first_task_scheduling_delay`                 | `dag_id`                       | Delay between a Dag run's start and the scheduling of its first task.                                                      |
| `airflow_dagrun_dependency_check`            | `dagrun.dependency-check`, `dagrun.dependency-check.<dag_id>` | `dag_id`                       | Time required to evaluate Dag run dependencies. The `dag_id` label is present only when Airflow emits the Dag-scoped form. |
| `airflow_dag_processing_last_duration`       | `dag_processing.last_duration.<dag_file>`                     | `dag_file`                     | Time required to parse the named Dag file in the most recent cycle.                                                        |
| `airflow_dag_processing_last_runtime`        | `dag_processing.last_runtime.<dag_file>`                      | `dag_file`                     | Legacy name for `airflow_dag_processing_last_duration`. Astro retains this mapping so older Airflow versions still emit.   |
| `airflow_collect_db_dags`                    | `collect_db_dags`                                             | None                           | Time spent fetching serialized Dags from the metadata database.                                                            |
| `airflow_ol_emit_attempts`                   | `ol.emit.attempts`                                            | None                           | Time consumed by OpenLineage event emission attempts.                                                                      |
| `astro_bundle_backend_download_time`         | Astronomer only                                               | `instance`, `mount_path`, `le` | Histogram of download durations for Astro bundle backend tarballs.                                                         |
| `astro_bundle_backend_extract_time`          | Astronomer only                                               | `instance`, `mount_path`, `le` | Histogram of extract durations for Astro bundle backend tarballs.                                                          |

### Astro event scheduler metrics

The Astro event scheduler emits metrics under the `airflow.astro_event_scheduler.*` namespace. Astro strips the `airflow.` prefix and exports each metric as `astro_event_scheduler_<rest>`. Because this is a catch-all mapping, the specific metric names emitted depend on the version of Astro Runtime running in your Deployment.

## Infrastructure metrics

Infrastructure metrics describe the Kubernetes Pods that run each Airflow component. Use them to track CPU, memory, storage, and lifecycle health.

| Name                                          | Description                                                                                                                                   |
| --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `container_cpu_usage_seconds_total`           | CPU usage of each container.                                                                                                                  |
| `container_memory_working_set_bytes`          | Memory usage of each container.                                                                                                               |
| `kubelet_stats_ephemeral_storage_pod_usage`   | Ephemeral storage usage of each Pod.                                                                                                          |
| `kube_pod_status_*`                           | Kubernetes Pod status.                                                                                                                        |
| `kube_pod_labels`                             | Kubernetes Pod labels.                                                                                                                        |
| `kube_pod_container_resource_limits`          | CPU, memory, and storage limits for Celery workers, Kubernetes executors, `KubernetesPodOperator` Pods, the scheduler, and the Dag processor. |
| `kube_pod_container_status_terminated_reason` | Reason a Kubernetes container terminated.                                                                                                     |
| `kube_resourcequota`                          | Resource quota usage and limits for namespaces in the cluster.                                                                                |
