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

2.9 KiB
Raw Permalink Blame History

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を確認して監視が回っていることを確認