Keycloakを認証基盤として本番運用すると、必ず「何を監視すればいいか」に突き当たります。Quarkus版Keycloakが標準で備えるメトリクス・ヘルスチェック・トレーシングを、管理ポート9000の考え方から監視すべきSLI、キャパシティの見方まで、現場の実務目線で整理します。

認証基盤は「落ちていないか」だけでなく「遅くなっていないか」「捌けているか」まで見えて初めて運用に載ります。Quarkus版Keycloak(現行世代)は、拡張プラグインを追加せず標準機能だけで、メトリクス・ヘルスチェック・分散トレーシングをひととおり出せるようになりました。ここでは新しめのバージョン(26系)を基準に、EMWが実案件で押さえている観点を整理します。バージョンによりオプション名や既定値が変わるため、最終的には利用中のバージョンの公式ドキュメントで確認してください。

01まず管理ポート9000を理解する

Keycloakのメトリクス(/metrics)とヘルス(/health)は、既定でアプリ本体とは別の管理インターフェース(management interface)、ポート9000に出ます。ここが旧WildFly版と大きく違う設計思想で、実務上とても重要です。

現場のコツ:「メトリクスが取れない」の相談は、9000がネットワーク的に監視系から到達できていない(SecurityGroup/NetworkPolicyで塞がっている)のが大半です。まずcurl http://<pod>:9000/health/readyが通るかを、監視系と同じ経路から確認してください。

02メトリクスを有効化する

メトリクスは既定で無効です。--metrics-enabled=true(環境変数 KC_METRICS_ENABLED)で有効化します。エンドポイントは/metricsで、レスポンスはapplication/openmetrics-text、つまりPrometheus(OpenMetrics)テキスト形式です。内部的にはMicrometerを基盤にしており、追加拡張なしでJVM・HTTP・DBプール・キャッシュのメトリクスが出ます。詳細は公式のGaining insights with metricsを参照してください。

代表的に出てくる系列(バージョンで増減あり):

HTTPやキャッシュのヒストグラム(パーセンタイル算出用)は既定で無効です。レイテンシSLOを測るなら、http-metrics-histograms-enabled=true、あるいはhttp-metrics-slosで区切り(ミリ秒)を明示的に有効化します。ヒストグラムは系列数(カーディナリティ)が増えてPrometheus側の負荷になるため、必要な範囲で入れるのが実務判断です。

02.5可観測性の全体像

Keycloak (Quarkus) 主ポート 8443 管理ポート 9000 /metrics /health Prometheus scrape /metrics k8s / LB プローブ /health/live, /ready OTel Collector OTLP gRPC :4317 Grafana / Tempo
図:主ポートと管理ポート9000を分離し、メトリクスはPrometheus、ヘルスはプローブ、トレースはOTLPで外部へ送る全体像。

03/healthをKubernetesのプローブに正しく割り当てる

ヘルスチェックも既定で無効です。--health-enabled=true(KC_HEALTH_ENABLED)で有効化すると、9000に4つのエンドポイントが出ます。成功で200 OK、失敗で503、本文はJSONです。詳細はTracking instance status with health checksにあります。

現場のコツ:DBチェックはメトリクスが有効でないと動作しません(その他クラスタ・グレースフルシャットダウン・初期化チェックは独立)。readinessでDB断を検知したいなら--metrics-enabled=trueも併せて有効化してください。またmTLS運用時はプローブがクライアント証明書を要求されないよう、管理インターフェースのクライアント認証をrequest/none側に寄せる必要があります。

liveとreadyの役割分担は事故に直結します。DB一時断でlivenessまで落とすと、全ポッドが同時に再起動して雪崩になります。DB依存はreadinessに寄せ、livenessはプロセス自体の生死だけを見る——これが鉄則です。設計思想はEMWの監視・アラート設計の考え方とも通じます。

04監視すべきSLI(サービスレベル指標)

「全部グラフにする」より、まず少数のSLIに絞るのが運用を楽にします。公式のService Level Indicatorsガイドは、ユーザー体感に直結する3指標を推奨しています。

これらは負荷の大小に依存せず、ユーザーが感じる品質を直接表すのが利点です。CPU使用率のような「原因側」の指標は、SLIが悪化したときに初めて掘る、という順序が実務的です。26.2以降はPrometheus/Grafana向けのダッシュボードも公式配布されており、パスワード検証・DB接続・HTTPメトリクスを含むので、まずこれを土台に自社要件へ寄せるのが早道です。

05OpenTelemetryトレースで遅延の内訳を割る

「ログインが遅い」が来たとき、内訳がDBかLDAPかInfinispanか——これを切るのがトレースです。トレーシングはビルド時オプションtracing-enabled=trueで有効化し、QuarkusのOTel拡張を通じてスパンを出します。詳細はRoot cause analysis with tracingを参照してください。既定値は実務上そのまま使えます。

現場のコツ:サンプリング比(tracing-sampler-ratio)の既定は1.0(全件)。本番でこのままだとトレース基盤のコストが跳ねます。公式も本番では小さめの比率を推奨しています。親子スパンの一貫性が欲しければparentbased_traceidratioですが、外部からのトレースヘッダ操作でサンプリングを釣り上げられるDoSリスクがあるため、外向き経路では親ベースの扱いに注意してください。

06ログとの組み合わせ・キャパシティの見方

メトリクス・トレースと並んでログも三本柱です。Quarkus版はログハンドラ(console/file/syslog)やフォーマット(JSON構造化ログ含む)を選べます。集約基盤(Loki/Elastic等)に流すならJSON出力にし、前述のトレースID付与と合わせると、メトリクスで異常を掴み→ログで文脈を読み→トレースで内訳を割る、という調査導線が一本で通ります。

キャパシティは、単発の瞬間値ではなく飽和(saturation)に近い指標の伸びで見ます。実務でまず見るのは次のあたりです。

数値の絶対値より「負荷を上げたときにどの指標が先に飽和するか」を負荷試験で把握しておくと、増設判断とHA設計(AWS上のHA構成)が根拠を持てます。EMWでは実案件でこの飽和点の特定から監視・キャパシティ計画までを一体で支援しています。実績は導入事例もご覧ください。

まとめ

Quarkus版Keycloakは、拡張なしでメトリクス(Micrometer/OpenMetrics)・ヘルス・OpenTelemetryトレースを標準装備します。ポイントは、(1)管理ポート9000で公開面と分離する、(2)live/ready/startedをプローブに正しく割り当てる、(3)まず可用性・レイテンシ・エラー率の少数SLIに絞る、(4)本番はトレースを間引く、(5)キャパシティは飽和指標の伸びで見る——の5点です。いずれもバージョンでオプションが変わるため、公式ドキュメントで最終確認のうえ導入してください。

参考(一次情報)

Keycloakの監視設計やキャパシティ評価でお困りでしたら、実構築の知見をもとにお問い合わせください。

相談する
← ブログ一覧へ戻る