Prometheus and Grafana Integration with Spring Boot
📖 Scenario: You are building a simple Spring Boot application that exposes metrics for monitoring. You want to integrate Prometheus to collect these metrics and Grafana to visualize them. This project will guide you step-by-step to set up the basic integration.
🎯 Goal: Build a Spring Boot application that exposes Prometheus metrics, configure Prometheus to scrape these metrics, and set up Grafana to visualize them.
📋 What You'll Learn
Create a Spring Boot application with actuator dependency
Enable Prometheus metrics endpoint
Configure Prometheus to scrape the Spring Boot metrics endpoint
Set up Grafana dashboard to visualize the metrics
💡 Why This Matters
🌍 Real World
Monitoring applications is essential to detect issues early and understand system performance. Prometheus collects metrics, and Grafana visualizes them in dashboards.
💼 Career
DevOps engineers and backend developers often integrate Prometheus and Grafana with applications to ensure reliability and performance monitoring.
Progress0 / 4 steps
1
Create Spring Boot application with Actuator
Create a Spring Boot application class named DemoApplication with the @SpringBootApplication annotation and a main method that runs the application using SpringApplication.run(DemoApplication.class, args).
Spring Boot
Hint
Use the @SpringBootApplication annotation on the class and write a main method that calls SpringApplication.run.
2
Add Actuator and Prometheus dependencies
Add the spring-boot-starter-actuator and micrometer-registry-prometheus dependencies to your pom.xml file inside the <dependencies> section.
Spring Boot
Hint
Add the actuator and micrometer Prometheus registry dependencies inside the <dependencies> section of pom.xml.
3
Enable Prometheus endpoint in application properties
Add the following line to src/main/resources/application.properties to enable the Prometheus metrics endpoint: management.endpoints.web.exposure.include=prometheus.
Spring Boot
Hint
Open application.properties and add the line to expose the Prometheus endpoint.
4
Print Prometheus metrics endpoint URL
Write a System.out.println statement in the main method to print: "Prometheus metrics available at http://localhost:8080/actuator/prometheus".
Spring Boot
Hint
Use System.out.println to print the exact URL string.
Practice
(1/5)
1. What is the primary role of Prometheus in a Spring Boot application monitoring setup?
easy
A. To collect metrics by scraping the application's exposed endpoint
B. To visualize metrics using dashboards
C. To expose application metrics automatically
D. To send alerts directly to users
Solution
Step 1: Understand Prometheus function
Prometheus collects metrics by scraping HTTP endpoints exposed by applications.
Step 2: Differentiate roles of tools
Grafana is used for visualization, not collection. Spring Boot exposes metrics but does not collect them.
Final Answer:
To collect metrics by scraping the application's exposed endpoint -> Option A
2. Which dependency must be added to a Spring Boot project to expose metrics for Prometheus scraping?
easy
A. spring-boot-starter-web
B. spring-boot-starter-data-jpa
C. micrometer-registry-prometheus
D. spring-boot-starter-security
Solution
Step 1: Identify metrics registry dependency
Micrometer provides metrics support; the Prometheus registry enables exposing metrics in Prometheus format.
Step 2: Exclude unrelated dependencies
Web starter is for REST APIs, JPA for database, Security for auth; none expose Prometheus metrics.
Final Answer:
micrometer-registry-prometheus -> Option C
Quick Check:
Prometheus metrics need micrometer-registry-prometheus [OK]
Hint: Add micrometer-registry-prometheus for Prometheus metrics [OK]
Common Mistakes:
Adding only spring-boot-starter-web without metrics registry
Confusing JPA or Security starters as metrics providers
Forgetting to include Prometheus registry dependency
3. Given this Spring Boot application.properties snippet: management.endpoints.web.exposure.include=health,prometheus management.endpoint.prometheus.enabled=true What will be the URL path to scrape metrics for Prometheus?
medium
A. /metrics
B. /actuator/metrics
C. /prometheus/metrics
D. /actuator/prometheus
Solution
Step 1: Understand actuator endpoint exposure
Spring Boot exposes actuator endpoints under /actuator by default.
Step 2: Identify Prometheus endpoint path
Prometheus metrics endpoint is /actuator/prometheus when enabled and exposed.
Final Answer:
/actuator/prometheus -> Option D
Quick Check:
Prometheus metrics at /actuator/prometheus [OK]
Hint: Actuator endpoints default under /actuator [OK]
Common Mistakes:
Using /metrics instead of /actuator/prometheus
Assuming /prometheus/metrics is default
Forgetting to enable prometheus endpoint
4. You configured Prometheus to scrape your Spring Boot app, but metrics are not appearing in Grafana. Which is the most likely cause?
medium
A. Prometheus server is down but Grafana is running
B. Prometheus is not scraping the correct endpoint URL
C. Spring Boot app does not have a database connection
D. Grafana does not support Prometheus data sources
Solution
Step 1: Check Prometheus scraping configuration
If Prometheus scrapes wrong URL, no metrics collected, so Grafana shows nothing.
5. You want to create a Grafana dashboard showing the average response time of your Spring Boot app over the last 5 minutes. Which Prometheus query should you use?
hard
A. rate(http_server_requests_seconds_sum[5m]) / rate(http_server_requests_seconds_count[5m])
B. sum(http_server_requests_seconds_sum) / sum(http_server_requests_seconds_count)
C. avg_over_time(http_server_requests_seconds_sum[5m])
D. count_over_time(http_server_requests_seconds_count[5m])
Solution
Step 1: Understand metrics for response time
http_server_requests_seconds_sum is total time; count is number of requests.
Step 2: Calculate average over 5 minutes
Use rate() to get per-second increase, then divide sum by count for average.
Final Answer:
rate(http_server_requests_seconds_sum[5m]) / rate(http_server_requests_seconds_count[5m]) -> Option A
Quick Check:
Average = sum rate / count rate [OK]
Hint: Divide sum rate by count rate for average response time [OK]
Common Mistakes:
Using sum without rate causes wrong aggregation
Using avg_over_time on sum metric alone
Counting requests instead of averaging time
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.