blumeops/argocd/manifests/grafana-config/dashboards
Erich Blume c78b86c72c Add offsite backup for immich photo library to BorgBase (#315)
## Summary

- Adds a second borgmatic config (`photos.yaml`) that backs up `/Volumes/photos` (sifaka SMB mount, ~128 GB) to a dedicated BorgBase repo (`immich-photos`), running daily at 4 AM
- Separate launchd agent (`mcquack.eblume.borgmatic-photos`) so photo backups run independently from the main backup
- Refactors `borgmatic_metrics` script to support multiple repos with a `repo` Prometheus label
- Updates Grafana "Borg Backups" dashboard with a `repo` template variable so you can filter/compare repos
- Docs updated: `backups.md`, `borgmatic.md`

## Prerequisites (manual)

- [x] Create `immich-photos` repo on BorgBase with same SSH key
- [ ] Upgrade BorgBase plan to Small ($24/yr) if currently on free tier (128 GB exceeds 10 GB limit)
- [ ] After deploy: `borg init` the new repo (borgmatic does this automatically on first run)

## Test plan

- [ ] Dry run: `mise run provision-indri -- --check --diff --tags borgmatic,borgmatic_metrics`
- [ ] Deploy borgmatic role and verify both configs deployed
- [ ] Run `borgmatic --config ~/.config/borgmatic/photos.yaml create --verbosity 1` manually for first backup (will take hours)
- [ ] Verify metrics script collects from both repos: `~/.local/bin/borgmatic-metrics && cat /opt/homebrew/var/node_exporter/textfile/borgmatic.prom`
- [ ] Sync grafana-config in ArgoCD and verify dashboard repo selector works

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Reviewed-on: #315
2026-03-27 19:43:05 -07:00
..
configmap-alerts.yaml Move Alerts dashboard into Infrastructure Alerts folder 2026-03-23 21:20:14 -07:00
configmap-borgmatic.yaml Add offsite backup for immich photo library to BorgBase (#315) 2026-03-27 19:43:05 -07:00
configmap-cv-apm.yaml Fix cache hit rate on APM and Fly.io dashboards (#177) 2026-02-12 18:40:48 -08:00
configmap-devpi.yaml Log filtering cleanup and observability improvements (#45) 2026-01-22 17:30:08 -08:00
configmap-docs-apm.yaml Fix cache hit rate on APM and Fly.io dashboards (#177) 2026-02-12 18:40:48 -08:00
configmap-flyio.yaml Fix cache hit rate on APM and Fly.io dashboards (#177) 2026-02-12 18:40:48 -08:00
configmap-forgejo.yaml Add fly.io proxy observability and app logs to Forgejo dashboard 2026-03-03 10:24:53 -08:00
configmap-frigate.yaml Fix Frigate detection events rate metric name in Grafana dashboard 2026-02-25 16:51:57 -08:00
configmap-jellyfin.yaml Add Jellyfin media server deployment (#77) 2026-01-30 16:57:26 -08:00
configmap-kubernetes.yaml Replace OOMKilled stat with detail table, shrink waiting reason panel 2026-03-04 20:58:11 -08:00
configmap-loki.yaml K8s Migration Phase 2: Grafana to Kubernetes (#30) 2026-01-19 14:40:25 -08:00
configmap-macos.yaml Log filtering cleanup and observability improvements (#45) 2026-01-22 17:30:08 -08:00
configmap-postgresql.yaml Fix XID Age graph to show threshold context (#69) 2026-01-29 07:08:21 -08:00
configmap-ringtail.yaml Add multi-cluster observability with ringtail metrics and dashboards (#270) 2026-02-25 22:01:00 -08:00
configmap-sifaka-disks.yaml Operations and observability for sifaka NAS (#135) 2026-02-09 17:44:05 -08:00
configmap-snowflake-proxy.yaml Deploy Tor Snowflake proxy on ringtail (#311) 2026-03-24 20:51:40 -07:00
configmap-tempo.yaml Add OpenTelemetry distributed tracing (Tempo + Beyla eBPF) (#286) 2026-03-05 10:51:07 -08:00
configmap-transmission.yaml Fix per-torrent rate panels showing cumulative bytes instead of rates 2026-03-05 08:01:37 -08:00
configmap-zot.yaml K8s Migration Phase 2: Grafana to Kubernetes (#30) 2026-01-19 14:40:25 -08:00