ken_nogi/NodeSrv/apps/keycloak-monitor/README.md
Kenichiro NOGI ce58cb4be4 初回コミット: dev配下(NodeSrv/Pleasanter等)をGitea管理下に統合
GitHub(nextgroup2706/ken_nogi)は今後使わず自社Gitea運用に切替え。
NodeSrvは旧リポジトリの履歴を破棄しファイルのみ統合(Dokploy用サービスアカウントは
別途mygit-admin/NodeSrv.gitに履歴あり)。notepmエクスポート(12GB)とPleasanter
インストーラzip(208MB)はサイズが大きいため.gitignoreで除外。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-04 15:37:06 +09:00

56 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# keycloak-monitor
Keycloak(`nexthd`レルム)のSSO疎通を定期監視し、異常時にメール通知するアプリ。
2026-08-13にKeycloakのDB接続断(Docker組み込みDNSのSERVFAIL、詳細はプロジェクトメモリ`project_dokploy_multiserver_plan`参照)でプリザンター・XWikiのSSOが停止した際、発覚が偶然の作業中だったことを受けて作成。
## 何を監視しているか
単純なHTTP 200チェック(`.well-known`等)ではKeycloakプロセスが生きているだけでDB接続断を検知できない(実際に2026-08-13はプロセス自体は200を返し続けていた)。そのため、実際に`client_credentials`グラントでtoken発行を行い、DB接続まで含めた実疎通を確認する。
- 監視対象: `${KEYCLOAK_BASE_URL}/realms/${KEYCLOAK_REALM}/protocol/openid-connect/token`
- 使用クライアント: org-master-syncの既存サービスアカウント(client_credentials、権限追加不要)
## アラートの挙動
単発の揺らぎで通知が飛ばないよう、以下の状態機械(`src/alertState.js`)で制御している。
- `ALERT_THRESHOLD`回連続失敗して初めて通知(デフォルト3回=3分間隔なら3分)
- 通知後もダウンが続く場合は`REALERT_INTERVAL_MINUTES`ごとに再通知(デフォルト30分)
- 復旧したら1回だけ復旧通知を送り、状態をリセット
## ローカル開発
```
cd apps/keycloak-monitor
npm install
cp .env.example .env
# .envにKEYCLOAK_CLIENT_SECRETを設定(apps/xwiki/.envのKEYCLOAK_ADMIN_CLIENT_SECRETと同じ値)
npm run dev
```
`http://localhost:3000/` `http://localhost:3000/health` `http://localhost:3000/status`(直近チェック結果・現在のアラート状態)で確認。
```
npm test
```
## 本番同等の動作確認Docker
```
docker compose -f docker-compose.local.yml up --build
```
## Dokployへのデプロイ
`.claude/skills/dokploy-webapp/SKILL.md`の手順に準拠。このアプリは外部公開ドメインを持たない(portal-sample-batchと同じパターン、`dokploy-network`内部のみ)ため、`docker-compose.yml`にTraefikラベルは付けていない。
1. Gitea(`https://git73.next-hd.net/mygit-admin/NodeSrv.git`)へpush
2. Dokployで新規Compose(`webapps` project、Provider: Gitea、sourceType: gitea、Compose Path: `apps/keycloak-monitor/docker-compose.yml`)を作成、Node A(`52.193.142.134`)へデプロイ
3. Dokploy Environment画面で`.env.example`の内容を設定。特に以下はDokploy側で運用しながら変更する想定:
- `NOTIFY_EMAILS`(通知先、カンマ区切りで複数追加可)
- `CHECK_INTERVAL_SECONDS`(監視間隔)
- `ALERT_THRESHOLD` / `REALERT_INTERVAL_MINUTES`
- `KEYCLOAK_CLIENT_SECRET`(機密情報、必ずDokploy側でのみ設定)
4. デプロイ後、コンテナ内から`/status`を確認して監視が回っていることを確認