HomelabImmichframeAssetApiDown¶
Use this runbook when the alert fires. Start with Triage (confirm it is real), then Diagnose, then Resolve. Document anything unique to your environment in the app-specific mk_runbook.md next to the HelmRelease if needed.
| Field | Value |
|---|---|
| Alert | HomelabImmichframeAssetApiDown |
| Severity | warning |
| Team | media |
| PrometheusRule | homelab-immichframe.yaml |
What this means¶
Blackbox cannot get HTTP 200 from ImmichFrame’s /api/Asset/RandomImageAndInfo for 5+ minutes. The frame’s / probe can still be healthy while album/image loading is broken (common after Immich major API changes).
Triage¶
Triage (first 5 minutes)¶
- Acknowledge the alert (note time,
alertname, namespace/release from ntfy). - Check if something changed recently (Git push, chart bump, node drain, storage outage).
- Confirm the alert is still firing in Prometheus / Grafana (Alerting → Alert rules).
- Decide: transient (wait one reconcile interval) vs sustained (continue below).
# Recent events for the namespace (replace NAMESPACE)
kubectl get events -n NAMESPACE --sort-by='.lastTimestamp' | tail -20
- Confirm versions:
kubectl get deploy -n media immichframe-app-template -o jsonpath='{.spec.template.spec.containers[0].image}{"\n"}'
kubectl get deploy -n media immich -o jsonpath='{.spec.template.spec.containers[0].image}{"\n"}'
flux get helmrelease immichframe -n media
- Check ImmichFrame logs for Immich API / deserialize errors (e.g.
AlbumUserRole,owner):
- Confirm the blackbox probe:
probe_success{target="homelab-immichframe-asset"}
probe_http_status_code{target="homelab-immichframe-asset"}
Diagnose¶
Diagnose (Flux HelmRelease)¶
# Replace NAME and NAMESPACE from the alert
export NAME=helmrelease-name
export NAMESPACE=target-namespace
flux get helmrelease "$NAME" -n "$NAMESPACE"
kubectl describe helmrelease "$NAME" -n "$NAMESPACE"
kubectl get helmrelease "$NAME" -n "$NAMESPACE" -o yaml | less
# Helm install job / chart fetch errors
kubectl get pods -n "$NAMESPACE" -l app.kubernetes.io/instance="$NAME"
kubectl logs -n flux-system deploy/helm-controller --tail=80
Common causes
| Symptom | Likely cause |
|---|---|
| Chart not found | Wrong chart name/version or HelmRepository not ready |
| Install timeout | PVC pending, image pull, or resource limits |
| Upgrade failed | Values breaking upgrade; check helm release history |
| Stuck progressing | Stuck Helm hook or pre-upgrade job |
Typical causes:
- ImmichFrame still on an Immich 2.x-era image (
v1.0.33and older) while Immich is v3+ - Flux HelmRelease Stalled / rolled back after a failed upgrade (timeout during node upgrade)
- Wrong
ApiKey/Albumsconfig, or Immich unreachable from the ImmichFrame pod AuthenticationSecretmismatch (probe and clients get 401)
Resolve¶
Resolve (GitOps)¶
Homelab changes must go through Git — do not kubectl apply or patch live resources.
- Identify the manifest under
clusters/main/kubernetes/. - Fix chart version, values, dependencies, or suspend/resume as appropriate.
- Commit, push, and watch Flux:
-
Wait for
Ready=Trueand confirm the alert clears (allowfor:duration + scrape interval). -
Keep ImmichFrame on v1.0.34+ when Immich is v3 (see ImmichFrame releases).
- If the HelmRelease is
Stalled/RetriesExceeded, fix the image tag in Git, push, then:
Escalation¶
Escalation / close-out¶
- Alert resolved in Alertmanager (or silenced with a documented reason and expiry).
- Root cause noted (link PR/commit if GitOps change).
- Update this runbook or the app
mk_runbook.mdif you learned something new.
If the issue is upstream (TrueCharts chart bug, Flux bug), capture logs and open an issue; avoid permanent silences without a ticket.
Applies to¶
- HelmRelease
media/immichframe - Probe target
homelab-immichframe-asset(blackbox-exporter)