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
Dimitri
July 27, 2020
Programming
0
310
Better monitoring with Spring boot Actuator
An overview of the features Spring boot actuator has to offer.
Dimitri
July 27, 2020
Tweet
Share
More Decks by Dimitri
See All by Dimitri
Intro to Astro
g00glen00b
0
120
Moduliths
g00glen00b
0
110
Tech talk: Micronaut
g00glen00b
0
200
From WordPress to Gatsby
g00glen00b
3
360
GraphQL
g00glen00b
1
260
Reactive programming with Spring boot 2
g00glen00b
1
360
Introduction to Meteor
g00glen00b
0
370
JavaScript essentials
g00glen00b
3
410
Fronteers - JavaScript at your enterprise (Dutch)
g00glen00b
0
190
Other Decks in Programming
See All in Programming
Vibe Coding の話をしよう
schroneko
10
2.6k
リストビュー画面UX改善の振り返り
splcywolf
0
150
Module Boundaries and Architecture with Forensic Analysis @NxSummit Amsterdam 2025
manfredsteyer
PRO
0
100
PHPバージョンアップから始めるOSSコントリビュート / how2oss-contribute
dmnlk
1
1.1k
Strategic Design (DDD)for the Frontend @DDD Meetup Stuttgart
manfredsteyer
PRO
0
160
状態と共に暮らす:ステートフルへの挑戦
ypresto
1
690
Building Scalable Mobile Projects: Fast Builds, High Reusability and Clear Ownership
cyrilmottier
2
300
新しいPHP拡張モジュールインストール方法「PHP Installer for Extensions (PIE)」を使ってみよう!
cocoeyes02
0
410
海外のアプリで見かけたかっこいいTransitionを真似てみる
shogotakasaki
1
180
監視 やばい
syossan27
11
9.8k
Youtube Lofier - Chrome拡張開発
ninikoko
0
2.4k
Java 24まとめ / Java 24 summary
kishida
3
500
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
52
2.4k
What's in a price? How to price your products and services
michaelherold
245
12k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
Done Done
chrislema
183
16k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
119
51k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.5k
Rails Girls Zürich Keynote
gr2m
94
13k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
13
680
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!