Keycloak Metrics SPIで、Red Hat SSO(Keycloak)の稼働統計をGrafanaで見る


Red Hat Single Sign-on(以下、Red Hat SSO)の稼働統計をGrafanaで見てみます。
Red Hat SSOは、OSSのKeycloakをベースとした製品で、サポートを受けることができます。

稼働統計は、コミュニティのAerogear Keycloak Metrics SPIを利用します。
Keycloak Metrics SPIは、Red Hat SSOのサポート対象ではありませんが、利用することは可能です。
ちなみに、Red Hat SSOのコンテナイメージは、Prometheusメトリクスが利用可能ですが、ログイン回数などのメトリクスはなく、Red Hat SSOの土台になっているJBoss EAPのメトリクスのみとなっています。(2021/10/18時点)

本手順は、Red Hat SSOのインストールから実施していきます。
(Keycloakでもインストールバイナリが異なるだけで手順は同じになります)

環境

・OpenJDK 8
・Red Hat SSO 7.5.0 (Keycloak 15.0.2)
・Aerogear Keycloak Metrics SPI 2.5.1

1. Red Hat SSOのインストール

Red Hat カスタマーポータルにログインし、 Red Hat SSOをダウンロードします。
※本来はパッチもダウンロードして、パッチを当ててください。(執筆時はパッチは出てませんでした)
Red Hat SSOのzipインストールは、zip解凍すれば終わりです。配置場所は、任意です。

$ unzip rh-sso-7.5.0-server-dist.zip

zipを展開して作成したディレクトリーは、SSO_HOMEとします。
環境変数にしておきます。

$ export SSO_HOME="zipを展開して作成したディレクトリー"

Red Hat SSOの管理ユーザも作っておきます。(便宜上、admin/adminで作ってます)

$ $SSO_HOME/bin/add-user-keycloak.sh -u admin -p admin
Added 'admin' to '/xxxx/standalone/configuration/keycloak-add-user.json', restart server to load user

・参考手順

2. Aerogear Keycloak Metrics SPIのインストールとセットアップ

$SSO_HOME/standalone/deploymentsに配置すればOKです。

$ cd $SSO_HOME/standalone/deployments
$ curl -LO https://github.com/aerogear/keycloak-metrics-spi/releases/download/2.5.1/keycloak-metrics-spi-2.5.1.jar
$ touch keycloak-metrics-spi-2.5.1.jar.dodeploy
$ ls
README.txt              keycloak-metrics-spi-2.5.1.jar      keycloak-metrics-spi-2.5.1.jar.dodeploy

metrics-listener eventを有効化

metrics-listener eventを有効化します。これは、GUIでもできるのですが、手順作るのが楽なCUIでやります。

まずはRed Hat SSOを起動しておきます。
引数でバインドアドレスをワイルドカード(0.0.0.0)にしているのは、後述するPrometheusとGrafanaのインストールをdockerでやっているためです。(PrometheusからRed Hat SSOのメトリクス取得を楽にやるため)

$ $SSO_HOME/bin/standalone.sh -b 0.0.0.0

次に別ターミナルで、metrics-listener eventを有効化します。

$ $SSO_HOME/bin/kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin --password admin
Logging into http://localhost:8080/auth as user admin of realm master
$ $SSO_HOME/bin/kcadm.sh update events/config -s "eventsEnabled=true" -s "adminEventsEnabled=true" -s "eventsListeners+=metrics-listener"

これで、メトリクスは取得できるので、curlで確認します。

$ curl http://localhost:8080/auth/realms/master/metrics
# HELP keycloak_user_event_CLIENT_LOGIN Generic KeyCloak User event
# TYPE keycloak_user_event_CLIENT_LOGIN counter
# HELP keycloak_user_event_REGISTER_NODE Generic KeyCloak User event
# TYPE keycloak_user_event_REGISTER_NODE counter
# HELP keycloak_user_event_VALIDATE_ACCESS_TOKEN_ERROR Generic KeyCloak User event
# TYPE keycloak_user_event_VALIDATE_ACCESS_TOKEN_ERROR counter
・・・

・参考手順

3. PrometheusとGrafanaのインストールとセットアップ

PrometheusとGrafanaは、dockerでやってしまいます。(やっぱり、コンテナは楽です)

以下のファイル構成で作成していきます。

$ tree .
.
├── docker-compose.yml
└── prometheus
    └── prometheus.yml

docker-compose.ymlは以下の内容になります。

docker-compose.yml
version: "3"

services:
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    volumes:
      - ./prometheus:/etc/prometheus/
    ports:
      - 9090:9090

  grafana:
    image: grafana/grafana
    container_name: grafana
    environment:
    - TERM=linux
    - GF_INSTALL_PLUGINS=grafana-piechart-panel # メトリクスのダッシュボードで必要となります
    ports:
      - 3000:3000

prometheus.ymlは以下の内容になります。
targetsのIPアドレスは、RH-SSOが動作しているマシンのIPアドレスにします。
インターバルは、すぐ確認したいので、5秒にしてます。

prometheus-compose.yml
global:
    scrape_interval: 5s 
    evaluation_interval: 5s
    external_labels:
      monitor: "sso-monitor"

rule_files:

scrape_configs:

  - job_name: "keycloak"  # メトリクスのダッシュボードがkeycloakのjob名を参照するので、ここはkeycloakにします

    metrics_path: /auth/realms/master/metrics
    static_configs:
      - targets: ["192.168.68.111:8080"] # RH-SSOが動作しているマシンのIPアドレスにします

ファイルの準備ができたら、起動します。

$ docker-compose up -d 
Creating network "sso-metrics_default" with the default driver
Creating grafana    ... done
Creating prometheus ... done

4. Prometheusを見てみる

prometheusは、http://localhost:9090 にアクセスすると表示できます。
statusタブからtargetを押すとprometheus-compose.ymlで設定したjob_nameの"RH SSO"が確認できます。

5. Grafanaの設定とGrafanaを見てみる

Grafanaは、http://localhost:3000 にアクセスすると表示できます。
IDとパスワードは、admin/adminで入れます。なお、ログインするとパスワード変更が求めれます。

DataSourceを設定する

左ペインのConfigurationからDataSourceタブで、Prometheusを選択します。
HTTPのURL項目に、http://prometheus:9090 を入力して、save&testを実行します。

Keycloak Metricsのダッシュボードを設定する

Keycloak Metrics用のダッシュボードが、公開されていますので、それを利用します。

左ペインのDashBordsからManagerを選択し、Importを選択します。
Import via grafana.comの項目に、https://grafana.com/grafana/dashboards/10441 を入力して、Loadを実行します。

後は、Dash BoardからKeycloak Metricsを参照することで、Realmやクライアント(アプリケーション)毎のログイン回数などが表示されます。

6. まとめ

Red Hat SSOのインストールからGrafanaで稼働統計を見るとこまでの手順を記載しました。
運用で実際使うGrafanaのダッシュボードでは、このRealmだけ見たいや、トークンの状況を重点的に見たいなどあると思います。
いずれもカスタマイズ可能なので、Keycloak Metricsのダッシュボードを参考にして、運用で確認したい内容に仕上げていくのがいいかと思います。