Pohon pružín

1. Prehľad

V tomto článku si predstavíme Spring Boot Actuator. Najskôr pokryjeme základné informácie a potom podrobne prediskutujeme, čo je k dispozícii v Spring Boot 2.x proti 1.x.

Naučíme sa, ako používať, konfigurovať a rozširovať tento monitorovací nástroj v programoch Spring Boot 2.xa WebFlux s využitím modelu reaktívneho programovania. Potom si povieme, ako to urobiť pomocou Boot 1.x.

Spring Boot Actuator je k dispozícii od apríla 2014 spolu s prvým vydaním Spring Boot.

S vydaním Spring Boot 2 bol Actuator prepracovaný a boli pridané nové zaujímavé koncové body.

Túto príručku sme rozdelili do troch hlavných častí:

  • Čo je to aktuátor?
  • Pohon Spring Boot 2.x.
  • Pohon Spring Boot 1.x.

2. Čo je to aktuátor?

Actuator v zásade prináša do našej aplikácie funkcie pripravené na výrobu.

Monitorovanie našej aplikácie, zhromažďovanie metrík, porozumenie prenosu alebo stavu našej databázy sa s touto závislosťou stáva triviálnym.

Hlavnou výhodou tejto knižnice je, že môžeme získať nástroje na úrovni výroby bez toho, aby sme tieto funkcie museli skutočne implementovať sami.

Pohon je zvyknutý hlavne na vystaviť prevádzkové informácie o spustenej aplikácii - zdravie, metriky, informácie, výpis, env atď. Používa koncové body HTTP alebo fazuľa JMX, ktoré nám umožňujú interakciu s nimi.

Akonáhle je táto závislosť na ceste ku triede, máme k dispozícii niekoľko koncových bodov. Rovnako ako u väčšiny jarných modulov, môžeme ich ľahko konfigurovať alebo rozšíriť mnohými spôsobmi.

2.1. Začíname

Ak chcete povoliť Spring Boot Actuator, stačí pridať ovládač pružiny a kufra závislosť od nášho správcu balíkov.

V Maven:

 org.springframework.boot spring-boot-starter-aktuator 

Upozorňujeme, že toto zostáva v platnosti bez ohľadu na bootovaciu verziu, pretože verzie sú špecifikované v kusovníku Spring Boot Bill (BOM).

3. Spring Boot 2.x Aktuátor

V 2.x zachováva aktuátor svoj základný zámer, ale zjednodušuje svoj model, rozširuje svoje schopnosti a obsahuje lepšie predvolené hodnoty.

Najskôr sa táto verzia stáva technologicky agnostickou. Zjednodušuje tiež jeho bezpečnostný model zlúčením s aplikačným.

Spomedzi rôznych zmien je potrebné mať na pamäti, že niektoré z nich sú zlomové. Patria sem HTTP požiadavky a odpovede, ako aj Java API.

Posledná verzia teraz podporuje model CRUD na rozdiel od starého modelu na čítanie a zápis.

3.1. Podpora technológií

S jeho druhou hlavnou verziou je Actuator teraz technologicky agnostický, zatiaľ čo v 1.x bol viazaný na MVC, teda na Servlet API.

V 2.x definuje Actuator svoj model ako zásuvný a rozšíriteľný bez toho, aby sa pri tom spoliehal na MVC.

Z tohto dôvodu sme s týmto novým modelom schopní využívať výhody MVC a WebFlux ako základnej webovej technológie.

Budúce technológie by sa navyše dali pridať implementáciou správnych adaptérov.

Nakoniec JMX naďalej podporuje vystavenie koncových bodov bez ďalšieho kódu.

3.2. Dôležité zmeny

Na rozdiel od predchádzajúcich verzií Aktuátor je dodávaný s väčšinou koncových bodov deaktivovaných.

Teda, štandardne sú k dispozícii iba dva / zdravie a /Info.

Ak ich chceme povoliť všetky, mohli by sme nastaviť management.endpoints.web.exposure.include = *. Prípadne môžeme uviesť zoznam koncových bodov, ktoré by mali byť povolené.

Aktuátor teraz zdieľa konfiguráciu zabezpečenia s bežnými pravidlami zabezpečenia aplikácie, takže model zabezpečenia je dramaticky zjednodušený.

Preto by sme mohli vylepšiť bezpečnostné pravidlá Aktuátora, stačí len pridať záznam pre / aktuátor / **:

@Bean public SecurityWebFilterChain securityWebFilterChain (ServerHttpSecurity http) {návrat http.authorizeExchange () .pathMatchers ("/ aktuátor / **"). PermitAll () .anyExchange (). Autentifikované (). A (). Zostaviť (); }

Ďalšie podrobnosti nájdete v úplne nových oficiálnych dokumentoch ovládača.

Tiež štandardne sú všetky koncové body aktuátora umiestnené pod / aktuátor cesta.

Rovnako ako v predchádzajúcej verzii môžeme túto cestu vylepšiť pomocou novej vlastnosti management.endpoints.web.base-path.

3.3. Preddefinované koncové body

Pozrime sa na niektoré dostupné koncové body, z ktorých väčšina už bola k dispozícii v 1.x.

Tiež niektoré koncové body boli pridané, niektoré odstránené a niektoré boli reštrukturalizované:

  • / auditevents uvádza zoznam udalostí týkajúcich sa bezpečnostného auditu, ako je napríklad prihlásenie / odhlásenie používateľa. Môžeme tiež filtrovať podľa principála alebo typu medzi ostatnými poľami.
  • / fazuľa vráti všetky dostupné fazule v našom BeanFactory. Na rozdiel od / auditevents, nepodporuje filtrovanie.
  • / podmienky, predtým známy ako /autokonfigurácia, zostavuje správu o podmienkach okolo automatickej konfigurácie.
  • / configprops umožňuje nám načítať všetky @ConfigurationProperties fazuľa.
  • / env vráti aktuálne vlastnosti prostredia. Ďalej môžeme získať jednotlivé vlastnosti.
  • / letová dráha poskytuje podrobnosti o našich migráciách databázy Flyway.
  • / zdravie sumarizuje zdravotný stav našej aplikácie.
  • / halda vytvára a vracia haldy výpisov z JVM používaného našou aplikáciou.
  • /Info vráti všeobecné informácie. Môžu to byť vlastné údaje, informácie o zostavení alebo podrobnosti o najnovšom potvrdení.
  • / liquibase správa sa ako / letová dráha ale pre Liquibase.
  • / logfile vráti bežné protokoly aplikácií.
  • / drevorubači umožňuje nám dopytovať sa a upravovať úroveň protokolovania našej aplikácie.
  • / metriky podrobnosti metriky našej aplikácie. Môže to zahŕňať všeobecné aj vlastné metriky.
  • / prometheus vráti metriky ako predchádzajúca, ale naformátovaná tak, aby fungovala so serverom Prometheus.
  • /plánované úlohy poskytuje podrobnosti o každej naplánovanej úlohe v rámci našej aplikácie.
  • / relácie uvádza zoznam relácií HTTP, ktoré používame Spring Session.
  • /vypnúť vykoná ladné vypnutie aplikácie.
  • / threaddump vypíše informácie o vlákne podkladového JVM.

3.4. Hypermedia pre koncové body aktuátora

Spring Boot pridáva koncový bod objavu, ktorý vracia odkazy na všetky dostupné koncové body aktuátora. Toto uľahčí zisťovanie koncových bodov aktuátora a ich zodpovedajúcich adries URL.

V predvolenom nastavení je tento koncový bod zisťovania prístupný prostredníctvom servera / aktuátor koncový bod.

Preto ak pošleme a ZÍSKAJTE na túto adresu URL, vráti odkazy ovládača pre rôzne koncové body:

{"_links": {"self": {"href": "// localhost: 8080 / aktuátor", "templated": false}, "features-arg0": {"href": "// localhost: 8080 / aktuator / features / {arg0} "," templated ": true}," features ": {" href ":" // localhost: 8080 / aktuator / features "," templated ": false}," fazuľa ": {" href ":" // localhost: 8080 / aktuátor / fazuľa "," templated ": false}," caches-cache ": {" href ":" // localhost: 8080 / aktuátor / caches / {cache} "," templated ": true}, // skrátené}

Ako je uvedené vyššie, / aktuátor koncový bod hlási všetky dostupné koncové body aktuátora pod _odkazy lúka.

Ak navyše nakonfigurujeme vlastnú základnú cestu správy, mali by sme ju použiť ako adresu URL zisťovania.

Napríklad, ak nastavíme management.endpoints.web.base-path do / mgmt, potom by sme mali poslať požiadavku na / mgmt koncový bod, aby sa zobrazil zoznam odkazov.

Celkom zaujímavé je, keď je nastavená cesta základne riadenia /, koncový bod objavenia je zakázaný, aby sa zabránilo možnosti stretu s inými mapovaniami.

3.5. Zdravotné ukazovatele

Rovnako ako v predchádzajúcej verzii môžeme ľahko pridať vlastné indikátory. Na rozdiel od iných rozhraní API zostávajú abstrakcie na vytváranie vlastných koncových bodov stavu nezmenené. Avšak nové rozhranie, ReactiveHealthIndicator, bol pridaný na vykonávanie reaktívnych zdravotných kontrol.

Pozrime sa na jednoduchú vlastnú reaktívnu kontrolu stavu:

@Component public class DownstreamServiceHealthIndicator implementuje ReactiveHealthIndicator {@Override public Mono health () {return checkDownstreamServiceHealth (). OnErrorResume (ex -> Mono.just (new Health.Builder (). Down (ex) .build ())); } private Mono checkDownstreamServiceHealth () {// mohli by sme pomocou WebClienta skontrolovať zdravie reaktívne vrátiť Mono.just (nový Health.Builder (). up (). build ()); }}

Užitočnou vlastnosťou zdravotných ukazovateľov je, že ich môžeme agregovať ako súčasť hierarchie.

Podľa nasledujúceho príkladu by sme teda všetky následné služby mohli zoskupiť pod a po prúdeslužby kategórie. Táto kategória by bola zdravá, pokiaľ by boli všetci vnorení služby bol dosiahnuteľný.

Podrobnejší pohľad nájdete v našom článku o zdravotných ukazovateľoch.

3.6. Skupiny pre zdravie

Od Spring Boot 2.2 môžeme organizovať zdravotné indikátory do skupín a aplikovať rovnakú konfiguráciu na všetkých členov skupiny.

Napríklad môžeme vytvoriť skupinu zdravia s názvom zvyk pridaním tohto do nášho application.properties:

management.endpoint.health.group.custom.include = diskSpace, ping

Týmto spôsobom zvyk skupina obsahuje miesto na disku a ping ukazovatele zdravia.

Teraz, keď hovoríme / aktuátor / zdravie koncový bod, povedalo by nám to o novej skupine zdravia v odpovedi JSON:

{"status": "UP", "groups": ["custom"]}

Pri skupinách zdravia môžeme vidieť agregované výsledky niekoľkých zdravotných indikátorov.

V takom prípade, ak pošleme žiadosť na adresu / aktuátor / zdravie / zvyk, potom:

{"status": "UP"}

Skupinu môžeme nakonfigurovať tak, aby zobrazovala ďalšie podrobnosti prostredníctvom application.properties:

management.endpoint.health.group.custom.show-components = vždy management.endpoint.health.group.custom.show-details = vždy

Teraz, ak pošleme rovnakú žiadosť na adresu / aktuátor / zdravie / zvyk, uvidíme ďalšie podrobnosti:

{"status": "UP", "components": {"diskSpace": {"status": "UP", "details": {"total": 499963170816, "free": 91300069376, "threshold": 10485760} }, "ping": {"status": "HORE"}}}

Je tiež možné zobraziť tieto podrobnosti iba pre oprávnených používateľov:

management.endpoint.health.group.custom.show-components = keď_autorizovaný management.endpoint.health.group.custom.show-details = keď_autorizovaný

Môžeme mať aj vlastné mapovanie stavu.

Napríklad namiesto odpovede HTTP 200 OK môže vrátiť stavový kód 207:

management.endpoint.health.group.custom.status.http-mapping.up = 207

Tu hovoríme Spring Boot, aby vrátil 207 stavový kód HTTP, ak zvyk skupinový stav je UP.

3.7. Metriky v Spring Boot 2

Vo Spring Boot 2.0 boli interné metriky nahradené podporou mikrometrov, takže môžeme očakávať zlomové zmeny. Pokiaľ naša aplikácia využívala metrické služby ako napr GaugeService alebo CounterService, už nebudú k dispozícii.

Namiesto toho sa od nás očakáva priama interakcia s mikrometrom. V Spring Boot 2.0 dostaneme fazuľu typu MeterRegistry automaticky nakonfigurované pre nás.

Okrem toho je teraz mikrometer súčasťou závislostí aktuátora, takže by sme mali byť dobrí, pokiaľ je závislosť aktuátora v triede.

Navyše dostaneme úplne novú odpoveď od spoločnosti / metriky koncový bod:

{"names": ["jvm.gc.pause", "jvm.buffer.memory.used", "jvm.memory.used", "jvm.buffer.count", // ...]}

Ako vidíme, neexistujú žiadne skutočné metriky, ktoré sme dostali v 1.x.

Ak chcete získať skutočnú hodnotu konkrétnej metriky, môžeme teraz prejsť na požadovanú metriku, napr. /actuator/metrics/jvm.gc.pausea získate podrobnú odpoveď:

{"name": "jvm.gc.pause", "measurement": [{"statistika": "počet", "hodnota": 3.0}, {"statistika": "TotalTime", "hodnota": 7.9E7} , {"statistic": "Max", "value": 7.9E7}], "availableTags": [{"tag": "Cause", "values": ["Metadata GC Threshold", "Allocation Failure"]} , {"tag": "action", "values": ["koniec vedľajšieho GC", "koniec hlavného GC"]}]}

Teraz sú metriky oveľa dôkladnejšie, okrem nielen rôznych hodnôt, ale aj niektorých súvisiacich metadát.

3.8. Prispôsobenie /Info Koncový bod

The /Info koncový bod zostáva nezmenený. Rovnako ako predtým, môžeme pridať podrobnosti gitu pomocou príslušnej závislosti Maven alebo Gradle:

 pl.project13.maven git-commit-id-plugin 

Podobne, môžeme tiež zahrnúť informácie o zostave vrátane názvu, skupiny a verzie pomocou pluginu Maven alebo Gradle:

 org.springframework.boot spring-boot-maven-plugin build-info 

3.9. Vytvorenie vlastného koncového bodu

Ako sme už predtým zdôraznili, môžeme vytvárať vlastné koncové body. Spring Boot 2 však prepracoval spôsob, ako to dosiahnuť, aby podporoval novú technologicko-agnostickú paradigmu.

Vytvorme koncový bod aktuátora na dopytovanie, povolenie a zakázanie príznakov funkcií v našej aplikácii:

@Component @Endpoint (id = "features") verejná trieda FeaturesEndpoint {private Map features = new ConcurrentHashMap (); @ReadOperation public Map features () {return features; } @ReadOperation public Feature feature (@Selector String name) {return features.get (name); } @WriteOperation public void configureFeature (@Selector String name, Feature feature) {features.put (name, feature); } @DeleteOperation public void deleteFeature (@Selector String name) {features.remove (name); } public static class Feature {private Boolean enabled; // [...] zakladatelia a zakladatelia}}

Na získanie koncového bodu potrebujeme fazuľu. V našom príklade používame @ Komponent pre to. Túto fazuľu tiež musíme ozdobiť @Endpoint.

Cesta nášho koncového bodu je určená id parameter @Endpoint. V našom prípade bude smerovať požiadavky na / aktuátor / vlastnosti.

Keď sme pripravení, môžeme začať definovať operácie pomocou:

  • @ReadOperation: Bude sa mapovať na HTTP ZÍSKAJTE.
  • @WriteOperation: Bude sa mapovať na HTTP POST.
  • @DeleteOperation: Bude sa mapovať na HTTP ODSTRÁNIŤ.

Keď spustíme aplikáciu s predchádzajúcim koncovým bodom v našej aplikácii, Spring Boot ju zaregistruje.

Rýchly spôsob, ako to overiť, je skontrolovať protokoly:

[...]. WebFluxEndpointHandlerMapping: Mapované „{[/ aktuátor / vlastnosti / {názov}], metódy = [ZÍSKAŤ], produkuje = [aplikácia / vnd.spring-boot.actuator.v2 + json || aplikácia / json] } "[...]. WebFluxEndpointHandlerMapping: mapované" application / json] "[...]. WebFluxEndpointHandlerMapping: mapované" {[/ aktuátor / funkcie / {meno}], metódy = [POST], spotrebuje = [aplikácia / vnd.spring-boot.actuator.v2 + json || application / json]} "[...]. WebFluxEndpointHandlerMapping: Mapované" {[/ aktuátor / funkcie / {meno}], metódy = [ODSTRÁNIŤ]} "[. ..]

V predchádzajúcich protokoloch môžeme vidieť, ako WebFlux vystavuje náš nový koncový bod. Ak prejdeme na MVC, bude to jednoducho delegovať na túto technológiu bez toho, aby ste museli meniť akýkoľvek kód.

Pri tomto novom prístupe musíme pamätať aj na niekoľko dôležitých aspektov:

  • S MVC neexistujú žiadne závislosti.
  • Všetky metadáta prítomné ako metódy predtým (citlivé, povolené ...) už neexistujú. Môžeme však povoliť alebo zakázať koncový bod pomocou @Endpoint (id = “features”, enableByDefault = false).
  • Na rozdiel od verzie 1.x už nie je potrebné dané rozhranie rozširovať.
  • Na rozdiel od starého modelu na čítanie a zápis môžeme teraz definovať ODSTRÁNIŤ operácie pomocou @DeleteOperation.

3.10. Rozšírenie existujúcich koncových bodov

Poďme si predstaviť, že sa chceme uistiť, že produkčná inštancia našej aplikácie nikdy nie je SNAPSHOT verzia.

Rozhodli sme sa to urobiť zmenou stavového kódu HTTP koncového bodu aktuátora, ktorý vracia tieto informácie, t. J. /Info. Ak by naša aplikácia náhodou bola SNAPSHOT, dostali by sme iné HTTP stavový kód.

Správanie preddefinovaného koncového bodu môžeme ľahko rozšíriť pomocou @EndpointExtension anotácie, alebo jeho konkrétnejšie špecializácie @EndpointWebExtension alebo @EndpointJmxExtension:

@Component @EndpointWebExtension (endpoint = InfoEndpoint.class) verejná trieda InfoWebEndpointExtension {súkromný delegát InfoEndpoint; // štandardný konštruktor @ReadOperation public WebEndpointResponse info () {Map info = this.delegate.info (); Stav celého čísla = getStatus (informácie); vrátiť nový WebEndpointResponse (informácie, stav); } súkromné ​​celé číslo getStatus (mapové informácie) {// návrat 5xx, ak sa jedná o snímok návrat 200; }}

3.11. Povoliť všetky koncové body

Aby sme ku koncovým bodom aktuátora mohli pristupovať pomocou protokolu HTTP, musíme ich povoliť aj sprístupniť.

Predvolene všetky koncové body okrem /vypnúť sú povolené. Len / zdravie a /Info koncové body sú predvolene vystavené.

Aby sme sprístupnili všetky koncové body, musíme pridať nasledujúcu konfiguráciu:

management.endpoints.web.exposure.include = *

Ak chcete výslovne povoliť konkrétny koncový bod (napr. /vypnúť), používame:

management.endpoint.shutdown.enabled = true

Ak chcete vystaviť všetky povolené koncové body okrem jedného (napr. / drevorubači), používame:

management.endpoints.web.exposure.include = * management.endpoints.web.exposure.exclude = protokolovače

4. Pohon Spring Boot 1.x.

V 1.x sa Actuator riadi modelom čítania a zápisu, čo znamená, že z neho môžeme čítať alebo do neho zapisovať.

Môžeme napríklad načítať metriky alebo stav našej aplikácie. Prípadne by sme mohli elegantne ukončiť našu aplikáciu alebo zmeniť našu konfiguráciu protokolovania.

Aby to fungovalo, vyžaduje Actuator Spring MVC, aby vystavil svoje koncové body cez HTTP. Nie je podporovaná žiadna iná technológia.

4.1. Koncové body

V 1.x prináša Actuator vlastný bezpečnostný model. Využíva výhody konštrukcií Spring Security, ale je potrebné ho nakonfigurovať nezávisle od zvyšku aplikácie.

Väčšina koncových bodov je tiež citlivá - to znamená, že nie sú úplne verejné alebo bude väčšina informácií vynechaná - zatiaľ čo niekoľko z nich nie je, napr. /Info.

Tu sú niektoré z najbežnejších koncových bodov, ktoré boot poskytuje po vybalení z krabice:

  • / zdravie zobrazuje zdravotné informácie o aplikácii (jednoduché postavenie pri prístupe cez neoverené pripojenie alebo úplné podrobnosti správy pri autentifikácii); v predvolenom nastavení nie je citlivý.
  • /Info zobrazuje ľubovoľné informácie o aplikácii; v predvolenom nastavení nie je citlivý.
  • / metriky zobrazuje informácie o metrikách pre aktuálnu aplikáciu; v predvolenom nastavení je citlivý.
  • / stopa zobrazuje informácie o sledovaní (predvolene niekoľko posledných požiadaviek HTTP).

Celý zoznam existujúcich koncových bodov nájdete v oficiálnych dokumentoch.

4.2. Konfigurácia existujúcich koncových bodov

Každý koncový bod môžeme prispôsobiť pomocou vlastností pomocou formátu endpoints. [endpoint name]. [property to customize].

K dispozícii sú tri vlastnosti:

  • id: pomocou ktorého sa k tomuto koncovému bodu bude pristupovať cez HTTP
  • povolené: ak je to pravda, potom je k nej prístup; inak nie
  • citlivý: ak je to pravda, potom potrebujete oprávnenie na zobrazovanie dôležitých informácií cez HTTP

Napríklad pridaním nasledujúcich vlastností sa prispôsobí /fazuľa koncový bod:

endpoints.beans.id = springbeans endpoints.beans.sensitive = false endpoints.beans.enabled = true

4.3. / zdravie Koncový bod

The / zdravie koncový bod sa používa na kontrolu stavu alebo stavu spustenej aplikácie.

Spravidla sa vykonáva monitorovacím softvérom, ktorý nás upozorní, ak bežiaca inštancia zlyhá alebo bude nezdravá z iných dôvodov, napríklad z dôvodu problémov s pripojením k našej databáze, nedostatku miesta na disku atď.

V predvolenom nastavení môžu neoprávnení používatelia vidieť iba informácie o stave, keď pristupujú cez HTTP:

{"status": "UP"} 

Tieto informácie o zdraví sa zhromažďujú od všetkých fazúľ implementujúcich HealthIndicator rozhranie nakonfigurované v kontexte našej aplikácie.

Niektoré informácie vrátené používateľom HealthIndicator má citlivú povahu, ale môžeme ju nakonfigurovať endpoints.health.sensitive = false vystaviť podrobnejšie informácie, ako je miesto na disku, pripojenie sprostredkovateľa správ, vlastné kontroly a ďalšie.

Upozorňujeme, že to funguje iba pre verzie Spring Boot pod verziou 1.5.0. V prípade verzie 1.5.0 a novšej by sme tiež mali vypnúť zabezpečenie nastavením management.security.enabled = false za neoprávnený prístup.

Mohli by sme tiež implementovať náš vlastný ukazovateľ zdravia, ktoré môžu zhromažďovať akýkoľvek typ vlastných zdravotných údajov špecifických pre aplikáciu a automaticky ich vystavovať prostredníctvom servera / zdravie koncový bod:

@Component ("myHealthCheck") verejná trieda HealthCheck implementuje HealthIndicator {@Override public Health health () {int errorCode = check (); // vykonať určitú špecifickú kontrolu stavu if (errorCode! = 0) {return Health.down () .withDetail ("Error Code", errorCode) .build (); } vrátiť Health.up (). build (); } public int check () {// Naša logika kontroly zdravotného stavu 0; }} 

Takto bude vyzerať výstup:

{"status": "DOWN", "myHealthCheck": {"status": "DOWN", "chybový kód": 1}, "diskSpace": {"status": "UP", "free": 209047318528, " prahová hodnota ": 10485760}}

4.4. /Info Koncový bod

Môžeme tiež prispôsobiť údaje zobrazené znakom /Info koncový bod:

info.app.name = Spring Sample Application info.app.description = Toto je moja prvá jarná bootovacia aplikácia info.app.version = 1.0.0

A výstup vzorky:

{"app": {"version": "1.0.0", "description": "Toto je moja prvá jarná bootovacia aplikácia", "name": "Spring Sample Application"}}

4.5. / metriky Koncový bod

Koncový bod metrík zverejňuje informácie o OS a JVM, ako aj metriky na úrovni aplikácie. Po povolení dostaneme spolu s niektorými metrikami HTTP aj informácie, ako sú pamäť, halda, procesory, vlákna, načítané triedy, vyložené triedy a skupiny vlákien.

Takto vyzerá výstup tohto koncového bodu po vybalení z krabice:

{"mem": 193024, "mem.free": 87693, "processors": 4, "instance.uptime": 305027, "uptime": 307077, "systemload.average": 0.11, "heap.committed": 193024 , "heap.init": 124928, "heap.used": 105330, "heap": 1764352, "threads.peak": 22, "threads.daemon": 19, "threads": 22, "classes": 5819 , "classes.loaded": 5819, "classes.unloaded": 0, "gc.ps_scavenge.count": 7, "gc.ps_scavenge.time": 54, "gc.ps_marksweep.count": 1, "gc. ps_marksweep.time ": 44," httpsessions.max ": -1," httpsessions.active ": 0," counter.status.200.root ": 1," gauge.response.root ": 37.0} 

Na zhromažďovanie vlastných metrík máme podporu pre merače (snímky údajov s jednou hodnotou) a počítadlá, t. J. Metriky na zvyšovanie / znižovanie.

Implementujme naše vlastné metriky do / metriky koncový bod.

Prispôsobíme tok prihlásenia, aby sme zaznamenali úspešný a neúspešný pokus o prihlásenie:

@ Verejná trieda ServiceServiceImpl {súkromná konečná CounterService counterService; public LoginServiceImpl (CounterService counterService) {this.counterService = counterService; } verejné logické prihlásenie (reťazec userName, char [] heslo) {logický úspech; if (userName.equals ("admin") && "secret" .toCharArray (). equals (heslo)) {counterService.increment ("counter.login.success"); úspech = pravda; } else {counterService.increment ("counter.login.failure"); úspech = nepravda; } návrat úspech; }}

Tu by mohol vyzerať výstup:

{... "counter.login.success": 105, "counter.login.failure": 12, ...} 

Upozorňujeme, že pokusy o prihlásenie a ďalšie udalosti súvisiace so zabezpečením sú k dispozícii v škatuli v ovládači ako udalosti auditu.

4.6. Vytvorenie nového koncového bodu

Okrem použitia existujúcich koncových bodov poskytovaných Spring Boot môžeme vytvoriť aj úplne nový.

Najprv musíme mať nový koncový bod implementovaný Koncový bod rozhranie:

Verejná trieda @Component CustomEndpoint implementuje koncový bod {@Override public String getId () {return "customEndpoint"; } @Override public boolean isEnabled () {return true; } @Override public boolean isSensitive () {return true; } @Override public List invoke () {// Vlastná logika na vytvorenie výstupu Zoznam správ = new ArrayList (); messages.add ("Toto je správa 1"); messages.add ("Toto je správa 2"); spätné správy; }}

S cieľom získať prístup k tomuto novému koncovému bodu, je id sa používa na jeho mapovanie. Inými slovami, mohli by sme to cvičiť nárazovo / customEndpoint.

Výkon:

["Toto je správa 1", "Toto je správa 2"]

4.7. Ďalšie prispôsobenie

Z bezpečnostných dôvodov by sme sa mohli rozhodnúť vystaviť koncové body aktuátora cez neštandardný port - vedenie.port majetok sa dá ľahko použiť na jeho konfiguráciu.

Tiež, ako sme už spomenuli, v 1.x. Aktuátor konfiguruje svoj vlastný bezpečnostný model založený na Spring Security, ale nezávislý od zvyšku aplikácie.

Preto môžeme zmeniť vedenie.adresa vlastnosť obmedziť, odkiaľ je možné ku koncovým bodom získať prístup cez sieť:

#port použitý na odhalenie správy aktuátora.port = 8081 #CIDR má povolené naraziť na správu aktuátora.adresa = 127.0.0.1 # Či by mala byť celkovo povolená alebo zakázaná bezpečnosť.security.enabled = false

Okrem toho všetky vstavané koncové body okrem /Info sú predvolene citlivé.

Ak aplikácia používa Spring Security, môžeme tieto koncové body zabezpečiť definovaním predvolených vlastností zabezpečenia (používateľské meno, heslo a rola) v application.properties spis:

security.user.name = admin security.user.password = tajný management.security.role = SUPERUSER

5. Záver

V tomto článku sme hovorili o Spring Boot Actuator. Začali sme definíciou, čo pohon znamená a čo pre nás robí.

Ďalej sme sa zamerali na aktuátor aktuálnej verzie Spring Boot verzie 2.x, kde sme prediskutovali, ako ho používať, vylepšovať a rozširovať. Hovorili sme tiež o dôležitých bezpečnostných zmenách, ktoré môžeme nájsť v tejto novej iterácii. Diskutovali sme o niektorých populárnych koncových bodoch a o tom, ako sa tiež zmenili.

Potom sme diskutovali o ovládači v staršej verzii Spring Boot 1.

Na záver sme predviedli, ako prispôsobiť a rozšíriť aktuátor.

Ako vždy, kód použitý v tomto článku nájdete na serveri GitHub pre Spring Boot 2.x a Spring Boot 1.x.


$config[zx-auto] not found$config[zx-overlay] not found