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.

- Apa itu Spring Actuator?
- Bagaimana cara menambahkan Spring Actuator ke proyek Maven atau Gradle?
- Buat proyek Spring Boot dengan ketergantungan Spring Actuator.
- 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 ActuatorMari 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 SemiSeperti yang kami katakan di atas, Spring Actuator menyediakan beberapa titik akhir yang dapat kita gunakan untuk memantau kesehatan aplikasi.
Mengaktifkan Titik AkhirSecara 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 HTTPMari 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 tertentuJika 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 / actuatorSeperti yang kita lihat pada tangkapan layar di bawah ini, endpoint
env
juga disertakan.
Akses ke semua titik akhirJika 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 akhirDua 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 HTTPJika 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 akhirSecara 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 EndpointMari kita bahas beberapa titik akhir yang paling penting.
/ kesehatanTitik 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 PresetSpring 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 indikatorAtau, 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;
Mari kita pergi ke titik akhir kesehatan lagi dan melihat apakah indikator kita tercermin atau tidak.

Kami melihat indikator kami.
Status Komponen TunggalAnda 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
/ infoinfo
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
/ kacangTitik 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.
/ configpropsTitik
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
.
/ envenv
endpoint menyediakan semua informasi lingkungan dalam urutan berikut:
/ heapdumpTitik akhir heapdump membuang aplikasi tumpukan. Titik akhir ini mengembalikan data biner dalam format HPROF. Karena banyak data biasanya dikembalikan, Anda harus menyimpan dan menganalisisnya.
/ penebangTitik
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
/ metrikTitik akhir
metrics
menunjukkan semua metrik yang dapat Anda lacak untuk aplikasi Anda.
Memeriksa metrik individualAnda dapat menonton satu metrik dengan meneruskannya di url setelah
/metrics
, seperti yang ditunjukkan di bawah ini:
http: // localhost: 8080 / actuator / metrics / jvm.memory.used
Referensidocs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.htmldocs.spring.io/spring-boot/docs/current/actuator-api/htmlMenurut tradisi yang ada, kami menunggu komentar Anda dan mengundang semua orang ke
hari pembukaan , yang akan diadakan pada 23 Mei.