CLOVER🍀

That was when it all began.

Keycloak 25でアクセスログを有効にする(Quarkusのプロパティを指定する)

これは、なにをしたくて書いたもの?

Keycloakがクライアントなどからどうアクセスされているのかを確認するのに、アクセスログを有効にできたらよさそうと思ってちょっと
調べてみました。

Keycloakでアクセスログを有効にする(Quarkusのプロパティを使う)

まずはKeycloakのログに関するガイドを見てみます。

Configuring logging - Keycloak

が、アクセスログについては特に書かれていません…。

Keycloakの設定にもなさそうです。

All configuration - Keycloak

どうしましょう?ということで、設定のガイドを見てみます。

Configuring Keycloak - Keycloak

できれば使わない方がよいみたいですが、KeycloakのベースになっているQuarkusのプロパティを指定できます。

If possible, avoid using properties directly from Quarkus, because they are unsupported by Keycloak. If your need is essential, consider opening an enhancement request first. This approach helps us improve the configuration of Keycloak to fit your needs.

Configuring Keycloak / Formats for configuration / Format for raw Quarkus properties

使い方としては、Keycloakのインストールディレクトリ内にあるconfディレクトリの中にquarkus.propertiesファイルを作成し、
この中にQuarkusのプロパティを設定します。

指定できるQuarkusのプロパティは、Keycloakが使用しているQuarkus Extensionの範囲に限られます。

https://github.com/keycloak/keycloak/blob/25.0.5/quarkus/runtime/pom.xml#L17-L111

またQuarkusのプロパティにはビルドとランタイムの2種類がありますが、ビルド時のプロパティはKeycloakのbuildコマンドを実行する
必要があります。

Quarkusのアクセスログに関するプロパティはこちら。

HTTP Reference / Configuring HTTP Access Logs

quarkus.http.access-log.enabledプロパティをtrueにすると、アクセスログが有効になります。デフォルトでは標準出力に書き出されます。

フォーマットはデフォルトでCommon Log Formatですが、quarkus.http.access-log.patternプロパティでcombinedlong、そして
書式文字列を使った設定を行うこともできます。

あとはアクセスログをログファイルに出力する設定があったり。

参考)

How to enable acecss logs on keycloak quarkus distribution in json format - Configuring the server - Keycloak

自分としては標準出力にアクセスログが出れば十分なので、その点だけ見ていきましょう。

環境

今回の環境はこちら。

$ bin/kc.sh --version
Keycloak 25.0.5
JVM: 21.0.4 (Eclipse Adoptium OpenJDK 64-Bit Server VM 21.0.4+7-LTS)
OS: Linux 5.15.0-121-generic amd64

Keycloak(Quarkus)のアクセスログを有効にする

Keycloakのインストールディレクトリ内のconfディレクトリは、以下のようになっています。

$ ls -1 conf
cache-ispn.xml
keycloak.conf
README.md
truststores

ここにquarkus.propertiesを追加。

conf/quarkus.properties

quarkus.http.access-log.enabled=true

Keycloakを起動。

$ KEYCLOAK_ADMIN=admin KEYCLOAK_ADMIN_PASSWORD=password bin/kc.sh start-dev

Webコンソールにアクセスしてみます。

$ curl localhost:8080/admin/master/console/

こんな感じでアクセスログが記録されます。

2024-09-14 16:06:41,202 INFO  [io.quarkus.http.access-log] (executor-thread-1) 127.0.0.1 - - [14/Sep/2024:16:06:41 +0000] "GET /admin/master/console/ HTTP/1.1" 200 2895

フォーマットや出力先をファイルにしたい場合などは、Quarkusの設定で変更しましょう。

おわりに

Keycloakのアクセスログを有効にしてみました。

アクセスログに関する設定がないんだ、というのにはちょっと驚きましたが、Quarkusの設定でなんとかなることもあるんだなというのを
知る機会になりました。

というか、Keycloakの設定をしたことがないんですよね。あまりミドルウェアとしてのKeycloakの設定に踏み込むことはない気はして
いますが、こういう機会があったら見ていこうとは思います。