# Prometheus alert rules for FinData OS (scrape http://:8600/metrics from a private address; the # endpoint also evaluates docs/OPERATIONS.md health checks on every scrape). groups: - name: findata rules: - alert: FinDataLakeDiskLow expr: findata_lake_free_gb < 120 for: 30m labels: {severity: warning} annotations: {summary: "Lake volume below 120 GB free"} - alert: FinDataLakeDiskCritical expr: findata_lake_free_gb < 60 for: 5m labels: {severity: critical} annotations: {summary: "Lake volume below the 60 GB hard stop — ingestion refuses to write"} - alert: FinDataIngestDeadJobs expr: findata_jobs{status="dead"} > 0 for: 10m labels: {severity: critical} annotations: {summary: "Jobs in the dead-letter queue"} - alert: FinDataStaleBars expr: findata_vendor_lag_days{dataset="market_bars.stock.1m.raw"} > 0 for: 6h labels: {severity: warning} annotations: {summary: "1-minute bars are behind the vendor's last_update"} - alert: FinDataNoRecentSession expr: findata_dataset_freshness_days{dataset="market_bars.stock.1m.raw"} > 5 for: 1h labels: {severity: warning} - alert: FinDataBackupStale expr: findata_backup_age_hours > 48 for: 1h labels: {severity: warning} - alert: FinDataApiLatency expr: histogram_quantile(0.95, sum(rate(findata_http_request_seconds_bucket[5m])) by (le, route)) > 5 for: 15m labels: {severity: warning} - alert: FinDataQualityErrors expr: findata_quality_anomalies_7d{severity="error"} > 100 for: 1h labels: {severity: warning}