groups: - name: orbit.process rules: - alert: OrbitMetricsUnavailable expr: up{job="orbit"} == 0 for: 2m labels: severity: warning annotations: summary: "Orbit metrics target is unavailable" description: "Check the metrics listener, private network and process health. This does not prove that business tasks have stopped." - alert: OrbitRuntimeBatchStalled expr: (time() - orbit_runtime_batch_last_success_timestamp_seconds{job="orbit"} > 30) and on (job, instance) (time() - orbit_process_start_time_seconds{job="orbit"} > 60) for: 1m labels: severity: warning annotations: summary: "Orbit background component has no recent successful batch" description: "Inspect database availability, schema readiness and batch errors before changing limits or retrying business effects." - alert: OrbitRuntimeBatchErrors expr: rate(orbit_runtime_batch_total{job="orbit",outcome="error"}[5m]) > 0 for: 2m labels: severity: warning annotations: summary: "Orbit background batches are failing" description: "Use process logs and durable task/workflow audit to investigate. Batch errors are not business failures." - alert: OrbitDBPoolWaiting expr: rate(orbit_db_wait_duration_seconds_total{job="orbit"}[5m]) > 0.1 for: 5m labels: severity: warning annotations: summary: "Orbit is waiting for MySQL connections" description: "Correlate pool use with database locks, query latency and storage load before increasing the connection limit." - alert: OrbitInvalidMetricUpdates expr: increase(orbit_observability_rejected_samples_total{job="orbit"}[5m]) > 0 for: 1m labels: severity: warning annotations: summary: "Orbit rejected an internal metrics update" description: "Check instrumentation changes for unsupported names, types, labels or counter regressions."