これは、なにをしたくて書いたもの?
Keycloakがクライアントなどからどうアクセスされているのかを確認するのに、アクセスログを有効にできたらよさそうと思ってちょっと
調べてみました。
Keycloakでアクセスログを有効にする(Quarkusのプロパティを使う)
まずはKeycloakのログに関するガイドを見てみます。
Configuring logging - Keycloak
が、アクセスログについては特に書かれていません…。
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
プロパティでcombined
、long
、そして
書式文字列を使った設定を行うこともできます。
あとはアクセスログをログファイルに出力する設定があったり。
参考)
自分としては標準出力にアクセスログが出れば十分なので、その点だけ見ていきましょう。
環境
今回の環境はこちら。
$ 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の設定に踏み込むことはない気はして
いますが、こういう機会があったら見ていこうとは思います。