In my previous post here, I showed how to configure Micrometer and Prometheus to collect microservice performance metrics data. In this post, I will show how we can collect Spring Boot Actuator metrics data and transfer to Prometheus UI, and view it using dashboards.
Spring Boot offers a lot of great features with Actuator. With enterprise applications constantly looking for ways to monitor the application, these metrics become even more important.
Configure Prometheus using the docker
Firstly, we will configure the Prometheus. Depending on the environment you are using, start the docker terminal. Use the following command to download Prometheus
docker pull prom/prometheus
We will configure Prometheus to scrape metrics from our application’s actuator endpoint. As shown in the previous post here, spring boot actuator endpoint is running on http://localhost:8080/actuator/prometheus
We will add Prometheus configuration in prometheus.yml
file as below:
# my global config global: scrape_interval: 5s # Set the scrape interval to every 5 seconds. Default is every 1 minute. evaluation_interval: 5s # Evaluate rules every 5 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: 'spring-actuator' metrics_path: '/actuator/prometheus' scrape_interval: 5s static_configs: - targets: ['IPADDRESS_OF_HOST:8080']
Few things to notice from this configuration file. scrape_interval
is 5s. In scrape_configs
, job name for our Spring Actuator endpoint is spring-actuator
and the endpoint is running at /actuator/prometheus
. The targets
section shows where our application is running. Save this file at a location that we can use to mount while running the docker container.
To Run the Prometheus using docker, use the following command:
docker run --name prometheus -d --mount type=bind,source=//c/Users/sandbox/prometheus.yml,destination=/etc/prometheus/prometheus.yml -p 9090:9090 prom/prometheus
This will start the Prometheus server at 9090 and it can be accessed at 9090. Meanwhile, we can check the Prometheus dashboard. Let’s get the docker IP first by using the following command
docker-machine ip
Now check the Prometheus dashboard at http://docker-ip:9090
, it will look like below:
Conclusion
In this post, we showed how to run a Prometheus out of docker container and scrape metrics from Spring boot application.
References
- Spring Boot and Prometheus – Spring boot actuator and Prometheus
- Monitoring your microservices – Monitoring your microservices