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は以下の内容になります。
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秒にしてます。
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のダッシュボードを参考にして、運用で確認したい内容に仕上げていくのがいいかと思います。