Post-Migration Operations: Monitoring, DR, Capacity
This page describes the operational surface of a Bifrost migration: what to monitor during the program, how to back up and restore the platform components Bifrost provisions, how to size the target stack, how to upgrade it after migration, how to operate the platform for multiple tenants, and how to confirm readiness before the first production cutover.
Monitoring and Alerting
Bifrost ships with a complete metrics, logging, and alerting stack that is deployed by bifrost modernize land (oppure bifrost direct land).
Metrics stack
The metrics foundation is Prometheus and Grafana, deployed via the Prometheus Operator. Every platform component exposes metrics through a well-defined source:
| Component | Metrics source | Key metrics |
|---|---|---|
| Scintilla | JMX exporter and Spark History Server | Executor count, shuffle read and write, GC time, task duration. |
| Trino | Built-in JMX endpoint | Running queries, blocked queries, CPU time, memory pool usage. |
| Object storage | Object storage exporter | OSD latency, IOPS, pool utilization, placement-group state, cluster health. |
| Airflow | StatsD exporter | DAG run duration, task success and failure rates, scheduler heartbeat. |
| Catalogo | Micrometer | Catalog request latency, active connections, error rate. |
| Ilum | Built-in Prometheus endpoint | Job count, session count, cluster health. |
| Shuffle service | JMX exporter | Shuffle throughput, partition count, worker health. |
Pre-built Grafana dashboards
Bifrost installs the following dashboards during bifrost modernize land:
- Migration Progress: tables migrated per wave, storage migrated, workloads converted, services replaced. Executive-level view.
- Data Quality: row-count parity per table, data-diff pass rates, schema drift alerts.
- Object Storage Health: OSD latency heatmaps, pool utilization, recovery progress, IOPS.
- Trino Performance: query latency p50/p95/p99, queue depth, CPU and memory per cluster.
- Spark Job Metrics: job duration trends, executor utilization, shuffle data volume.
- Airflow Operations: DAG success rates, task duration, scheduler lag.
Bifrost controller logs
The Bifrost controller host writes two log streams:
- Primary log:
/var/log/bifrost/bifrost.log, structured JSON, one event per line, withTimestamp,level,command,phase,grappolo,message, and an optionalverdictfield on gate events. Rotated daily with a 30-day retention by default. - Command transcript:
/var/log/bifrost/transcripts/<cluster>/<run-id>/captures the full stdout and stderr of every sub-process invocation (Spark jobs, DistCp runs, Helm operations). Retained per run for post-mortem analysis.
Log level defaults to INFO. Override with --verbose (equivalent to DEBUG) on any command, or set BIFROST_LOG_LEVEL=DEBUG to raise the level globally. The --log-file flag overrides the primary log location for a single invocation.
Log aggregation
Log aggregation uses Loki and Promtail. Promtail runs as a DaemonSet, collecting container logs from every pod. LogQL queries enable cross-component correlation by labels (pod name, namespace, container).
Why label-based indexing rather than full-text: Loki indexes only labels, not full text. This is significantly cheaper in storage and adequate for operational queries. Full-text search is rarely needed in Kubernetes log aggregation; label-based filtering covers the majority of operational use cases.
Alerting rules
Bifrost ships a default set of alerting rules:
- alert: CephHealthError
expr: ceph_health_status == 2
per: 5m
Annotazioni:
summary: "Object storage cluster health is ERROR"
- alert: TrinoCoordinatorDown
expr: up{job="trino-coordinator"} == 0
per: 2m
- alert: TableMigrationFailed
expr: bifrost_table_migration_failures_total > 0
per: 1m
- alert: CephPoolNearFull
expr: ceph_pool_percent_used > 80
per: 15m
Rules are delivered as Prometheus AlertManager configuration and routed to the same Slack and IT service management channels Bifrost uses for migration notifications.
Monitoring after a Classic migration
After a Classic migration, the cluster is monitored through its management plane, Apache Ambari (Ilum build), operated directly or through Ilum Cluster Ops:
- Ambari alert definitions run from the first start of the adopted cluster.
- Alert targets (email and SNMP) are derived from the Cloudera Manager alert configuration and are armed with
ambari_alert_targets_arm: trueonce the cutover is accepted. - A Prometheus and Grafana service is available on request (
bifrost_adopt_monitoring: true); Prometheus listens on port 9091. - Every Bifrost gate writes its report to the state directory, and Slack notifications follow the configuration described in the CLI reference.
Vedere Management plane: monitoring and alerts.
Backup and Disaster Recovery
Component backup matrix
| Component | Data | Method | Frequency |
|---|---|---|---|
| Catalog Postgres | Table metadata, locations, RBAC | pg_dump via CronJob | Hourly |
| Airflow Postgres | DAG runs, connections, variables, pools | pg_dump via CronJob | Hourly |
| OpenMetadata database | Entities, lineage, glossary | pg_dump via CronJob | Daily |
| Keycloak Postgres | Users, roles, clients, realm config | pg_dump via CronJob | Daily |
| Object storage (data) | Lakehouse data (Iceberg tables) | Block-level mirroring or filesystem snapshots | Depends on RPO |
| Object storage (config) | CRUSH map, pool config, auth keys | Native Ceph config and auth export | Daily |
| Kubernetes etcd | Cluster state, CRDs, Secrets | etcdctl snapshot save | Every 6 hours |
| Ilum MongoDB | Job metadata, cluster config | mongodump via CronJob | Daily |
| Kafka | Topic data, consumer offsets | MirrorMaker2 to a DR cluster (if needed) | Continuous |