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
330
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
140
Moduliths
g00glen00b
0
120
Tech talk: Micronaut
g00glen00b
0
220
From WordPress to Gatsby
g00glen00b
3
380
GraphQL
g00glen00b
1
270
Reactive programming with Spring boot 2
g00glen00b
1
390
Introduction to Meteor
g00glen00b
0
440
JavaScript essentials
g00glen00b
3
430
Fronteers - JavaScript at your enterprise (Dutch)
g00glen00b
0
210
Other Decks in Programming
See All in Programming
Devoxx BE - Local Development in the AI Era
kdubois
0
130
Cursorハンズオン実践!
eltociear
2
1k
uniqueパッケージの内部実装を支えるweak pointerの話
magavel
0
990
Pull-Requestの内容を1クリックで動作確認可能にするワークフロー
natmark
2
500
私はどうやって技術力を上げたのか
yusukebe
43
18k
タスクの特性や不確実性に応じた最適な作業スタイルの選択(ペアプロ・モブプロ・ソロプロ)と実践 / Optimal Work Style Selection: Pair, Mob, or Solo Programming.
honyanya
3
160
[Kaigi on Rais 2025] 全問正解率3%: RubyKaigiで出題したやりがちな危険コード5選
power3812
0
120
非同期jobをtransaction内で 呼ぶなよ!絶対に呼ぶなよ!
alstrocrack
0
840
理論と実務のギャップを超える
eycjur
0
130
Railsだからできる 例外業務に禍根を残さない 設定設計パターン
ei_ei_eiichi
0
580
あなたとKaigi on Rails / Kaigi on Rails + You
shimoju
0
130
Cloudflare AgentsとAI SDKでAIエージェントを作ってみた
briete
0
140
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6.1k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
620
Mobile First: as difficult as doing things right
swwweet
224
10k
Statistics for Hackers
jakevdp
799
220k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
970
Thoughts on Productivity
jonyablonski
70
4.9k
Bash Introduction
62gerente
615
210k
Music & Morning Musume
bryan
46
6.8k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Unsuck your backbone
ammeep
671
58k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
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!