Skip to main content
LangWatch stores data across three systems. Each requires its own backup strategy:

PostgreSQL Backups

PostgreSQL holds your control plane data, losing it means losing user accounts, project configurations, and monitor definitions.

Chart-Managed PostgreSQL

If you’re using the chart-managed PostgreSQL (development/small deployments), use pg_dump:

External PostgreSQL (RDS, Cloud SQL, etc.)

For production, use your cloud provider’s built-in backup features:
  • AWS RDS: Enable automated snapshots (recommended: 30-day retention) and point-in-time recovery
  • GCP Cloud SQL: Enable automated backups with point-in-time recovery
  • Azure Database: Enable geo-redundant backups
Always test your restore procedure before you need it. Schedule a quarterly restore drill to validate your backups.

ClickHouse Backups

ClickHouse holds all your trace and evaluation data. The clickhouse-serverless subchart supports native ClickHouse BACKUP/RESTORE to S3-compatible storage.

Enable Backups

Backups require an S3-compatible bucket. Configure in your Helm values:
Or use the cold-storage-s3.yaml overlay which enables both cold storage and backups:

S3 Authentication

IRSA, Workload Identity (recommended):
Static credentials:

Backup Schedule

Both are implemented as Kubernetes CronJobs that run clickhouse-client commands inside the ClickHouse pod.

Restore from Backup

To restore, you need to identify the backup name and run the restore command:
Restoring a backup will overwrite existing data in the target database. Always verify you’re restoring to the correct environment.

ClickHouse Cold Storage

Cold storage is separate from backups, it’s a tiered storage strategy that automatically moves older data from local SSD to S3 for cost savings.

How It Works

  1. New data is written to hot storage (local SSD on the ClickHouse pod)
  2. After the TTL period, data is moved to cold storage (S3)
  3. Queries transparently read from both hot and cold storage
  4. Cold data is cached locally for repeated reads

Enable Cold Storage

We recommend setting the TTL to a multiple of 7 (e.g., 7, 14, 28, 49) to align with ClickHouse’s weekly partition boundaries for more efficient data management. The default of 49 days means data stays on fast local storage for ~7 weeks before moving to S3.

Cost Savings

Cold storage can reduce storage costs significantly: For a deployment with 150 GB/month of trace data, cold storage can save ~$500/year.

S3 Dataset Backups

If you’re using S3 for dataset storage (app.dataplane.enabled: true), protect this data with:
  • S3 Versioning: Enable versioning on the bucket to recover from accidental deletes
  • Cross-region replication: For disaster recovery, replicate to another region
  • Lifecycle policies: Move old versions to Glacier after 30 days

Disaster Recovery Checklist

  • PostgreSQL automated backups enabled (30-day retention)
  • ClickHouse backup CronJobs running (check kubectl get cronjobs)
  • S3 bucket versioning enabled
  • Backup S3 bucket is in a different region or account from primary
  • Restore procedure documented and tested
  • Quarterly restore drills scheduled