Pengantar Spring Boot Actuator

Salut, orang Khabrovit! Dalam seminggu, kelas akan dimulai dalam grup baru dari kursus "Developer on the Spring Framework" . Dalam hal ini, kami berbagi dengan Anda materi berguna yang memberi tahu Spring Actuator itu dan bagaimana itu bisa berguna.



  1. Apa itu Spring Actuator?
  2. Bagaimana cara menambahkan Spring Actuator ke proyek Maven atau Gradle?
  3. Buat proyek Spring Boot dengan ketergantungan Spring Actuator.
  4. Pemantauan Aplikasi dengan Titik Akhir Aktuator Musim Semi.

Apa itu Spring Actuator?

Setelah Anda mengembangkan aplikasi dan menggunakannya dalam produksi, sangat penting untuk memantau kinerjanya. Ini terutama berlaku untuk aplikasi mission-critical, seperti sistem perbankan, di mana kegagalan aplikasi secara langsung mempengaruhi bisnis.

Secara tradisional, sebelum Spring Actuator, kami perlu menulis kode untuk menguji kesehatan aplikasi, tetapi dengan Spring Actuator kami tidak perlu menulis kode. Spring Actuator menyediakan beberapa titik akhir yang dapat berguna untuk memonitor aplikasi.

Bagaimana cara menambahkan Spring Actuator ke proyek Maven atau Gradle?

Maven

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies> 

Gradle

 dependencies { compile("org.springframework.boot:spring-boot-starter-actuator") } 

Membuat Proyek Spring Boot dengan Spring Actuator

Mari kita lanjutkan dan membuat proyek Spring Boot dengan dependensi Spring Actuator, Web, dan DevTools menggunakan Spring Initializer .

Harap dicatat bahwa pada saat penulisan ini, versi Spring Boot adalah 2.1.0.



Impor proyek ke Eclipse atau IDE lain dan jalankan SpringActuatorApplication.java .

Di konsol, Anda akan melihat yang berikut:



Anda dapat melihat bahwa Tomcat tertanam berjalan pada port 8080, dan SpringActuatorApplication berjalan pada Tomcat. Anda juga dapat melihat bahwa titik akhir aktuator tersedia di /actuator.

 018-11-09 20:00:29.346 INFO 8338 --- [ restartedMain] osbwembedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2018-11-09 20:00:29.354 INFO 8338 --- [ restartedMain] nbjsSpringActuatorApplication : Started SpringActuatorApplication in 9.273 seconds (JVM running for 11.823) 2018-11-09 20:00:29.190 INFO 8338 --- [ restartedMain] osbaeweb.EndpointLinksResolver : Exposing 2 endpoint(s) beneath base path '/actuator'. 

Pemantauan Aplikasi dengan Titik Akhir Aktuator Musim Semi

Seperti yang kami katakan di atas, Spring Actuator menyediakan beberapa titik akhir yang dapat kita gunakan untuk memantau kesehatan aplikasi.

IDDeskripsi
auditevents
Memberikan informasi acara
audit untuk aplikasi saat ini.
kacangMenampilkan daftar lengkap semua
Kacang musim semi dalam aplikasi.
cacheInformasi cache.
kondisiMenunjukkan Kondisinya, yang
dihitung untuk kelas konfigurasi
dan konfigurasi otomatis, dan alasan, untuk
yang cocok atau tidak
berkorespondensi.
configpropsMenampilkan daftar semua
@ConfigurationProperties
envMenampilkan properti dari
ConfigurableEnvironment.
jalur terbangMenampilkan migrasi basis data
Jalur terbang yang diterapkan.
kesehatanMenunjukkan informasi kesehatan
aplikasi.
httptraceMenampilkan informasi penelusuran
HTTP (secara default, 100 HTTP terakhir
request-response).
infoMenampilkan informasi tambahan
tentang aplikasi.
integrasigraphHitung Integrasi Musim Semi.
penebangMenampilkan dan memungkinkan
ubah konfigurasi penebang di
aplikasi.
liquibaseMenampilkan migrasi yang diterapkan
Database Liquibase
metrikMenampilkan informasi metrik
untuk aplikasi saat ini.
pemetaanMenampilkan daftar semua jalur.
@RequestMapping.
tugas terjadwalMenampilkan tugas yang dijadwalkan
(tugas terjadwal).
sesiMengizinkan mengambil dan menghapus
sesi pengguna dari repositori,
didukung oleh Sesi Musim Semi. Tidak tersedia
saat menggunakan sesi pegas untuk reaktif
aplikasi web.
shutdownMengizinkan aplikasi dengan benar
untuk menyelesaikan pekerjaan.
threaddumpMenampilkan informasi aliran.

Mengaktifkan Titik Akhir

Secara default, semua titik akhir diaktifkan kecuali shutdown . Untuk mengaktifkan titik akhir, gunakan properti berikut di file application.properties .

 management.endpoint.<code><</code>id<code>></code>.enabled 

Catatan Penerjemah: secara default, akses ke semua titik akhir hanya melalui JMX, tidak ada akses melalui HTTP ke semua titik akhir (lihat di bawah).

Contoh:

Untuk mengaktifkan titik akhir shutdown , kita perlu membuat entri berikut di file application.properties :

 management.endpoint.shutdown.enabled=true 

Kami dapat menonaktifkan semua titik akhir dan kemudian hanya menyertakan yang kami butuhkan. Dalam konfigurasi berikutnya, semua titik akhir kecuali info akan dinonaktifkan.

 management.endpoints.enabled-by-default=false management.endpoint.info.enabled=true 

Akses ke titik akhir melalui HTTP

Mari kita pergi ke URL localhost : 8080 / actuator dan lihat titik akhir yang tersedia.

Catatan: Saya menggunakan tukang pos untuk pengujian karena menunjukkan JSON dalam format yang terstruktur dengan baik. Anda dapat menggunakan alat lain apa pun atau hanya peramban.



Seperti yang sudah Anda perhatikan, hanya titik akhir health dan info yang ditampilkan di sini. Karena ini adalah satu-satunya titik akhir yang dapat diakses secara default melalui http. Akses melalui http ke titik akhir lainnya ditutup secara default untuk alasan keamanan, karena mungkin mengandung informasi rahasia dan, oleh karena itu, dapat dikompromikan.

Akses ke titik akhir tertentu

Jika kita ingin memberikan akses melalui web (http) ke titik akhir lain maka kita perlu membuat entri berikut di file application.properties .

 management.endpoints.web.exposure.include=<    ><a href="http://localhost:8080/actuator"></a> 

Contoh :

 management.endpoints.web.exposure.include= health,info,env 

Sekarang, setelah menambahkan entri di atas ke application.properties , mari kita kembali ke http: // localhost: 8080 / actuator

Seperti yang kita lihat pada tangkapan layar di bawah ini, endpoint env juga disertakan.



Akses ke semua titik akhir

Jika kita ingin memasukkan semua titik akhir, kita dapat menggunakan tanda * seperti yang ditunjukkan di bawah ini.

 management.endpoints.web.exposure.include=* 



Akses ke semua kecuali beberapa titik akhir

Dua entri di bawah ini mengaktifkan semua titik akhir, tetapi nonaktifkan titik akhir env.

 management.endpoints.web.exposure.include=* management.endpoints.web.exposure.exclude=env 





Menonaktifkan semua titik akhir HTTP

Jika Anda tidak ingin memberikan titik akhir melalui HTTP, Anda dapat melakukan ini dengan mengatur berikut ini di file application.properties :

 management.server.port=-1 

atau lebih:

 management.endpoints.web.exposure.exclude=* 

Konfigurasikan URL untuk akses ke titik akhir

Secara default, semua titik akhir dapat diakses melalui URL /actuator di alamat form /actuator/{id} . Namun, Anda dapat mengubah jalur dasar /actuator menggunakan properti berikut di application.properties .

 management.endpoints.web.base-path 

Misalnya, jika Anda ingin membuat URL basis seperti /monitor bukan /actuator Anda dapat melakukan ini sebagai berikut:

 management.endpoints.web.base-path=/monitor 



Dalam hal ini, semua titik akhir akan tersedia sebagai /monitor/{id} bukan /actuator/{id}



Aktuator Boot Musim Semi Endpoint

Mari kita bahas beberapa titik akhir yang paling penting.

/ kesehatan

Titik akhir health memberikan status keseluruhan aplikasi: apakah itu aktif dan berjalan atau tidak. Ini sangat penting untuk memantau status aplikasi ketika sedang dalam produksi. Titik akhir ini dapat diintegrasikan dengan aplikasi pemantauan dan akan sangat berguna untuk menentukan kesehatan aplikasi secara real time.

Jumlah informasi yang disediakan oleh titik akhir health tergantung pada properti management.endpoint.health.show-details dalam file application.properties .

Jika management.endpoint.health.show-details=never , maka tidak ada informasi tambahan yang ditampilkan. Dalam hal ini, Anda hanya akan melihat yang berikut ini (ini adalah perilaku default).



Jika management.endpoint.health.show-details=always , maka informasi tambahan ditampilkan kepada semua pengguna. Seperti yang kita lihat dalam jawaban di bawah, kami memiliki informasi tentang ruang disk (diskSpace). Jika aplikasi Anda terhubung ke database, maka Anda juga akan melihat informasi tentang status database.



Jika management.endpoint.health.show-details=when-authorized , maka informasi tambahan hanya akan ditampilkan kepada pengguna yang berwenang. Otorisasi dapat dikonfigurasi menggunakan properti management.endpoint.health.roles .

Indikator Preset

Spring Boot Actuator memiliki banyak "indikator kesehatan" yang dikonfigurasi secara otomatis (HeathIndicators) untuk menguji kesehatan berbagai bagian aplikasi. Misalnya, DiskspaceHealthIndicator menyediakan informasi ruang disk. Jika Anda menggunakan MongoDB, maka MongoHealthIndicator akan memeriksa database Mongo (apakah server berjalan atau tidak) dan menampilkan informasi yang sesuai. Secara default, status aplikasi akhir ditentukan oleh HealthAggregator , yang hanya mengurutkan daftar status yang disediakan oleh masing-masing HealthIndicator . Status pertama dalam daftar yang disortir digunakan sebagai status akhir dari aplikasi.

Menonaktifkan semua indikator pra-konfigurasi

"Indikator kesehatan" yang dijelaskan di atas diaktifkan secara default, namun, Anda dapat mematikannya menggunakan properti berikut:

 management.health.defaults.enabled=false 

Menonaktifkan satu indikator

Atau, Anda dapat menonaktifkan HealthIndicator terpisah, seperti yang ditunjukkan di bawah ini, misalnya, untuk menonaktifkan pemeriksaan ruang disk:

 management.health.diskspace.enabled=false 

Catatan: pengidentifikasi HealthIndicator akan menjadi nama kacang tanpa akhiran HealthIndicator .

Sebagai contoh :

 DiskSpaceHealthIndicator diskspace MongoHealthIndicator mongo CassandraHealthIndicator cassandra DataSourceHealthIndicator datasource 

dan seterusnya ...

Menulis Indikator Anda (Indikator Kesehatan)

Seiring dengan HealthIndicator disediakan oleh Spring Boot Actuator, kita dapat membuat indikator status khusus. Untuk melakukan ini, Anda perlu membuat kelas yang mengimplementasikan antarmuka HealthIndicator , menerapkan metode health() dan mengembalikan Health sebagai jawaban dengan informasi yang relevan, seperti yang ditunjukkan di bawah ini:

 import org.springframework.boot.actuate.health.Health; import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.stereotype.Component; @Component public class CustomHealthIndicator implements HealthIndicator { @Override public Health health() { int errorCode = 0; // In the above line,I am simple assigning zero,but you can call Health check related code like below commented line and that method can return the appropriate code. // int errorCode = performHealthCheck(); if (errorCode != 0) { return Health.down().withDetail("Error Code", errorCode).build(); } return Health.up().build(); } } 

Mari kita pergi ke titik akhir kesehatan lagi dan melihat apakah indikator kita tercermin atau tidak.



Kami melihat indikator kami.

Status Komponen Tunggal

Anda juga dapat memeriksa status komponen individual. Pada contoh di atas, kami melihat indikator yang kami tulis dan diskSpace.

Jika kami hanya ingin melihat status disk, kami dapat menggunakan URL berikut:

http: // localhost: 8080 / actuator / health / diskSpace



/ info

info endpoint menyediakan informasi umum tentang aplikasi yang diterima dari file seperti build-info.properties atau git.properties , atau dari properti yang ditentukan dalam application.properties .

Karena tidak ada file seperti itu di proyek kami, jawabannya akan kosong, seperti yang ditunjukkan di bawah ini:



Spring Boot Actuator menampilkan informasi bangunan jika META-INF/build-info.properties . File informasi proyek ini dibuat pada waktu build-info oleh target build-info . Di sini Anda juga dapat menambahkan sejumlah properti tambahan yang sewenang-wenang.

Mari kita tambahkan target build-info untuk spring-boot-maven-plugin ke pom.xm l.

 <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.1.0.RELEASE</version> <executions> <execution> <goals> <goal>build-info</goal> </goals> <configuration> <additionalProperties> <encoding.source>UTF-8</encoding.source> <encoding.reporting>UTF-8</encoding.reporting> <java.source>${maven.compiler.source}</java.source> <java.target>${maven.compiler.target}</java.target> </additionalProperties> </configuration> </execution> </executions> </plugin> 

Sekarang, mari kita lihat titik akhir info lagi dan lihat informasi perakitan, seperti yang ditunjukkan di bawah ini:



Selain itu, kita dapat menambahkan informasi aplikasi dengan kunci info ke application.properties , seperti yang ditunjukkan di bawah ini, dan itu akan ditampilkan di titik akhir /info .

 info.application.name=spring-actuator info.application.description=spring boot actuator application info.application.version=0.0.1-SNAPSHOT 



/ kacang

Titik akhir beans menunjukkan semua beans didefinisikan dalam wadah Musim Semi dengan informasi berikut tentang masing-masing kacang:

 aliases :    scope :   type :    resource :  (),     dependencies :    

Sebagai contoh, saya membuat RestController bernama TestController dan menyuntikkan komponen yang disebut TestService

 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { @Autowired private TestService testService; @GetMapping("/messages") public String getMessage() { return "Hello"; } } import org.springframework.context.annotation.Configuration; @Configuration public class TestService { } 

Anda dapat melihat bagaimana ini ditampilkan untuk testController pada tangkapan layar di bawah ini.



/ configprops
Titik configProps memperlihatkan semua @ConfigurationProperties dianotasi oleh @ConfigurationProperties .



Dalam tangkapan layar di atas, kita melihat dua kacang yang didefinisikan dalam Kerangka Spring itu sendiri dan dijelaskan dengan @ConfigurationProperties dan karenanya ditampilkan di titik akhir ini.

Tangkapan layar di bawah ini menunjukkan kode sumber HttpTraceProperties dianotasi oleh @ConfigurationProperties .



/ env

env endpoint menyediakan semua informasi lingkungan dalam urutan berikut:

Properti sistem
Ketergantungan JVM (platform independent)
Lingkungan atau variabel sistem
lingkungan sekitar
tergantung pada operasi
sistem (tergantung platform)
Pengaturan Level Aplikasi
didefinisikan dalam
properti aplikasi



/ heapdump

Titik akhir heapdump membuang aplikasi tumpukan. Titik akhir ini mengembalikan data biner dalam format HPROF. Karena banyak data biasanya dikembalikan, Anda harus menyimpan dan menganalisisnya.

/ penebang

Titik loggers menyediakan informasi kepada penebang aplikasi tentang tingkat log yang dikonfigurasikan (dikonfigurasiLevel) dan tingkat efektif (efektifLevel). Jika level yang dikonfigurasi tidak ditentukan untuk logger dan induknya (nol), maka level root logger akan menjadi level efektif.

Properti level mengindikasikan level logging mana yang didukung oleh framework logging.



Untuk mendapatkan informasi untuk logger tertentu, berikan nama (id) logger di URL setelah /loggers , seperti yang ditunjukkan di bawah ini:

http: // localhost: 8080 / actuator / loggers / nl.blogpsot.javasolutionsguide.springactuator.SpringActuatorApplication



/ metrik

Titik akhir metrics menunjukkan semua metrik yang dapat Anda lacak untuk aplikasi Anda.



Memeriksa metrik individual

Anda dapat menonton satu metrik dengan meneruskannya di url setelah /metrics , seperti yang ditunjukkan di bawah ini:

http: // localhost: 8080 / actuator / metrics / jvm.memory.used



Referensi

docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html
docs.spring.io/spring-boot/docs/current/actuator-api/html

Menurut tradisi yang ada, kami menunggu komentar Anda dan mengundang semua orang ke hari pembukaan , yang akan diadakan pada 23 Mei.

Source: https://habr.com/ru/post/id452624/


All Articles