keycloak に prometheus エンドポイントを追加する
keycloak に prometheus エンドポイントを追加してみたときの作業メモです。
今回は aerogear/keycloak-metrics-spi
を使ってみました。
aerogear/keycloak-metrics-spi について
- Keycloak の EventListenrに追加することでPrometheus用のメトリクスを出力する
- Keycloak に Prometheus Endpoint が追加されるためこのProviderを入れるだけでPrometheusにデータを送れる
- JVM パラメータもメトリクスとして出力される
できること
- Keycloak の各種 Event を Prometheusフォーマットで出力できる
- JVM パラメータもメトリクスとして出力される
- Prometheus Endpoint が起動する(
/auth/realms/ /metrics)
できないこと
- (今のところ見つからない)
環境
Keycloak 6.0.1
Docker 19.03
手順
keycloak への provider インストール
keycloak に provider をインストールする手順をまとめます
SPIモジュールのビルド
今回インストールするモジュールは以下 https://github.com/aerogear/keycloak-metrics-spi
clone、build
$ git clone git@github.com:aerogear/keycloak-metrics-spi.git $ cd keycloak-metrics-spi/ $ docker run --rm -v $PWD:/app -w /app -u $UID:$GID gradle gradle clean build $ ls build/libs/ keycloak-metrics-spi-1.0.2-SNAPSHOT.jar
ビルドに成功すると build/libs/keycloak-metrics-spi-1.0.2-SNAPSHOT.jar
が生成されます
keycloak コンテナの作成
リソースの準備
artifacts/
- 前項で作成した
keycloak-metrics-spi-1.0.2-SNAPSHOT.jar
- 前項で作成した
Dockerfile
FROM jboss/keycloak:6.0.1 USER root COPY artifacts/*.jar /opt/jboss/keycloak/providers/ EXPOSE 8080 9990 ENTRYPOINT [ "/opt/jboss/tools/docker-entrypoint.sh" ] CMD ["-b", "0.0.0.0", "-bmanagement", "0.0.0.0"]
コンテナーイメージ Build
$ docker build -t keycloak-prometheus ./
keycloak 起動
$ docker run -d -p 18080:8080 \
-e KEYCLOAK_USER=admin \
-e KEYCLOAK_PASSWORD=admin \
--name keycloak \
keycloak-prometheus
- http://localhost:18080 にアクセス
- admin/admin で admin console にログイン
- ServerInfo に metrics-listener が表示されていたらProviderのインストールは成功
- Manage -> Events -> Events Config で EventsListener に metrics-listener を追加します
prometeus の起動
- prometheus.yml
global:
scrape_interval: 15s # By default, scrape targets every 15 seconds.
# Attach these labels to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
external_labels:
monitor: 'codelab-monitor'
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
- job_name: 'keycloak'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
metrics_path: '/auth/realms/master/metrics'
static_configs:
- targets: ['keycloak:8080']
prometheus の起動
## network $ docker network create prometheus ## add keycloak in prometheus network $ docker network connect prometheus keycloak ## prometheus $ docker run \ -d -p 9090:9090 \ --network prometheus \ -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml \ prom/prometheus
使い方
http://localhost:9090/ にアクセスすることでいろいろなグラフを表示できます
参考資料
https://github.com/aerogear/keycloak-metrics-spi/blob/master/README.md