Prometheus provides JMX exporter which can export JVM information.
- Create JMX exporter configuration. Let's call it
jmx_exporter_config.yml
.
--- rules: - pattern: "java.lang.*"
2. Download JMX exporter
You can find the URL of JMX exporter jar file in Github repository.
https://github.com/prometheus/jmx_exporter
Here is the URL for 0.16.1
3. Start your Java application
For example, your application is packaged as a jar file myapp_1.jar
. jmx_prometheus_javaagent-0.16.1.jar
and jmx_exporter_config.yml
are saved in /app
. We expose port 8080
to export metrics.
java -javaagent:/app/jmx_prometheus_javaagent-0.16.1.jar=8080:/app/jmx_exporter_config.yml -jar myapp_1.jar
4. Download Prometheus
You can find the URL of Prometheus in its official site.
https://prometheus.io/download/
Here is the URL of 2.33.0 (MacOS).
5. Unzip Prometheus
After it is downloaded, unzip it and go to its directory.
tar xvfz prometheus-*.tar.gz cd prometheus-*
6. Update prometheus configuration
Add the following to the prometheus.yml
(under scrape_configs
). We adds label to help querying.
- job_name: "apps" static_configs: - targets: ["localhost:8080"] labels: instance: 'myapp_1'
The whole file should look like this.
# my global config global: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s). # Alertmanager configuration alerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093 # Load rules once and periodically evaluate them according to the global 'evaluation_interval'. rule_files: # - "first_rules.yml" # - "second_rules.yml" # A scrape configuration containing exactly one endpoint to scrape: # Here it's Prometheus itself. scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: "prometheus" # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ["localhost:9090"] - job_name: "apps" static_configs: - targets: ["localhost:8080"] labels: instance: 'myapp_1'
7. Start Prometheus
./prometheus --config.file=prometheus.yml
8. Query JVM information
Query jvm_memory_bytes_used{area="heap",instance="myapp_1"}
Here is the query result.
Or you prefer a graph (You may need to refresh the browser if you want to see the latest data)
Here are other metrics you can try.
jvm_gc_collection_seconds_count
jvm_gc_collection_seconds_sum
jvm_memory_bytes_used
-jvm_memory_bytes_committed
jvm_memory_bytes_max
jvm_memory_bytes_init
process_cpu_seconds_total
Top comments (0)