はじめに
今回は、Kubernetes上で立ち上げられたJMX Server(SpringBoot)にJconsole等で接続する時のTipsをまとめていきたいと思います。また、本記事は、JMXカスタムメトリクスの取得する時のTipsも記載していきたいと思います。
※なお、カスタムメトリクスの設定方法には触れていません。
実行環境と構成図
実行環境と利用しているツール類
ツール類
- Kubernetes環境
- EKS
- JMX 監視ツール
- Jconsole
今回の構成
今回は、Kubernetes上に立てられたJMX ServerにPort forwardを使ってローカルマシン上からJconsoleを使って接続することとします。
事前に設定していたもの
FROM openjdk:8-jdk-oraclelinux8
COPY ./SpringBoot_App_folder /
CMD ["./apply.sh", "SpringBoot_app.jar"]
#!/bin/sh
java \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.rmi.port=8086 \
-Dcom.sun.management.jmxremote.port=8086 \
-jar ${1}
apiVersion: apps/v1
kind: Deployment
metadata:
name: sample-deployment
spec:
replicas: 1
selector:
matchLabels:
app: sample-app
template:
metadata:
labels:
app: sample-app
spec:
containers:
- name: sample-spring-boot
image: sample-spring-boot:latest
※重要なところのみを切り出しています。
また、imageはDockerfileをBuildして作っています。
動作結果
$kubectl port-forward pods/sample-spring-boot-{任意の文字列} 8086:8086
この設定ではpodに対してPort forwardをし、ローカルマシン上でJMX Serverに接続することができませんでした。
ローカルマシンからVMX serverに接続するためのTips
#!/bin/sh
java \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.rmi.port=8086 \
-Dcom.sun.management.jmxremote.port=8086 \
+ -Djava.rmi.server.hostname=127.0.0.1 \
-jar ${1}
- Port-forwardをするためには、
-Djava.rmi.server.hostname
に127.0.0.1
を設定する必要があります。 - ref: https://iceburn.medium.com/how-to-expose-jmx-in-kubernetes-b1faad450451
動作確認
JMX Serverに接続することはできました。
カスタムメトリクスを取得するためのTips
#!/bin/sh
java \
+ -Dspring.jmx.enabled=true \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.rmi.port=8086 \
-Dcom.sun.management.jmxremote.port=8086 \
-Djava.rmi.server.hostname=127.0.0.1 \
-jar ${1}
Java Management Extensions(JMX)は、アプリケーションを監視および管理するための標準メカニズムを提供します。デフォルトでは、この機能は有効になっていません。spring.jmx.enabled 設定プロパティを true に設定することでオンにできます。
ref: https://spring.pleiades.io/spring-boot/docs/current/reference/html/actuator.html#actuator.jmx
動作確認
これで、カスタムメトリクスのBeanを見つけることができました。
まとめ
今回は、Kubernetes上で立ち上げられたJMX Server(SpringBoot)にport forwardで接続する時のTipsとJMXカスタムメトリクスの取得する時のTipsについてまとめてみました。もし、この記事を読んでいる方が同じ問題に詰まった時の助けになれば幸いです。