
Kontrol dan kelola aplikasi Boot Spring Anda dengan antarmuka pengguna yang bagus di atas titik akhir Spring Boot Actuator.
Spring boot actuator
Actuator adalah modul Spring Boot yang menambahkan titik akhir REST / JMX ke aplikasi Anda sehingga Anda dapat dengan mudah melacak dan mengelolanya dalam lingkungan produksi. Titik akhir menawarkan pemeriksaan kesehatan, pemantauan metrik, akses ke log, dump thread, heap dump, informasi lingkungan, dan banyak lagi. Penulis berbicara secara rinci tentang Actuator di artikel berikut:
Aktuator: Pemantauan dan Manajemen Produksi Boot Musim Semi
Pantau dan kelola aplikasi Anda yang sedang berjalan dengan Spring Boot Actuator 2.x. Kumpulkan metrik atau periksa kesehatan aplikasi.
Catatan oleh penerjemah. Ada artikel serupa tentang Habré:
Pengantar Spring Boot ActuatorSpring boot admin
Actuator adalah alat yang hebat dan kuat, selain itu, titik akhirnya mudah dan nyaman untuk digunakan dengan aplikasi lain - Anda hanya menggunakan panggilan layanan REST. Namun, menggunakan Actuator sangat tidak nyaman bagi seseorang. Jauh lebih mudah bagi pengguna untuk memiliki antarmuka pengguna yang baik yang dapat Anda gunakan untuk melihat semua data pemantauan dan mengelola aplikasi Anda. Inilah yang dilayani oleh Spring Boot Admin. Ini memberi Anda lapisan antarmuka pengguna yang nyaman di atas titik akhir Actuator dengan beberapa fitur tambahan di atasnya.
Spring Boot Admin bukan modul yang disediakan oleh tim Spring, itu dibuat oleh perusahaan bernama
Codecentric . Namun, kodenya tersedia untuk umum di
Github dan gratis.
Klien dan server
Tidak seperti Aktuator, Spring Boot Admin sebenarnya terdiri dari dua bagian - klien dan server.
Bagian server berisi antarmuka pengguna administrator dan berfungsi secara independen dari aplikasi yang dipantau. Bagian klien terletak di aplikasi yang dipantau, yang terdaftar di bagian server.
Jadi, bahkan jika aplikasi kita tidak berfungsi atau tidak berfungsi dengan baik, server pemantauan masih berfungsi. Sekarang bayangkan Anda memiliki beberapa aplikasi (seperti Spring Boot microservices), dan masing-masing dapat bekerja dalam beberapa hal. Dengan pemantauan Actuator tradisional, ini sulit, karena Anda perlu mengakses masing-masing secara individual, dan Anda perlu melacak berapa banyak contoh dan di mana ia berjalan.
Saat menggunakan Spring Boot Admin, setiap instance dari aplikasi (klien) yang dipantau terdaftar di server setelah diluncurkan. Kemudian Anda memiliki satu titik (Server Admin) di mana Anda dapat memeriksa semuanya.

Kode sumber
Kode sumber untuk aplikasi yang sudah selesai dapat ditemukan di
repositori Github ini .
Pengaturan server
Pertama mari kita lihat cara mengkonfigurasi Spring Boot Admin Server. Mari kita mulai dengan aplikasi Spring Boot baru. Anda dapat dengan mudah membuatnya menggunakan
Spring Initializr . Pastikan untuk mengaktifkan modul
web .
Setelah membuat proyek, hal pertama yang kita butuhkan adalah menambahkan dependensi Spring Boot Admin Server:
<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> <version>2.1.0</version> </dependency>
Perhatikan bahwa meskipun proyek ini tidak dibuat oleh Pivotal, Anda dapat menemukan modul klien dan server untuk Spring Boot Admin di Spring Initializr. Selanjutnya, kita perlu mengaktifkan Server Admin dengan membuat anotasi kelas aplikasi utama kita menggunakan anotasi
@EnableAdminServer :

Itu saja. Sekarang Anda dapat memulai aplikasi Anda dan setelah membuka halaman Anda akan melihat layar seperti ini:

Server sedang berjalan, tetapi klien belum terdaftar. Mari kita perbaiki.
Pengaturan klien
Seperti pengaturan server, langkah pertama adalah menambahkan ketergantungan yang benar ke aplikasi yang ada:
<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>2.1.0</version> </dependency>
Maka Anda perlu menentukan URL tempat Admin Server Anda berjalan. Tambahkan baris ini ke file
application.properties Anda:
spring.boot.admin.client.url=http:
Menambahkan Aktuator
Anda sekarang harus dapat memulai klien dan server. Pastikan tidak ada konflik port, karena kedua aplikasi menggunakan 8080 secara default. Untuk tujuan pengujian, Anda dapat mengatur
server.port = 0 di
application.properties Anda sehingga klien Anda menggunakan port acak saat startup. Dengan demikian, Anda dapat menguji peluncuran beberapa instance yang berjalan pada port yang berbeda.
Ketika Anda membuka antarmuka pengguna Admin Server, Anda akan melihat aplikasi Anda. Ketika Anda mengklik nama aplikasi, halaman dengan informasi tentang aplikasi akan muncul.

Jika Anda melihat layar yang mirip dengan yang di atas dengan jumlah informasi minimal, itu berarti proyek Anda tidak memiliki Actuator. Ingat bahwa Spring Boot Admin menggunakan titik akhir Actuator di bawah tenda. Untungnya, Anda hanya perlu menambahkan ketergantungan yang sederhana, dan konfigurasi otomatis menangani sisanya.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
Namun, sebagian besar titik akhir tidak ditampilkan secara default di Actuator. Anda perlu mengubah konfigurasi di
application.prop untuk mengeksposnya:
management.endpoints.web.exposure.include=*
Setelah memberikan titik akhir Actuator, Anda akan melihat lebih banyak informasi di antarmuka admin:

Panduan terperinci tentang cara mengkonfigurasi Spring Boot Actuator dapat ditemukan
di artikel ini .
Catatan oleh penerjemah. Dan dalam sebuah
artikel tentang Habré .
Keamanan
Sekarang semuanya berfungsi, kita perlu memastikan bahwa titik akhir Actuator dan antarmuka admin kami tidak dapat diakses oleh semua orang.
Keamanan pelanggan
Jika Anda sudah menggunakan Spring Security, hal di atas tidak akan berfungsi untuk Anda, karena titik akhir drive dilindungi secara default dan server administrator Anda tidak akan dapat mengaksesnya. Jika Anda belum menggunakan Spring Security, Anda harus menambahkan ketergantungan terlebih dahulu:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
Untuk tujuan pengujian, Anda dapat menonaktifkan sementara keamanan titik akhir Actuator dengan
management.security.enabled = false . Namun, kami ingin keamanan diaktifkan. Jika Anda menggunakan otentikasi dasar, Anda cukup menentukan nama pengguna dan kata sandi dalam file properti. Kredensial ini akan digunakan oleh Server Admin untuk otentikasi di titik akhir drive klien:
spring.boot.admin.client.instance.metadata.user.name=joe spring.boot.admin.client.instance.metadata.user.password=my-secret-password
Secara default, kecuali jika dikonfigurasi sebaliknya, Spring Boot secara default menggunakan pengguna
pengguna dan kata sandi yang dihasilkan secara otomatis setiap kali aplikasi dimulai. Anda dapat memverifikasi kata sandi di konsol selama startup. Jika Anda ingin secara eksplisit menentukan nama pengguna dan kata sandi yang diperlukan untuk aplikasi Anda, Anda dapat menentukannya di properti Anda:
spring.security.user.name=joe spring.security.user.password=my-secret-password
Keamanan server
Seperti halnya klien, kita perlu menambahkan ketergantungan Spring Security:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
Sekarang, mari kita konfigurasikan nama pengguna dan kata sandi yang diperlukan untuk masuk ke Server Admin di properti
aplikasi Anda.
Properti :
spring.security.user.name=admin spring.security.user.password=admin-password
Sekarang pada klien Anda, Anda juga perlu menambahkan kredensial ini, jika tidak, ia tidak akan dapat mendaftar di server:
spring.boot.admin.client.username=admin spring.boot.admin.client.password=admin-password
Sekarang kembali ke sisi server. Hal terakhir yang kami butuhkan adalah menambahkan konfigurasi Spring Security untuk melindungi antarmuka pengguna admin:
@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler(); successHandler.setTargetUrlParameter("redirectTo"); successHandler.setDefaultTargetUrl("/"); http.authorizeRequests() .antMatchers("/assets/**").permitAll() .antMatchers("/login").permitAll() .anyRequest().authenticated().and() .formLogin().loginPage("/login") .successHandler(successHandler).and() .logout().logoutUrl("/logout").and() .httpBasic().and() .csrf() .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) .ignoringAntMatchers( "/instances", "/actuator/**" ); } }
Ini akan memberikan akses ke antarmuka administrator hanya untuk pengguna yang diautentikasi menggunakan otentikasi HTTP dasar untuk masuk. Halaman login itu sendiri dan sumber daya antarmuka pengguna statis, termasuk javascript, HTML dan CSS, terbuka. Jika tidak, Anda tidak akan bisa masuk. Lalu ada perlindungan terhadap pemalsuan permintaan lintas situs (CSRF, Pemalsuan Permintaan Lintas Situs) berdasarkan cookie. Anda dapat melihat bahwa beberapa jalur diabaikan dalam perlindungan CSRF - ini karena Server Admin saat ini
tidak memiliki dukungan yang tepat .
Sekarang setelah reboot, Anda akan melihat layar login yang indah melindungi Server Admin Anda:

Penemuan awan
Klien Spring Boot Admin bukan satu-satunya cara untuk mendaftarkan aplikasi Anda di server. Server Admin juga mendukung Spring Cloud Service Discovery. Anda dapat membaca lebih lanjut di
dokumentasi resmi atau di artikel "
Spring Cloud Discovery with Spring Boot Admin ".
Notifikasi
Segera setelah pemantauan dimulai, Anda ingin diberi tahu ketika terjadi kesalahan. Berita baiknya adalah Spring Admin menyediakan berbagai opsi pemberitahuan.
Jika ini adalah pertama kalinya Anda mengunjungi halaman Server Admin, ia meminta izin untuk menampilkan pemberitahuan push di komputer Anda. Setiap kali masalah terjadi, Anda akan menerima pesan sembulan.

Pemberitahuan lainnya membutuhkan pengaturan yang mudah. Ini biasanya berarti hanya menyediakan beberapa entri di properti
aplikasi Anda. Layanan berikut saat ini didukung:
Siapkan pemberitahuan email
Jika Anda ingin mengaktifkan pemberitahuan email, Anda perlu menambahkan ketergantungan email Spring ke sisi server Anda:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
Maka Anda perlu menentukan server SMTP Anda, yang akan digunakan untuk mengirim pemberitahuan dan kredensial melalui email. Perbarui
aplikasi Anda. Properti Server Admin Anda.
spring.mail.host=smtp.foo.com spring.mail.username=smtp-server-user spring.mail.password=smtp-server-password
Maka Anda perlu mengidentifikasi penerima dan pengirim.
# Sender email address spring.boot.admin.notify.mail.from="Spring Boot Admin <noreply@foo.com>" # Comma-delimited list of recipient email addresses spring.boot.admin.notify.mail.to=alice@foo.com,bob@bar.com # Comma-delimited list of carbon copy recipient email addresses spring.boot.admin.notify.mail.cc=joe@foo.com
Kesimpulan
Spring Boot Admin menawarkan lapisan antarmuka pengguna yang nyaman dan bermanfaat di atas titik akhir Actuator. Selain itu, ini memungkinkan Anda untuk mengontrol beberapa aplikasi secara terpusat dengan banyak instance, yang sangat berharga saat bekerja di cloud dan dengan layanan microser. Namun, pastikan bahwa Anda cukup melindungi klien dan server Anda. Untuk informasi lebih lanjut, lihat
dokumentasi resmi .