概要:
この記事は、Prometheusを導入する手順をまとめたものです。
JMX Exporterを使用して、JavaのプログラムとKeycloakが使用しているJVM関連のメトリクスを取得して表示する方法を紹介します。
前提として、KeycloakとJavaがインストール済みである必要があります。
環境情報:
- Keycloak バージョン22.0.5
- Prometheus バージョン2.49.1
- JMX Exporter バージョン0.20.0
- Java バージョン17.0.6
- OS:Mac(Apple M1) 13.4
目次:
- Prometheusとは
- Prometheusのインストール
- JMX Exporterのインストール
- Javaと連携
- Keycloakと連携
Prometheusとは:
Prometheusはシステムを監視するためのオープンソースのツールです。
監視にはPrometheusとExporterの2つが必要になります。
Exporterは監視したいシステムのデータ(メトリクス)を取得するために使用します。
取得するものによってExporterを使い分けます。
Exporterはこのページに一覧で載っています。
Prometheusのインストール:
Prometheusをインストールします。
Prometheusは9090ポートで起動します。
1. ファイルをダウンロードします。curl -OL https://github.com/prometheus/prometheus/releases/download/v2.49.1/prometheus-2.49.1.darwin-arm64.tar.gz
1. ファイルがダウンロードできたら解凍します。tar zxvf prometheus-2.49.1.darwin-arm64.tar.gz
1. 解凍したディレクトリに移動します。cd prometheus-2.49.1.darwin-arm64
1. Prometheusを起動します。./prometheus
1. 以下にアクセスして起動できているか確認します。http://localhost:9090/targets?search=
起動できていたら画像のように表示されます。

JMX Exporterのインストール:
JMX Exporterをインストールします。
JMX ExporterはJVM関連のメトリクスを取得するために使用します。
1. ファイルをダウンロードします。curl -LO https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.20.0/jmx_prometheus_javaagent-0.20.0.jar
1. config.ymlを作成します。
1. ファイルを新規作成します。vi config.yml
1. 以下の内容で保存します。
lowercaseOutputName: true
lowercaseOutputLabelNames: true
whitelistObjectNames: []
```
Javaと連携:
簡単なJavaのピログラムを作成してJMX Exporterの設定をします。
取得したメトリクスをPrometheusで確認します。
以下の手順でJarファイルを作成します。
- Test.javaを作成します。
public class Test { public static void main(String[] args){ System.out.print("ヒープサイズ = "); System.out.println(Runtime.getRuntime().maxMemory()); System.out.println("実行中..."); while(true){ } }- manifest.mfを作成します。
Main-Class: Testこのファイルは最後に空行が必要でした。
空行がない場合、jarファイル実行時にTest.jarにメイン・マニフェスト属性がありませんというエラーが表示されました。コンパイルします。
javac Test.javajarファイルを作成します。
jar -cvfm Test.jar manifest.mf Test.class
作成したjarファイルにJMX Exporterの設定をします。
ポートを5555で指定しています。java -javaagent:/jmx_prometheus_javaagent-0.20.0.jarまでの絶対パス/jmx_prometheus_javaagent-0.20.0.jar=5555:/config.ymlまでの絶対パス/config.ymljarファイルを実行します。
java -jar Test.jarPrometheusのディレクトリの中にある、prometheus.ymlを編集し、Keycloakのメトリクスを表示できるようにします。
- prometheus.ymlを編集します。
vi prometheus.yml - 以下の内容を末尾に追加します。
- job_name: "test" static_configs: - targets: ["localhost:5555"]- prometheus.ymlを編集します。
以下にアクセスしてメトリクスが生成されているか確認します。
http://localhost:5555/metrics
メトリクスが取得できていれば画像のように表示されます。

Prometheusを再起動します。
./prometheus連携できているかを確認します。
- ブラウザから以下を開き、
jobがtestのものが動いているか確認します。http://localhost:9090/targets?search=

- ブラウザから以下を開き、グラフを確認します。
http://localhost:9090/graph - 以下のクエリを使用してグラフを表示します。
{__name__="jvm_memory_bytes_used", job="test"}
- ブラウザから以下を開き、
画像のようにグラフが表示できていれば連携ができていると思います。

Keycloakと連携:
KeycloakとPrometheusを連携します。
環境変数でJMX Exporterの設定をします。 ポートを12345で指定しています。
export JAVA_OPTS="$JAVA_OPTS -javaagent:/jmx_prometheus_javaagent-0.20.0.jarまでの絶対パス/jmx_prometheus_javaagent-0.20.0.jar=12345:/config.ymlまでの絶対パス/config.yml"環境変数でJMX Exporterの設定をした後、Keycloakを起動します。
KEYCLAOK_HOME/bin/kc.sh start-dev以下にアクセスしてメトリクスが生成されているか確認します。
http://localhost:12345/metricsPrometheusのディレクトリの中にある、prometheus.ymlを編集し、Keycloakのメトリクスを表示できるようにします。
- prometheus.ymlを編集します。
vi prometheus.yml - 以下の内容を末尾に追加します。
- job_name: "keycloak" static_configs: - targets: ["localhost:12345"]- prometheus.ymlを編集します。
Prometheusを再起動します。
./prometheusKeycloakと連携ができているか確認します。
- ブラウザから以下を開き、Keycloakが起動しているか確認します。
http://localhost:9090/targets?search=

- ブラウザから以下を開き、グラフを確認します。
http://localhost:9090/graph - 以下のクエリを使用してグラフを表示します。
{__name__="jvm_memory_bytes_used", job="keycloak"}
- ブラウザから以下を開き、Keycloakが起動しているか確認します。
画像のようにグラフが表示できていれば連携ができていると思います。

まとめ
今回はPrometheusのインストールからKeycloakと連携させるところまでを紹介しました。 Prometheusを使うことで、メモリの状態等をわかりやすく表示できます。 JMX Exporterと組み合わせてJavaのアプリのメトリクスを取得することができます。 Prometheusはそれだけでも使用できますが、Grafana等と組み合わせて使用されることが多いみたいです。 そちらも今後機会があれば調べて紹介します。
参考:
- 閲覧数 574
コメントを追加