Synology Maintenance Handoff
Last updated: 2026-06-22
Use this file as the first stop when starting a new Codex chat or recovering context after an update.
Cross-system future recommendations and postponed changes are tracked in:
FUTURE_CHANGES.md
Cross-system automation, retention, and incident-summary rules are tracked in:
AUTOMATION_PLAN.md
RETENTION_POLICY.md
INCIDENT_REGISTER.md
Connection
- Synology host:
10.0.0.119 - Maintenance user:
codex-maint - SSH key on this PC:
C:\Users\ravic\.ssh\codex-synology\codex-maint-synology - Project root on this PC:
C:\Users\ravic\OneDrive\GitHub\VHNIC - Non-destructive work is allowed: inspect, capture, compare, copy, edit approved config, restart approved containers, and document findings.
- Do not delete, prune, remove, wipe, reformat, or repair anything unless the user explicitly approves the specific target.
- Do not run
btrfs check --repairon the live Synology filesystem. - Prefer read-only diagnostics first, then discuss remediation before making risky changes.
- Keep durable findings in project docs so future chats can recover quickly.
- Summarize incidents in
INCIDENT_REGISTER.mdandincidents/<date-topic>/SUMMARY.mdbefore deleting raw logs or command output. - Treat
/volume1/data/media/personalas off-limits for all modification workflows. It contains irreplaceable family videos. Only perform read-only inventory or backup planning if explicitly requested.
Do not print private keys, API keys, tokens, or full unredacted config values into chat or project notes.
Operating Rules
2026-06-01 Security Review
Report:
security/breach-assessment-20260601.md
Latest privileged audit:
synology/security/audits/20260601-190945/synology-security-audit.txt
Summary:
UniFi, Pi-hole, and Google Cloud DNS data.
excerpts, sudo activity, Docker state/events, listening ports,
shell-capable users, privileged groups, SSH daemon settings, and
scheduler/cron files.
PasswordAuthentication yes; consider disablingpassword auth later after confirming key-based access and emergency admin
access.
disabled.
HTTP/HTTPS reverse proxy. Plex Test removal and Minecraft public-forward
disablement were approved/documented on 2026-06-13; verify live UniFi state
before claiming those rules are gone.
Current Storage Situation
Detailed source of truth: synology/storage/CURRENT_STATE.md
Active rebuild/evacuation plan:
synology/storage/VOLUME1_REBUILD_MIGRATION_PLAN.md
/volume1/data/mediamd2, online as [UUUUUUUU]./volume2/VM Storage/plex/volume2/VM Storage/docker/tdarr2026-06-16 for Volume 1 evacuation.
temp_media/volume4/dev/mapper/cachedev_3md5/volume4/migration-from-volume1 /volume2/docker-v5 for most non-Plex container appdata/projects/secrets.
Plex and Tautulli appdata now run from Volume3 under /volume3/docker.
Follow-up: verify DSM's displayed volume name/number versus the
/volume2/docker-v5 mount path before removing old Volume2/VM Storage
references.
repair/resync is also finished as of the 2026-05-22 post-resync baseline.
[UUUUUUUU].
48.21TiB35,311csum=35311035,311read_io_errs=336, corruption_errs=35311. detected - Vick-NAS at 2026-05-29 02:28 EDT`.
synology/system/privileged-health/20260529-08153835,311 csum errors) and md2 remains active/non-degraded with all eight members present.
56885910093824 in root/subvolume 262, so treat the alert as persistent
Btrfs metadata corruption until Synology support or a rebuild/recreate plan
says otherwise.
SMART passed, no reallocated sectors, no pending sectors, no SMART error log
entries.
/volume1/data/media/reality/Below Deck Mediterranean/Season 9/Below Deck Mediterranean - S09E11 - From Cloud Nine to Flatline.mkv
Post-resync follow-up:
decrease automatically.
56885910093824 before deciding whether more media files need replacement.
This was run on 2026-05-22 and did not resolve to a live file path:
ERROR: logical ino ioctl: No such file or directory.
the known file replacement, consider a Synology support case.
btrfs check --repair.2026-05-30 DSM Hang Follow-Up
Incident docs:
incidents/2026-05-30-synology-service-hang-volume3-restore/SUMMARY.md
incidents/2026-05-30-synology-service-hang-volume3-restore/DEEP_DIVE_FINDINGS.md
Key current interpretation:
synoscgi backend from 2026-05-29 21:56 through at least 2026-05-30 00:39.
56885910093824, was loggingerrors before, during, and after that window.
panic, or SATA reset storm as the direct trigger.
2026-05-29 21:20; several Synologyservices dumped core after the forced reboot. These are preserved as
timeline markers but are not proven root cause.
the unresolved Btrfs metadata corruption, not the restored Volume 3 files.
Recommended posture:
VHNICDsmBackendNotResponding enabled.reboot if practical.
backup/rebuild/migration path if support cannot safely resolve the metadata
corruption.
2026-06-14 Plex Buffering / Volume 1 Storage Follow-Up
Support-case bundle:
synology/support-cases/20260614-volume1-btrfs-md2/
Current interpretation:
requests stayed responsive and CPU/GPU were not saturated.
generic Plex tuning issue.
56885910093824, the same block tracked in earlier Volume 1 investigations.
give up messages while DSM stillreported the array active with all eight members present.
support-case evidence folder; no repair, delete, restart, scrub, balance, or
destructive command was run for the capture.
Recommended posture:
btrfs check --repair and other live repair commands off the table.imports, metadata generation, and bulk moves.
outcome if Synology cannot provide a supported non-destructive repair path.
2026-06-16/17 Volume 1 Evacuation To DX1222 Volume 4
Detailed plan:
synology/storage/VOLUME1_REBUILD_MIGRATION_PLAN.md
Support update:
flip errors dating back to March 2026.
CT16G4SFRA266.C8FF RAM as a likelycontributor.
unsupported RAM, remove/recreate the affected Volume 1, and restore data.
btrfs check --repair.Current migration shape:
/volume1/volume4/migration-from-volume1Critical set has been copied:/volume1/data/media/personal/volume1/data/media/photos/volume1/data/workInitialRemainderAppData, Downloads, UserHomes, Storage, MediaAll /volume4/migration-from-volume1/_runs/20260616-224332-queue-InitialRemainder.out
2026-06-17 00:34 EDT showed active copy item /volume1/docker, about 16.32G processed, 3.44MB/s, and roughly
0.16G remaining according to rsync. This is expected to be slow because
Docker appdata contains many small and actively changing files.
md5 resync, storage timeout/reset language, and synostgd-space segfaults.
Follow-up a little over 12 hours later showed the warning counts did not keep
climbing:
6 and returned to 0,56 and returned to 0,0,md5 remained [UUUUUUUU] with failed disks 0,md5 resync and sustained disk busy.Expect similar creation-time alert noise when Volume 1 is recreated; treat it
as acceptable only if the counts flatten and age out instead of repeating.
Status helper:
powershell -NoProfile -ExecutionPolicy Bypass -File .\tools\synology\Get-Volume1ToVolume4MigrationStatus.ps1
The status helper now includes destination sizes by default with a short timeout.
If it prints a Terminated ( du ... ) line after partial size output, that is
the optional size scan being capped, not the migration failing.
Next posture:
TrueUp.FinalTrueUp.backup/config/restore use:
vhnic-backups/volume4/vhnic-backups\\10.0.0.119\vhnic-backups tools/synology/Stage-Volume4BackupLayout.ps1.
/volume4/migration-from-volume1.
Docker And Appdata
Detailed source of truth:
synology/docker/README.mdsynology/docker/BACKUP_STRATEGY.mdsynology/docker/BAZARR_PLAN.mdCurrent appdata placement is mixed during the Volume 1 rebuild/migration work:
/volume3/docker /volume2/docker-v5
/volume4/migration-from-volume1/volume5-backups/docker-v5
/volume1/docker, /volume1/homebridge, and /volume2/VM Storage.
Do not delete old roots until the current service placement and rollback
posture are validated.
Historical caution: on 2026-05-16, the media-project stack (sonarr,
radarr, lidarr, prowlarr, recyclarr) was cut over to Volume 2 SSD
appdata, then later fell back to Volume 1 after Plex stalls and slow/spinning
Arr access made the migration a suspect variable. The root cause was not proven
to be Volume 2, but the rollback reduced risk and kept services on the known
working layout. See synology/docker/MIGRATION-20260516-media-project.md.
Container project YAML is mirrored locally under:
synology/docker/projects
Refresh from Synology:
powershell -NoProfile -ExecutionPolicy Bypass -File .\synology\docker\Sync-FromSynology.ps1
Upload project YAML back to Synology only when intentionally applying a change:
powershell -NoProfile -ExecutionPolicy Bypass -File .\synology\docker\Sync-ToSynology.ps1 -ProjectName <project> -Apply
The upload helper now refuses to upload any project folder containing a local
.secrets directory unless -AllowSecretsUpload is explicitly supplied. Use
project-specific secret install helpers instead of copying .secrets folders
into /volume1/docker/projects.
Current container security/helper review:
synology/docker/CONTAINER_SECURITY_OPERABILITY_REVIEW.md
Current Container Notes
Seerr / Former Overseerr
Detailed source of truth: synology/docker/OVERSEERR_REVIEW.md
is superseded by Seerr.
seerrghcr.io/seerr-team/seerr:latest/volume1/docker/seerr5055unless-stopped Overseerr to Seerr migration completed successfully.
overseerralways to no, /volume1/docker/overseerr.codex-before-seerr-20260524-232436 was also
removed on 2026-06-01 during approved stale Docker cleanup.
seerr inside the media-project ContainerManager/Docker Compose project:
/volume1/docker/projects/arrs-compose/compose.yaml.
Bazarr
media-project on 2026-06-03 as a conservative subtitlepilot and retired on 2026-06-14 after continuing log noise and no clear value
from the workflow.
media-project compose no longer includes bazarr.autoheal should no longer expect Bazarr.
not recreate the container unless the user explicitly reopens subtitle
automation.
powershell -NoProfile -ExecutionPolicy Bypass -File .\synology\docker\projects\arrs-compose\Remove-BazarrFromMediaProject.ps1 -Apply
Detailed source of truth:
synology/docker/BAZARR_PLAN.md
synology/docker/Bazarr-Runbook.md
synology/docker/Set-BazarrSafeSubtitleProviders.ps1
Audiobook Stack
audiobook Container Manager project.ReadAIrr was retired from the stack on 2026-06-14 after repeated expensive
rescans and bad imports.
synology/docker/projects/audiobook-compose
/volume1/docker/projects/audiobook-compose
audiobookshelf: stable audiobook library/player, host URL http://10.0.0.119:13378.
/volume3/docker/audiobookshelf./volume1/data/media/audiobooks/books./audiobooks/books..m4bfolder.
author/series folders. Audiobookshelf stale missing records were cleaned
through API helpers only; no media files were deleted.
for known duplicate/stale parent records. Latest documented post-cleanup
state is 194 active items, 0 missing, 0 invalid, and 21 series.
https://audiobooks.ravick5.com for ShelfPlayer/app access after DNS and
proxy deployment are complete.
approval.
Reading Stack
Manager project named reading.
synology/docker/projects/reading-compose
/volume1/docker/projects/reading-compose
kavita: ebook/comic/manhwa reader, host URL http://10.0.0.119:7578, image jvmilazz0/kavita:latest.
mylar3: comic/manhwa management candidate, host URL http://10.0.0.119:8091, image lscr.io/linuxserver/mylar3:latest.
/volume3/docker/kavita/config./volume3/docker/mylar3/config./volume1/data/media/books/volume1/data/media/books/comics/volume1/data/media/books/manhwa/books; this isintentional because Kavita should read and serve, not
mutate, the source library.
/comics and /manhwa writable for possible future librarymanagement. Do not configure Mylar3 indexers, download clients, or automatic
acquisition until the user explicitly approves that workflow.
Blackbox HTTP probes for both.
separate Caddy/MFA/SSO discussion, not an automatic follow-on.
Lidarr
media-project with appdata at /volume1/docker/lidarr and media mounted at /data.
preferred library shape:
{Artist Name} {Album Title} ({Release Year})/{Artist Name} - {Album Title} - {track:00} - {Track Title}
{Album Title} ({Release Year})/{Artist Name} - {Album Title} - {medium:00}-{track:00} - {Track Title}
RenameFilescommand per artist. The first attempted all-files command failed because
Lidarr received artistId=0; subsequent artist-scoped commands were the
intended run. If checking later, inspect Lidarr command history/logs for
RenameTrackFileService.
ok before the rename, but repeated transient SQLite database is locked messages were observed under load on 2026-06-04.
Treat recurring lock messages during quiet periods as worth follow-up.
seerr-compose project source is retained as historicalmigration documentation, but it is no longer the active runtime project.
animeSeriesType = standardactiveProfileName = Anime - Dubbed 1080pactiveAnimeProfileName = Anime - Dubbed 1080p/data/media/anime/volume1/docker/overseerr/settings.json.codex-before-anime-fix-20260521
synology/docker/projects/reverse-proxy-compose.
/volume1/docker/projects/reverse-proxy-compose.
/volume3/docker/reverse-proxy.
80/443; Caddy is configured for host ports 8088/8443.overseerr.ravick5.comseerr.ravick5.comrequests.ravick5.com80 -> 10.0.0.119:8088 and public 443 -> 10.0.0.119:8443.
seerr:5055.applicationUrl=https://overseerr.ravick5.com and trustProxy=true; csrfProtection remains disabled until public login and
request testing succeeds.
cacheImages remains false because the app warns this can consumesignificant disk. To address browser mixed-content warnings without enabling
image caching, Caddy now sends:
Content-Security-Policy: upgrade-insecure-requests; block-all-mixed-content.
test one normal request and one anime request, then enable csrfProtection
after testing succeeds.
NZBHydra2
Detailed source of truth:
synology/docker/BACKUP_STRATEGY.mdsynology/docker/VPN_QBIT_NZBHYDRA_REVIEW.mdNZBHydra2 backup retention was reduced on 2026-05-21:
backupFolder: "backup"
backupEveryXDays: 7
backupBeforeUpdate: true
deleteBackupsAfterWeeks: 2
Safety copy on Synology:
/volume1/docker/nzbhydra2/nzbhydra.yml.codex-before-retention-20260521
On 2026-05-27, NZBHydra2 was moved from an unlabeled standalone container
named linuxserver-nzbhydra2-1 into the media-project Compose project as
service/container nzbhydra2. The appdata path did not change:
/volume1/docker/nzbhydra2
The host port remains 5076.
Existing backup ZIP files were not deleted by Codex.
NZBGet
On 2026-05-21, two NZBGet UI errors were fixed by correcting paths in
/volume1/docker/nzbget/nzbget.conf:
CertStore=/config/cacert.pem
SevenZipCmd=/config/app/nzbget/7zz
CertCheck=yes
Safety copy on Synology:
/volume1/docker/nzbget/nzbget.conf.codex-before-path-fix-20260521-173139
/volume1/docker/nzbget/nzbget.conf.codex-before-certcheck-yes-20260521-173437
The nzbget container was restarted after the change. DNS resolution from
inside the container was verified afterward. Certificate checking was then
enabled and the container restarted again; the prior CertCheck is disabled
warning did not reappear in the checked log tail.
On 2026-06-12, the tracked active media-project compose was prepared to move
NZBGet credentials out of YAML and into:
/volume3/docker/media-project/secrets/nzbget.env
Use these helpers from the workspace to apply or repair that state:
powershell -NoProfile -ExecutionPolicy Bypass -File .\synology\docker\projects\arrs-compose\Install-MediaProjectNzbgetSecret.ps1
powershell -NoProfile -ExecutionPolicy Bypass -File .\synology\docker\projects\arrs-compose\Deploy-MediaProjectCompose.ps1 -Apply
powershell -NoProfile -ExecutionPolicy Bypass -File .\synology\docker\projects\arrs-compose\Recreate-NzbgetFromMediaProject.ps1
The first helper may prompt for the NZBGet username/password if the local
ignored .secrets file does not already exist. The recreate helper is scoped to
the nzbget service and does not recreate the rest of media-project.
Recyclarr
Detailed source of truth: synology/docker/RECYCLARR_PLAN.md
explicitly asks to reactivate it. It is not the active preference authority
and should not be scheduled.
1080RealityLanguage: Not English = -10000 and strong rejection for junk patterns such as BR-DISK, LQ, AV1, and
extras.
TV/Reality and Movies/Kids Movies. As of 2026-06-03, active maintenance of
that policy is direct Sonarr/Radarr API helpers rather than Recyclarr:
1080, RealityHD - 720p/1080p tools/synology/arr-vhnic-storage-conscious-quality-caps.sh rather than a
Recyclarr quality-definition block, because preview showed Recyclarr would
otherwise fill omitted 2160p/remux qualities from guide defaults.
Anime - Dubbed 1080p has these Recyclarr scores at 0; leave Anime alone unless there is a separate preview and explicit
approval.
synology/docker/arr-preference-audit/20260603-221118/SUMMARY.md
showed 31 pass, 0 warn, 0 fail.
Set-RadarrMainProfile1080Only.ps1 tightened the main Radarr movie profile so it allows only HDTV-1080p, WEB 1080p,
WEBRip-1080p, and WEBDL-1080p. It disables SD/DVD/480p/720p,
Bluray/remux, and 2160p fallback qualities.
qBittorrent And Gluetun
Detailed source of truth: synology/docker/VPN_QBIT_NZBHYDRA_REVIEW.md
tun0. linuxserver/qbittorrent:5.1.4-r3-ls453.
linuxserver/qbittorrent:5.2.1_v2.0.12-ls459 was tested.The container wrapper started, but the qBittorrent application/WebUI did not
come up cleanly, so the service was rolled back to 5.1.4-r3-ls453.
This is an explicit reviewed pin rather than the floating latest tag.
linuxserver/qbittorrent:5.1.4-r3-ls453, butit is no longer marked Watchtower monitor-only as of 2026-06-12.
com.centurylinklabs.watchtower.depends-on=gluetun.com.centurylinklabs.watchtower.monitor-only=true unless aseparate qBittorrent-after-Gluetun recreate mechanism is installed.
restarted/recreated so it joins Gluetun's new network namespace.
depends_on for Gluetun with restart: true. That helps for explicit Compose operations involving
Gluetun, but it does not guarantee qBit restarts after every possible Docker
daemon/container-runtime restart event.
repair helper synology/docker/projects/vpnproject-compose/Repair-QbitGluetunNamespace.ps1
recreated qBittorrent after ensuring Gluetun existed in the compose graph,
and 10.0.0.119:8090 returned to normal.
and settled healthy. Forwarded port at verification time was 55641.
compose file. Gluetun now expects the key in:
/volume3/docker/gluetun/secrets/gluetun.env.
Use synology/docker/projects/vpnproject-compose/Install-GluetunSecret.ps1
to install that file before recreating Gluetun from compose.
Tdarr
Detailed source of truth: synology/docker/tdarr/README.md
/temp to the direct UNC path \\10.0.0.119\VM Storage\docker\tdarr\transcode_cache. Avoid T:/
for the primary node unless a scheduled-task-safe mapping is proven, because
the node failed transcodes on 2026-06-04 when the mapped drive was
unavailable to the node process after restart. A temporary local cache
test at D:/TdarrCache produced copyFailed entries because the Tdarr
server could not see local-only completed cache files.
00001226.4 GBVHNIC Movies with ID movies01, path /media/media/movies, transcodes enabled, health checks
enabled, folder watching enabled, scheduled scan enabled.
VHNIC TV Shows with ID tvShows01, path /media/media/tv shows, cloned from the Movies library settings.
user may intentionally raise/lower transcode or health-check workers depending
on gaming/RDP/Plex responsiveness.
VHNIC Reality with ID reality01, path /media/media/reality, cloned from the TV Shows library settings.
20 old SurvivorAVI files,
msmpeg4v3 and mpeg4 with malformed MP3 header warnings,Set-TdarrRealityLegacyRepairProfile.ps1 updated only reality01 to usethe local safe fallback plugin as HEVC MP4 with AAC audio,
synology/docker/tdarr/health/20260607-233715/tdarr-health-failures.txtshowed no rows in the current failure table.
have completed the original broad rollout targets. A 2026-06-10 capture
showed queue/errors at zero. A newer 2026-06-11 local capture shows 112
queued transcodes and 98 active jobs with 0 transcode errors and stable
DB load; treat this as the user's remaining evening finish-out queue and
recapture after it drains before changing profiles or adding Anime. Personal
is off-limits.
48 queued files,44 MPEG4/AVI files,4 H.264/MKV files, synology/docker/tdarr/README.md.
synology/docker/tdarr/COMPLETION_MILESTONES.mdsynology/docker/tdarr/NEXT_LIBRARY_ROLLOUT_PLAN.mdsynology/docker/tdarr/ANIME_PROFILE_PLAN.mdsynology/docker/tdarr/native-worker/SECOND_WINDOWS_NODE.mdHomepage Portal
Detailed source of truth:
synology/docker/projects/homepage-compose/README.md
http://10.0.0.119:7576http://10.0.0.119:7577homepage synology/docker/projects/homepage-compose
/volume1/docker/projects/homepage-compose
/volume3/docker/homepage/config
/volume3/docker/homepage/docs
/volume3/docker/homepage/secrets/homepage.env
if live Docker widgets become necessary, prefer a narrow read-only socket
proxy.
after approval. Do not expose Homepage publicly without first deciding on a
VPN/overlay or MFA/SSO access model.
Observability
synology/docker/projects/observability-compose
/volume1/docker/projects/observability-compose
/volume2/docker-v5/appdata/observability
/volume2/docker-v5/appdata/observability/secrets
http://10.0.0.119:3000
adminbootstrap password still works.
workload for the Samsung Volume 3 SSD mirror.
synology/docker/projects/observability-compose/DEPLOYMENT-20260524.md
synology/docker/projects/observability-compose/README.md
VHNIC Service Health: Blackbox reachability checks for Synology apps,Plex TCP, Pi-hole admin/DNS, and UniFi gateway TCP.
VHNIC Synology and Docker Metrics: Node exporter and cAdvisor metrics for Synology CPU, memory, load, /volume1//volume2//volume3 usage,
disk throughput, disk busy percentage, read-latency signals, CPU I/O wait,
network throughput/errors, Synology md/RAID active/failed/maintenance
state, and top container CPU/memory/network.
VHNIC Pi-hole DNS Health: Blackbox DNS probes against PiHolePi4 (10.0.0.195) and PiHole4B (10.0.0.132) for google.com A-record
lookup success and query duration.
VHNIC UniFi Network Health: Blackbox TCP probes for UDM SE HTTPS/SSH andboth U7-Pro APs over SSH, plus live UniFi Integration API metrics for
device state, wired/wireless client counts, and wireless clients by AP.
AP HTTPS was tested but omitted because the APs did not answer on 443.
VHNIC Tdarr Progress: read-only Tdarr SQLite exporter metrics for activejobs, transcode queue, errors, total files, space saved, library counts, and
staged status counts. It also includes Prometheus-history-based queue ETA
panels using one-hour and six-hour queue depletion rates plus an estimated
completion clock. Treat these as directional because Tdarr throughput
changes with file size, codec, worker count, and whether new libraries are
added. Important Grafana implementation detail: the estimated completion
clock query multiplies the projected Prometheus Unix timestamp by 1000
before formatting with dateTimeAsIso; otherwise Grafana displays a
1970-era date.
VHNIC Plex Activity: read-only Tautulli API exporter metrics for activestreams, direct/transcode split, LAN/WAN/total bandwidth, current session
inventory, stream breakdowns by user/platform/location/media type,
per-session bandwidth/progress, recent 24-hour and 7-day play/watch-time
summaries, and Plex library counts. The exporter reads Tautulli's existing
API key from /volume1/docker/tautulli/config.ini at runtime; the key is
not stored in tracked project files.
VHNIC Infrastructure Overview: single-glance summary that combines coreservice failures, Synology load/storage, Tdarr queue/errors, DNS/UniFi
latency, UniFi client/device counts, container memory, and Plex
stream/transcode status.
VHNIC Alert Watch: passive Prometheus alert view for exporter failures,service probe failures, high volume usage, sustained disk busy time,
Synology RAID failed disks or maintenance/resync/check state, Tdarr errors,
Plex transcodes, and UniFi offline devices. Warning notification routing to
Discord is now configured through Alertmanager and discord-alert-bridge;
info alerts remain dashboard-only.
VHNIC Public Exposure: public Seerr/reverse-proxy reachability, HTTPstatus, TLS certificate expiration, and Seerr/Caddy container resource
signals.
VHNIC Storage Integrity: Volume 1/2/3 space, Btrfs error counters andincreases, filesystem read-only/device-error flags, RAID member/sync state,
disk busy/throughput/latency, temperature/fan metrics, and container OOM
event counts. Known old Volume 1 Btrfs corruption counters are historical;
alerting focuses on new growth.
VHNIC Observability Stack Health: Prometheus readiness, scrape targetstate, rule-evaluation failures, scrape durations/sample rates, exporter
health, scrape failures, and firing alerts.
2026-05-25:
Prometheus sends alerts to Alertmanager, Alertmanager routes
severity="warning" alerts to discord-alert-bridge, and the bridge posts
to a Discord webhook stored only in an ignored/protected secret file. Info
alerts remain dashboard-only to avoid notification noise.
synology/docker/projects/observability-compose/prometheus/alerts.yml.
/volume2/docker-v5/appdata/observability/secrets/unifi.local.envat runtime. Install/update that remote secret from the ignored local
tools/unifi/.secrets/unifi.local.env file with:
synology/docker/projects/observability-compose/Install-ObservabilityUnifiSecret.ps1.
The API key should not be committed.
synology-nodedocker-cadvisorpihole-dnstdarrtautulliunifiservice-httpservice-tcpsynology-node 1/1 up
docker-cadvisor 1/1 up
tdarr 1/1 up
tautulli 1/1 up
unifi 1/1 up
pihole-dns 2/2 up
service-http 11/11 up
service-tcp 9/9 up
alertmanager up,discord-alert-bridge up,service-http expanded to include Seerr public aliases and alertingendpoints,
17VHNICExpectedContainerMissing watches expected always-on containers.VHNICContainerRestartingOften watches repeated restarts. Pi-hole v6 API endpoints returned 401 Unauthorized; current Pi-hole
monitoring is DNS probe health only.
device/client state, not WAN throughput, AP channel utilization, retry
rates, or client experience.
and notification noise still need real-world tuning.
Automation And Retention
Codex VHNIC Weekly Maintenance Report runs Sundaysat 07:30 and writes read-only report bundles under
reports/weekly-maintenance.
review-vhnic-weekly-maintenance-report reviews the weeklyreport Sundays at 09:30.
refresh-vhnic-project-docs-and-handoff refreshes fullproject docs and handoff material Mondays at 09:00.
Exact-path approval is still required before deletion.
Desktop / Apollo
ApolloService.D:\Program Files\Apollo\tools\sunshinesvc.exe.LocalSystem and should not require interactive login.ApolloService running,47984, 47989, 47990, and 48010 listening. still fails, check service recovery/events and D:\Program Files\Apollo\config\sunshine.log.
Container Manager Project Alignment
The 2026-05-27 Container Manager organization pass verified that active
containers now have Compose project labels that match the intended Synology
Container Manager project rows where possible. Important current mappings:
media-project: Sonarr, Radarr, Prowlarr, Lidarr, NZBHydra2,Seerr, NZBGet
homepage: Homepage internal VHNIC portalreading: Kavita and Mylar3 internal reading stackmonitoring: Grafana, Prometheus, Alertmanager, exporters, cAdvisor,Blackbox, Node exporter, Discord alert bridge
vpn-project: Gluetun and qBittorrentplex: Plex and Tautullireverse-proxy-compose: Caddy reverse proxytdarr: Tdarr, with source folder /volume2/VM Storage/projects/tdarr-compose
The 2026-05-27 image refresh is documented in
synology/docker/IMAGE_UPDATE_LOG.md.
If Synology Container Manager still displays zero containers for one of those
project rows after refreshing the UI, treat it as DSM project registry/cache
drift first. Docker itself currently reports the Compose projects correctly.
Do not delete appdata, Docker volumes, or media to repair this. Wrapper
replacement is acceptable only after confirming the compose file, appdata paths,
and rollback plan.
DSM stores registered Container Manager project metadata under
/volume1/@appconf/ContainerManager/projects, which is root-readable only.
Do not hand-edit those files without first capturing a backup and confirming
the exact DSM schema. Prefer importing/registering projects through Container
Manager when possible.
On 2026-05-27, the user registered missing DSM Project rows through Container
Manager's UI for:
monitoringtdarrreverse-proxy-composeAfter registration on 2026-05-27, before later Recyclarr and Dispatcharr
cleanup, the Container Manager Project page showed:
media-project 9 containers
reverse-proxy-compose 1 container
monitoring 10 containers
tdarr 1 container
plex 2 containers
watchtower 1 container, stopped
vpn-project 2 containers
Docker-side verification at that point matched:
media-project running(8)
monitoring running(10)
plex running(2)
reverse-proxy-compose running(1)
tdarr running(1)
vpn-project running(2)
The media-project count differs because Recyclarr is intentionally stopped
and DSM counts it in the project while docker compose ls reports running
containers.
Later on 2026-05-27, Recyclarr was removed from media-project because its
normal stopped state made the whole DSM project look unhealthy. Its appdata was
left intact at /volume1/docker/recyclarr; only the stopped container wrapper
was removed. Recyclarr should be run manually or through a controlled helper
when profile sync is desired.
Later on 2026-05-29, Dispatcharr was removed from media-project because the
IPTV provider will not be renewed. Compose was redeployed with
--remove-orphans, the Dispatcharr container was stopped/removed, and
monitoring expected-container rules were updated so it is no longer treated as
missing. Stale appdata at /volume1/docker/dispatcharr was removed on
2026-06-01 after exact approval.
Final desired Docker project grouping after this cleanup:
media-project: running(7)
homepage: running(1)
monitoring: running(10)
plex: running(2)
reverse-proxy-compose: running(1)
tdarr: running(1)
vpn-project: running(2)
watchtower: running from its own project; qBittorrent is pinned but not monitor-only
Later on 2026-05-27, the user chose to run Watchtower again now that
qBittorrent is pinned. Watchtower was recreated from
its Compose project after correcting TZ=America/New_York so the schedule runs
at local 2 AM rather than UTC 2 AM. The compose project name was also set
explicitly to watchtower so Synology Container Manager and Docker labels
match. Verification showed:
watchtower Up, healthy
com.docker.compose.project=watchtower
first run scheduled 2026-05-28 02:00:00 -0400 EDT
On 2026-06-12, tracked Homebridge and Watchtower compose files were hardened
with security_opt: no-new-privileges:true. To apply the tracked state on the
Synology, run:
powershell -NoProfile -ExecutionPolicy Bypass -File .\synology\docker\Apply-HomebridgeWatchtowerHardening.ps1 -Apply
Expect a brief Homebridge interruption while the container is recreated.
On 2026-05-27, Tdarr was moved from implicit project name tdarr-compose to
explicit project name tdarr. The container restarted cleanly and endpoints
answered afterward:
8265 Web UI: 200
8266 server API: 302
9201 Tdarr exporter: 200
During the post-restart scan, Tdarr logged one storage read error:
EIO lstat /media/media/tv shows/Obi-Wan Kenobi/Season 1/Obi-Wan Kenobi - S01E02 - Part II.mkv
Treat that as a candidate file/path/storage follow-up; do not delete or repair
anything without explicit approval.
Plex
Detailed source of truth: synology/docker/plex-diagnostics/20260515-235255/FINDINGS.md
ok for the main library DB and blobs DB. are documented in synology/docker/PLEX_PLAYLISTS.md.
at runtime and do not print it.
Open Decisions
authenticated metrics, deeper UniFi metrics, or desktop Tdarr worker health.
homebridge version 4.1.2,
homebridge, container homebridge, image homebridge/homebridge:latest,
/volume1/homebridge,8581; bridge port is 51537, synology/docker/projects/homebridge-compose/compose.yaml,
/volume1/docker/backups/homebridge/homebridge-before-docker-.tar.gz,
synology/docker/HOMEBRIDGE_REVIEW.md,Homebridge UI and expects the homebridgecontainer,
showRequestResponse=false, firmware override 2.10, friendly device
name RainBird Controller, and local compatibility patch helper
synology/docker/homebridge/Patch-HomebridgeRainBirdPlugin.ps1,
RainBird Controller TCP reachability probe on 10.0.0.24:80,
persist/ plus accessories/ to avoid resetting HomeKit pairing.
overseerr.ravick5.com, seerr.ravick5.com, and requests.ravick5.com. Future work is notification
routing and CSRF hardening, not basic alias creation.
10.0.0.126workers.
Recent User Preferences
profile.
videos and must not be modified.