Runbook
Triage steps for the optional Helm prometheusRule alerts and related
operational failures. Metrics reference: Metrics.
Dashboard: Grafana.
Enable rules with Prometheus Operator:
GitHubDeploymentBridgeNotReady needs kube-state-metrics.
App-metric alerts need the ServiceMonitor (or equivalent scrape) so series carry
namespace and pod labels.
Do not page on deployment_failures_total - that counts Flux/app
failure statuses (expected when a reconciliation fails). Use
deployment_errors_total for bridge-only faults.
Bridge not ready
Alert: GitHubDeploymentBridgeNotReady
Meaning: The Deployment has unavailable replicas for ≥ 5m.
Check:
kubectl -n <ns> describe deploy <release>- events for FailedAttachVolume, ImagePullBackOff, CrashLoopBackOff.- With
persistence.enabled(default), upgrades useRecreate. A stuck old pod holding an RWO volume blocks the new pod - delete the old pod only if it is Terminating / stuck; otherwise wait for detach. - Confirm
replicaCount: 1with a PVC (chart fails closed on multi-replica + PVC). - Logs:
kubectl -n <ns> logs deploy/<release> --previousif crashing.
Bridge errors
Alert: GitHubDeploymentBridgeErrors
Meaning: deployment_errors_total is rising - the bridge posted GitHub
Deployment status error (its own fault), not Flux failure.
Check:
- Logs around the spike for GitHub/OCI/cache errors.
- GitHub App Secret:
app-id,installation-id,private-keypresent and valid; installation covers the target repos (GitHub App). - PVC / SQLite:
/datamounted and writable (Persistence). - Workload opt-in:
github-deployment-bridge.io/auto-report=trueplus OCI labels or annotation overrides (Architecture).
GitHub API failures
Alert: GitHubDeploymentBridgeGitHubAPIFailures
Meaning: Sustained github_api_failures_total (auth, permissions, rate
limit, or GitHub outage).
Check:
- App permissions: Deployments R/W, Contents R, Metadata R on the installation.
GITHUB_BASE_URL/config.githubBaseURLfor GHES.- Rate limits: GitHub
Retry-After/ rate-reset headers are honored on retry (up to 5 minutes per attempt). Raiseconfig.retry.maxAttempts/ backoff for stubborn limits; check App secondary rate-limit docs if thrashing continues. - NetworkPolicy egress: HTTPS (and DNS) allowed to GitHub / GHES.
GitHub API high latency
Alert: GitHubDeploymentBridgeGitHubAPIHighLatency
Meaning: p99 github_api_latency_seconds above the chart threshold
(default 5s) for 15m.
Check:
- GitHub / GHES status and path latency from the cluster.
- Whether a burst of reconciliations coincides (many Flux objects updating).
- Optionally raise
prometheusRule.githubAPILatencyP99Secondsif the baseline for your region/GHES is higher.
Deployments missing in GitHub (no alert)
When alerts are quiet but GitHub shows no Deployment:
- Flux object reconciled? Conditions and inventory populated (HelmRelease needs Flux ≥ 2.8).
- Workload opted in (
auto-report=true) and images reachable for OCI inspect (Registries). - Environment name: distinct
config.environmentper cluster if multiple bridges share a repo. - Dedup cache: same
(owner, repo, environment, commit, deploymentName)skips duplicates - expected after retries.
Deployment log link is missing (no alert)
- Confirm
LOG_URL_TEMPLATE/config.logURLTemplate, or the workload'sgithub-deployment-bridge.io/log-urloverride, is non-empty. - Search bridge logs for
log URL template expanded to an invalid HTTPS URL. Invalid links are intentionally omitted without failing reconciliation or GitHub deployment/status reporting. - The expanded URL must be absolute HTTPS. Enable
LOG_URL_TEMPLATE_ESCAPE=true/config.logURLTemplateEscape: truewhen workload values appear in paths or query parameters. - Copy a known-good preset and replace its host and dashboard/datasource identifiers.