Javaのランタイム(JVM)メトリクスを[[Prometheus]]で取得する方法。
[PrometheusとGrafanaでJavaアプリケーションをモニタリングする | NHN Cloud Meetup](https://meetup-jp.toast.com/3476)
- Spring Boot Actuator
- JMX Exporter
[GitHub - prometheus/jmx_exporter: A process for exposing JMX Beans via HTTP for Prometheus consumption](https://github.com/prometheus/jmx_exporter)
- JVM agent方式(推奨)
- standalone HTTP server方式
[Monitoring JAVA applications running in Kubernetes | Documentation](https://stage-docs.snappyflow.io/docs/Integrations/java/java_kubernetes)
[[Kubernetes]]でのモニタリング方法。standalone方式。
1. JMXオプションを付与してJavaアプリケーションを起動する。
```
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port= <userDefinedJMXPort> -Dcom.sun.management.jmxremote.authenticate=false - Dcom.sun.management.jmxremote.ssl=false
```
2. Prometheus exporter起動
```shell
java -jar jmx_prometheus_httpserver.jar <userDefinedPrometheusPort> <exporterConfigFile>
```
```yaml
apiVersion: v1
kind: ConfigMap
metadata:
labels:
snappyflow/appname: <app_name>
snappyflow/projectname: <project_name>
data:
jmx-config.yaml: |
---
jmxUrl: service:jmx:rmi:///jndi/rmi://127.0.0.1:<userDefinedJMXPort>/jmxrmi
ssl: false
rules:
- pattern: '.*'
```
```yaml
kind: Pod
apiVersion: v1
metadata:
name: my-first-pod
labels:
snappyflow/appname: <app_name>
snappyflow/projectname: <project_name>
spec:
containers:
- name: app-container
image: <docker_id>/<docker_image>:<tag>
command: sh -c -x java -jar -Dcom.sun.management.jmxremote - Dcom.sun.management.jmxremote.port=<userDefinedJMXPort> - Dcom.sun.management.jmxremote.authenticate=false - Dcom.sun.management.jmxremote.ssl=false <application_jar>
- name: "exporter-container"
image: "bitnami/jmx-exporter:latest"
imagePullPolicy: IfNotPresent
command: sh -c -x java -jar jmx_prometheus_httpserver.jar <userDefinedPrometheusPort> /tmp/jmx-config.yaml
ports:
- name: exporter-port
containerPort: <userDefinedPrometheusPort>
volumeMounts:
- name: configmap-jmx
mountPath: /tmp
volumes:
- name: configmap-jmx
configMap:
- name: jmx-configmap
```
JMX exporterのキャッシュによる高速化
[Improving the performance of the Prometheus JMX Exporter](https://engineeringblog.yelp.com/2020/10/improving-the-performance-of-the-prometheus-jmx-exporter.html)