Skip to content

feat(homeserver): journald の壊れの合図を ntfy に流す - #378

Open
gapul wants to merge 1 commit into
mainfrom
feat/log-alerts
Open

feat(homeserver): journald の壊れの合図を ntfy に流す#378
gapul wants to merge 1 commit into
mainfrom
feat/log-alerts

Conversation

@gapul

@gapul gapul commented Aug 16, 2026

Copy link
Copy Markdown
Owner

結論から: Loki は入れない

「ログ集約をやる」で調べ始めたが、集約は既にできていた。 30 コンテナすべてが
log-driver = journald なので、journalctl 一本で横断検索が効く。今日 6 件の不具合を
掘り出したときも、必要な情報は全部そこにあった。

足りなかったのは収集ではなく「誰も見に行かない」ことの方。gatus は HTTP が 200 なら
緑のままで、6 件とも何日も埋もれていた。

なので収集基盤を足すのではなく、壊れの合図を拾って ntfy に流す ものを書いた。
新しいストレージも UI も増えない。過去に遡って横断クエリしたくなったら Loki を考える
(いまは 5 日分で 1GB なので、保持を伸ばすだけなら journald の設定で済む)。

拾うもの

誤検知で鳴り続けると読まなくなるので、「放置すると壊れたままになる」ものだけに絞った。
単発の ERROR は拾わない。

検索語 意味
Activating recovery mode HA が recovery mode に落ちた
stale sessions detected fgc のストアセッションが切れた
refusing to access private network miniflux が自前 RSSHub を読めていない
Failed to establish secure session Matter のペアリング失敗
Discovery timed out Matter がデバイスを見つけられない
permission denied 権限まわりの拒否

これに加えて failed unit と restic の失敗も見る。

実測

直近 24 時間で走らせたら 4 件飛んだ。fgc のセッション切れ、miniflux の RSSHub 拒否、
Matter の 2 件。どれも今日まで誰も気づいていなかったもので、この仕組みがあれば当日に
通知されていた。

ntfy 側に alerts ユーザー (トピック alerts への write-only) とトークンを作り、
/var/lib/secrets/ntfy-alerts.token に置いてある。

ログ集約そのものは既にできていた。30 コンテナすべてが log-driver=journald
なので journalctl 一本で横断検索が効く。2026-08-16 に 6 件の不具合を掘り出した
ときも、必要な情報は全部そこにあった。足りなかったのは「誰も見に行かない」
ことの方で、gatus は HTTP が 200 なら緑のままだった。

なので Loki は入れない。過去に遡って横断クエリしたくなったら考える。いまは
5 日分で 1GB なので、保持を伸ばすだけなら journald の設定で済む。

15 分おきに journalctl を引いて、放置すると壊れたままになる合図だけ拾う。
単発の ERROR は拾わない (鳴り続けると読まなくなるため)。failed unit と
restic の失敗も見る。

実測: 直近 24 時間で走らせたら 4 件飛んだ。fgc のセッション切れ、miniflux の
RSSHub 拒否、Matter の 2 件。どれも今日まで誰も気づいていなかったもの。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant