What Is Prometheus?
Prometheus is an open-source monitoring system and time-series database. It performs two main tasks:
- Scraping Metrics: It gathers metrics at regular intervals from the configured targets (in our case, the
/actuator/prometheusendpoint). - Storing Metrics: It persists these metrics into its own time-series database for querying and visualization.
Prometheus is an open-source monitoring system and time-series database. It performs two main tasks:
- Scraping Metrics: It gathers metrics at regular intervals from the configured targets (in our case, the
/actuator/prometheusendpoint). - Storing Metrics: It persists these metrics into its own time-series database for querying and visualization.
Additionally, Prometheus can:
- Evaluate rules: You can define conditions (rules) like “if a request takes more than 1 minute, trigger an alert.”
- Trigger alerts: Prometheus works with Alertmanager to send notifications (emails, Slack messages, etc.) when those rules are violated.
How Prometheus Works with Spring Boot and Micrometer
Here’s the basic flow:
- Micrometer exposes metrics on the
/actuator/prometheusendpoint. - Prometheus scrapes the metrics from that endpoint at a specified scrape interval.
- Prometheus stores the metrics in its database.
- (Optional) Rules and alerts can be configured based on metric conditions.
- Alertmanager can then send notifications if necessary.
Prometheus Configuration (prometheus.yml)
To tell Prometheus where and how often to scrape metrics, you must create a configuration file, typically named prometheus.yml.
Here’s an example prometheus.yml file:
global:
scrape_interval: 5s # Collect metrics every 5 seconds
scrape_configs:
- job_name: 'spring-boot-app'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['localhost:8080']
basic_auth:
username: 'admin'
password: 'password'
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
Explanation:
- global.scrape_interval: Tells Prometheus to pull metrics every 5 seconds.
- scrape_configs:
- spring-boot-app: This tells Prometheus to scrape metrics from the Spring Boot app running on
localhost:9191.- It fetches metrics from
/actuator/prometheus. - Basic authentication is configured if your API is secured.
- It fetches metrics from
- prometheus: Prometheus also monitors itself (its own metrics are available at
localhost:9090).
- spring-boot-app: This tells Prometheus to scrape metrics from the Spring Boot app running on
Note:
If your Spring Boot app is secured, you must configure authentication. If it’s not secured, you can omit the basic_auth section.
Installing Prometheus Using Docker
We will now install and run Prometheus server using Docker for simplicity.
Step 1: Pull the Prometheus Image
In your terminal, run:
docker pull prom/prometheus
This command pulls the latest Prometheus image from Docker Hub.
Step 2: Run the Prometheus Container
After pulling the image, start the container with the following command:
docker run -d \ --name prometheus \ -p 9090:9090 \ -v /path/to/your/prometheus.yml:/etc/prometheus/prometheus.yml \ prom/prometheus
Explanation of the command:
-d: Runs the container in detached mode (in the background).--name prometheus: Names the containerprometheus.-p 9090:9090: Maps container’s port 9090 to your local machine’s port 9090.-v /path/to/your/prometheus.yml:/etc/prometheus/prometheus.yml: Mounts your customprometheus.ymlconfiguration file into the container.
Make sure to replace /path/to/your/prometheus.yml with the actual path where you have saved your configuration file.
Step 3: Verify Prometheus is Running
After running the container, open your browser and go to:
https://localhost:9090
You should see the Prometheus UI!

Checking the Status of Targets
Once Prometheus is up, you can:
- Click on Status → Targets from the top menu.
- You will see the list of configured targets.
For example:
- Your Spring Boot application (e.g., Bible API on port 9191) should appear as
UP. - The Prometheus server itself should also appear as
UP.
If you stop your Spring Boot app (from IntelliJ or wherever it’s running), you’ll see the state of that target change to DOWN in the Prometheus UI.
A Few Important Notes
- Multiple Targets: Prometheus can monitor many applications at once by adding more targets in
prometheus.yml. - Authentication: If your Spring Boot app is protected (Basic Auth, Token Auth, etc.), you must configure Prometheus accordingly.
- Real-world configuration: The example provided is basic. In production, your
prometheus.ymlmight have:- Alertmanager configurations.
- Relabeling rules.
- External storage settings.
- Clustered Prometheus servers (for high availability).
Install Prometheus Using Native Windows Binary
Prometheus also provides Windows binaries that you can run natively without Docker or WSL.
Step-by-Step Guide:
- Download the Prometheus Binary for Windows:
- Go to the Prometheus Downloads page.
- Download the latest Windows binary (prometheus-*.windows-amd64.zip).
- Extract the Binary:
- After downloading, extract the
.zipfile to a location of your choice (e.g.,C:\prometheus).
- After downloading, extract the
- Create a Configuration File: You’ll need a
prometheus.ymlconfiguration file. You can create it using the following content (same as in the Docker method):
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
Save this file as prometheus.yml inside the C:\prometheus directory.
- Run Prometheus: Open Command Prompt and navigate to the Prometheus folder:
cd C:\prometheus
Run the Prometheus server:
prometheus.exe --config.file=prometheus.yml
Prometheus will start, and you should see output indicating that it is running.
- Access Prometheus: Open your browser and navigate to
https://localhost:9090to access the Prometheus UI.
