Architecture
Vector runs as a DaemonSet on every node. It collects logs from Pods that carry an Airflow component label, such asscheduler, worker, triggerer, api-server, webserver, dag-processor, dag-server, and git-sync-relay. It doesn’t collect logs from platform components such as the Houston API or the Registry. Vector ships the logs to Elasticsearch for storage and indexing. For log visualization, you can connect your own tools (Kibana, Grafana, OpenSearch Dashboards) to query Elasticsearch.
Accessing logs
Airflow UI
Task logs are accessible directly in the Airflow UI:- Go to the Dag run.
- Click a task instance.
- Click Log.
Elasticsearch API
Vector writes one index per Deployment per day. The index name is<index-name-prefix>.<deployment-release-name>.<date>. The prefix defaults to fluentd when the DaemonSet ships the logs, and to vector when the logging sidecar ships them. Set global.logging.indexNamePrefix to use a different prefix.
Query logs directly through Elasticsearch:
elasticsearch.<domain-prefix>.<base-domain>.
BYO visualization
APC doesn’t include a log visualization UI. Connect your preferred tool to Elasticsearch:- Kibana: Deploy separately and point to the Elasticsearch endpoint.
- Grafana: Use the Elasticsearch data source.
- OpenSearch Dashboards: Use Elasticsearch API compatibility.
Vector configuration
Vector is the log collection agent in APC.Enable Vector
vector key appears twice. The outer key is the subchart, and the inner key is the container in the DaemonSet Pod.
Logging sidecar
APC supports either DaemonSet or sidecar logging on a data plane cluster, but not both at the same time. To use sidecar logging, first disable the Vector DaemonSet, then enable the sidecar:repository and tag for the sidecar image. Override them only when you use a private registry or a specific Vector version. For the complete procedure, see Export logs using container sidecars.
Custom log parsing
The chart generates the Vector DaemonSet configuration and mounts it as a read-only ConfigMap. You can’t change its sources or transforms with a Helm value. The one supported addition is an extra sink. See Forward to external systems. To change how logs are parsed, use the logging sidecar with your own Vector configuration:- Set
global.loggingSidecar.customConfigtotrue. - Write a complete Vector configuration file.
- Create the
sidecar-configsecret from that file in the platform namespace, annotate the secret withastronomer.io/commander-sync, and run the config syncer job to copy it into the Deployment namespaces.
Elasticsearch configuration
Enable Elasticsearch
Log retention
An Elasticsearch curator CronJob deletes log indices that are more than 10 days old. To change the retention period:External logging
Forward to external Elasticsearch
Send logs to your own Elasticsearch cluster:Forward to S3
Archive logs to object storage with an extra sink. Theinputs value must name a transform from the generated DaemonSet configuration. The last transform in that pipeline is transform_remove_fields:
Forward to external systems
Usevector.extraSinks to send logs to any destination that Vector supports. APC adds these sinks to the generated configuration and keeps the Elasticsearch sink:
${SPLUNK_TOKEN} and ${DATADOG_API_KEY} from its own environment. Add environment variables as key-value pairs:
vector.extraEnv takes literal values only. It can’t read a value from a Kubernetes secret.
Deployment log settings
Task log retention
The log groomer sidecar deletes old task log files from the Airflow Pods.deployments.helm.airflow.*.logGroomerSidecar is a deployments.* setting, so cluster configuration is the final layer here: the cluster value wins when both values.yaml and a cluster override are set. See Configure Astro Private Cloud for the precedence rules.
To change retention for one data plane cluster, add the following to that cluster’s Configuration Override in the Astro UI, or pass it as deploymentsConfigOverride on the updateCluster Houston API mutation. See Update data plane cluster configurations.
values.yaml and run a Helm upgrade instead:
Log level configuration
Set the Airflow log level with environment variables on a Deployment. See Environment variables.Query logs
Elasticsearch query examples
Find task failures
level_numeric is 40 for errors and 50 for critical events:
Search specific Dag
Filter by time range
Common log fields
Vector removes the
kubernetes, host, and file fields before it sends a log to Elasticsearch, so you can’t search on them. Use component, namespace, and release instead.
Log types
Thelog_type value a log gets depends on which Vector pipeline collected it:
On Airflow 2 Deployments, component logs are
log_type: system, not log_type: component. To find logs for a specific Airflow component on any Airflow version, filter on the component field instead of log_type.
Troubleshooting
Logs aren’t appearing
-
Check Vector is running:
-
Check Elasticsearch health:
-
Verify Vector logs:
High disk usage
- Reduce
elasticsearch.curator.age.unit_countto delete indices sooner. - Delete the largest indices. See Manage Elasticsearch log indices.
- Increase
elasticsearch.data.persistence.size. - Reduce log verbosity.
- Forward logs to external storage (S3) for long-term retention.
Slow queries
- Query one Deployment’s indices instead of all indices.
- Narrow the time range.
- Increase Elasticsearch resources.
Security
Access control
The chart has no Helm value that turns on Elasticsearch authentication. Airflow components read task logs through thenginx-es proxy in the platform namespace. The proxy authenticates each request with the Houston API and rewrites the query so that a Deployment reads only its own indices. It allows the _search, _count, _bulk, _cluster/health, and _cluster/state/version paths, and denies every other path.
The elasticsearch.<base-domain> ingress goes to Elasticsearch directly. Restrict access to that host with your ingress controller and your network policies. See Network configuration.
Log redaction
You can’t add a transform to the Vector DaemonSet. To redact values before Elasticsearch indexes them, use the logging sidecar with a custom configuration and add aremap transform to it:
redact in its inputs. See Custom log parsing.
Best practices
- Set the curator retention period from your compliance requirements.
- Use log levels wisely — avoid DEBUG in production.
- Enable the log groomer to prevent disk exhaustion on Airflow Pods.
- Forward logs externally for long-term retention and compliance.
- Monitor Elasticsearch health and disk usage.
- Use your preferred visualization tool — deploy Kibana, Grafana, or other tools separately.