Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Better monitoring with Spring boot Actuator
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Dimitri
July 27, 2020
Programming
350
0
Share
Better monitoring with Spring boot Actuator
An overview of the features Spring boot actuator has to offer.
Dimitri
July 27, 2020
More Decks by Dimitri
See All by Dimitri
Intro to Astro
g00glen00b
0
170
Moduliths
g00glen00b
0
140
Tech talk: Micronaut
g00glen00b
0
230
From WordPress to Gatsby
g00glen00b
3
400
GraphQL
g00glen00b
1
290
Reactive programming with Spring boot 2
g00glen00b
1
430
Introduction to Meteor
g00glen00b
0
490
JavaScript essentials
g00glen00b
3
460
Fronteers - JavaScript at your enterprise (Dutch)
g00glen00b
0
240
Other Decks in Programming
See All in Programming
JOAI2026 1st solution - heron0519 -
heron0519
0
130
実用!Hono RPC2026
yodaka
2
220
Claude Codeをカスタムして自分だけのClaude Codeを作ろう
terisuke
0
130
SkillがSkillを生む:QA観点出しを自動化した
sontixyou
6
3.4k
AI時代のPhpStorm最新事情 #phpcon_odawara
yusuke
0
190
YJITとZJITにはイカなる違いがあるのか?
nakiym
0
220
クラウドネイティブなエンジニアに向ける Raycastの魅力と実際の活用事例
nealle
2
190
夢の無限スパゲッティ製造機 -実装篇- #phpstudy
o0h
PRO
0
210
Oxlintとeslint-plugin-react-hooks 明日から始められそう?
t6adev
0
270
ふりがな Deep Dive try! Swift Tokyo 2026
watura
0
210
GNU Makeの使い方 / How to use GNU Make
kaityo256
PRO
16
5.6k
SREに優しいTerraform構成 modulesとstateの組み方
hiyanger
2
130
Featured
See All Featured
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.4k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
My Coaching Mixtape
mlcsv
0
99
Agile that works and the tools we love
rasmusluckow
331
21k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
220
Visualization
eitanlees
150
17k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.4k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.7k
Designing for humans not robots
tammielis
254
26k
A Modern Web Designer's Workflow
chriscoyier
698
190k
The SEO identity crisis: Don't let AI make you average
varn
0
440
A Tale of Four Properties
chriscoyier
163
24k
Transcript
Better monitoring with Spring boot Actuator
What is Spring boot Actuator? • Spring boot library •
Adds production-ready features • Provides useful endpoints • Both over HTTP and JMX
Which endpoints are there? • Auditevents • Beans • Caches
• Conditions • Configprops • Env • Flyway • Health • Heapdump • Httptrace • Info • Integrationgraph • Jolokia • Logfile • Loggers • Liquibase • Metrics • Mappings • Prometheus • Scheduledtasks • Sessions • Shutdown • Threaddump
How do I get started?
Add a dependency... <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
… and configure what you need management: endpoints: web: exposure:
include: env, info, health, metrics
And… what now?
Visit /actuator { "_links": { "self": { "href": "http://192.168.0.220:8080/actuator", "templated":
false }, "health": { "href": "http://192.168.0.220:8080/actuator/health", "templated": false } }
Exploring the conditions endpoint
What does it do? • Which autoconfigurations are in use
• Why are they (not) applied? • What can I do to make it work?
Visit /actuator/conditions { "positiveMatches": {/* ... */}, "negativeMatches": { "RabbitHealthContributorAutoConfiguration":
{ "notMatched": [ { "condition": "OnClassCondition", "message": "@ConditionalOnClass did not find required class 'org.springframework.amqp.rabbit.core.RabbitTemplate'" } ]
Exploring the env endpoint
What does it do? • Which application properties are loaded?
• Where do these properties come from?
Visit /actuator/env { "activeProfiles": [ "dev" ], "propertySources": [ {
"name": "applicationConfig: [classpath:/application-dev.yml]", "properties": { "server.port": { "value": 8080, "origin": "class path resource [application-dev.yml]:2:9"
Exploring the health endpoint
What does it do? • Is the database available? •
Is there enough disk space? • Is Eureka available? • Is Solr available? • Useful for monitoring software • ...
Visit /actuator/health { "status": "UP" }
Showing detailed health info management: endpoint: health: show-details: always
Showing detailed health info { "status": "UP", "components": { "db":
{ "status": "UP", "details": { "database": "DB2 UDB for AS/400", "validationQuery": "SELECT 1 FROM SYSIBM.SYSDUMMY1", "result": 1 } }
Creating a custom health indicator @Component @RequiredArgsConstructor public class GitHubAPIHealthIndicator
implements HealthIndicator { private final RestTemplate restTemplate; @Override public Health health() { // TODO: implement } }
Creating a custom health indicator try { var result =
restTemplate.getForEntity("https://api.github.com/", ObjectNode.class); if (result.getStatusCode().is2xxSuccessful() && result.getBody() != null) { return Health.up().build(); } else { return Health.down().withDetail("status", result.getStatusCode()).build(); } } catch (RestClientException ex) { return Health.down().withException(ex).build(); }
Creating a custom health indicator { "status": "UP", "components": {
"gitHubAPI": { "status": "UP" } } }
Useful for monitoring
Useful for Eureka
Exploring the heapdump endpoint
What does it do? • Returns *.HPROF file • Can
be imported in JVisualVM, … • Find memory leaks and other peformance issues
Open the *.HPROF file
Exploring the info endpoint
What does it do? • Returns additional information • By
default empty • Useful in combination with Maven resource filtering
Configuring info info: contributors: Dimitri Mestdagh project-version: @project-version@ build-timestamp: @maven.build.timestamp@
Visit /actuator/info { "contributors": "Dimitri Mestdagh", "project-version": "0.0.1-SNAPSHOT", "build-timestamp": "2020-06-27
11:52:30" }
Exploring the loggers endpoint
What does it do? • What logging levels are in
use? • Change runtime logging levels • Useful for debugging
Visit /actuator/loggers { "loggers": { "ROOT": { "configuredLevel": "INFO", "effectiveLevel":
"INFO" }, "be.g00glen00b": { "configuredLevel": null, "effectiveLevel": "INFO" } } }
Changing the runtime logger levels curl \ --header "Content-Type: application/json"
\ --request POST \ --data '{"configuredLevel": "DEBUG"}' \ http://localhost:8080/actuator/loggers/be.g00glen00b
Exploring the metrics endpoint
What does it do? • Application metrics • Uses micrometer
• Counters • Gauges • Distribution summaries • Percentiles • Timers
Visit /actuator/metrics { "names": [ "cache.evictions", "http.server.requests", "jvm.threads.states", "hystrix.execution", "spring.batch.chunk.write",
"spring.batch.item.process", "hystrix.latency.total", "jvm.memory.used" ] }
Visit /actuator/metrics/{metric} { "name": "jvm.memory.used", "description": "The amount of used
memory", "baseUnit": "bytes", "measurements": [{ "statistic": "VALUE", "value": 196616376 }], "availableTags": [{ "tag": "area", "values": ["heap", "nonheap"] }]
Visit /actuator/metrics/{metric}?tag=area:heap { "name": "jvm.memory.used", "description": "The amount of used
memory", "baseUnit": "bytes", "measurements": [{ "statistic": "VALUE", "value": 196616376 }], "availableTags": [] }
Creating custom counter metrics @Bean public Counter invoicesCounter(MeterRegistry registry) {
return Counter .builder("invoices.created") .description("Amount of invoices created") .register(registry); }
Creating custom counter metrics @PostMapping public CreatedInvoiceDTO create(@RequestBody InvoiceParametersDTO parameters)
{ counter.increment(); // Add this return facade.create(parameters); }
Creating custom gauge metrics @Bean public Gauge countOrdersGauge(MeterRegistry registry, OrderRepository
repository) { return Gauge .builder("order.count", repository::count) .description("Amount of registered orders”) .register(registry); }
Cool stuff… but why?
Cool stuff… but why? • Production-readiness • Better monitoring •
Better logging • Better debugging = More happy people
Resources • https://docs.spring.io/spring-boot/docs/current/reference/html/p roduction-ready-features.html • https://dimitr.im/mastering-spring-boot-actuator Shameless self-promotion
Thank you for listening!