Keycloak に prometheus Providerをインストールする(keycloak-monitoring-prometheus)

keycloak に prometheus Providerを追加する

keycloak に prometheus Providerを追加してみたときの作業メモです。
いくつか Provider が存在しますが今回は larscheid-schmitzhermes/keycloak-monitoring-prometheus を使ってみました。

larscheid-schmitzhermes/keycloak-monitoring-prometheus について

  • Keycloak の EventListenrに追加することでPrometheus用のメトリクスファイルを出力する
  • Prometheus Endpoint を提供する別モジュールで上記のメトリクスファイルを使用することによりPrometheusにデータを連携できる

できること

  • Keycloak の各種 Event を Prometheusフォーマットで出力できる

できないこと

  • JVM の各種パラメータは出力できない

環境

Keycloak 6.0.1
Docker 19.03

手順

keycloak への provider インストール

keycloak に provider をインストールする手順をまとめます

SPIモジュールのビルド

今回インストールするモジュールは以下 https://github.com/larscheid-schmitzhermes/keycloak-monitoring-prometheus

  • clone、build

    $ git clone git@github.com:larscheid-schmitzhermes/keycloak-monitoring-prometheus.git
    
    $ cd keycloak-monitoring-prometheus
    $ docker run --rm  -v $PWD:/app -w /app -u $UID:$GID gradle gradle clean build
    
    $ ls build/libs/
    keycloak-monitoring-prometheus.jar
    

ビルドに成功すると build/libs/keycloak-monitoring-prometheus.jar が生成されます

keycloak コンテナの作成

リソースの準備

  • artifacts/

    • 前項で作成した keycloak-monitoring-prometheus.jar
  • cli/setup-keycloak.cli

    embed-server --server-config=standalone-ha.xml --std-out=echo
    /subsystem=keycloak-server/spi=eventsListener/:add
    /subsystem=keycloak-server/spi=eventsListener/provider=com\.larscheidschmitzhermes\:keycloak-monitoring-prometheus/:add(enabled=true)
    /subsystem=keycloak-server/spi=eventsListener/provider=com\.larscheidschmitzhermes\:keycloak-monitoring-prometheus/:map-put(name=properties,key=eventsDirectory,value="${env.EVENTS_DIRECTORY:/opt/jboss/metrics}")
    stop-embedded-server
    
  • Dockerfile

    FROM jboss/keycloak:6.0.1
    
    USER root
    
    ADD cli /opt/jboss/keycloak/cli/
    RUN cd /opt/jboss/keycloak && bin/jboss-cli.sh --file=cli/setup-keycloak.cli && rm -rf /opt/jboss/keycloak/standalone/configuration/standalone_xml_history
    RUN mkdir /opt/jboss/metrics && chown jboss /opt/jboss/metrics
    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 起動

$ mkdir ~/work/metrics
$ docker run -d -p 18080:8080 \
        -e KEYCLOAK_USER=admin \
        -e KEYCLOAK_PASSWORD=admin \
        -v ~/work/metrics:/opt/jboss/metrics \
        --name keycloak \
        keycloak-prometheus
  1. http://localhost:18080 にアクセス
  2. admin/admin で admin console にログイン
  3. ServerInfo に keycloak-monitoring-prometheus が表示されていたらProviderのインストールは成功
  4. Manage -> Events -> Events Config で EventsListener に keycloak-monitoring-prometheus を追加します

exporter と prometheus の起動

  • prometheus.yml
global:
  scrape_interval:     15s 
  external_labels:
    monitor: 'codelab-monitor'

scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']
      - targets: ['exporter:8080']
  • exporter の起動

    ## network
    $ docker network create prometheus
    
    ## prometheus exporter
    $ docker run \
        -dP \
        --network prometheus \
        --name exporter \
        -v ~/work/metrics:/container/metrics \
        larscheidschmitzhermes/prometheus-filesystem-exporter:latest \
        --metrics-directory /container/metrics \
        --metrics-path /metrics \
        --listen-addr :8080
    
    ## 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/larscheid-schmitzhermes/keycloak-monitoring-prometheus/blob/master/README.md https://github.com/larscheid-schmitzhermes/prometheus-filesystem-exporter/blob/master/README.md https://bufferings.hatenablog.com/entry/2016/12/11/130254