Karakteristik layanan mikro menentukan bahwa penyebaran modul fungsional didistribusikan. Sebagian besar modul fungsional dijalankan pada mesin yang berbeda dan berinteraksi satu sama lain melalui panggilan layanan. Bisnis mengalir di kantor depan dan belakang akan diproses dan disahkan oleh banyak layanan microser. Bagaimana cara menemukan pengecualian dengan cepat? Tautan mana yang memiliki masalah?
Di bawah kerangka kerja ini, pemantauan layanan mikro sangat penting. Artikel ini terutama menggabungkan Actuator Spring Boot untuk berbagi dengan Anda penggunaan umum dari Microservice Spring Boot Actuator, sehingga kami dapat memantau dan mengelola layanan mikro kami dalam kehidupan sehari -hari.
Pemantauan aktuator
Spring Boot menggunakan konsep "kebiasaan lebih baik dari konfigurasi" dan menggunakan pemindaian paket dan mekanisme konfigurasi otomatis untuk memuat kacang pegas yang bergantung pada stoples. Tidak memerlukan konfigurasi XML untuk mengimplementasikan semua konfigurasi pegas. Meskipun melakukan ini membuat kode kami sangat ringkas, informasi seperti pembuatan instance dan ketergantungan dari seluruh aplikasi diskrit terhadap anotasi berbagai kelas konfigurasi, yang membuat kami sangat sulit untuk menganalisis berbagai hubungan antara sumber daya dan instance di seluruh aplikasi.
Actuator adalah fungsi terintegrasi dari introspeksi dan pemantauan sistem aplikasi yang disediakan oleh Spring Boot. Anda dapat melihat informasi rinci konfigurasi aplikasi, seperti informasi konfigurasi otomatis, biji pegas yang dibuat, dan beberapa sifat lingkungan.
Pemantauan aktuator dapat dilakukan dengan menambahkan dependensi berikut
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId> org.springframework.boot </groupid> <ArTifactId> Spring-boot-starter-Security </artifactid> </gandendency> </dependencies>
Untuk memastikan keamanan antarmuka pemantauan yang diekspos oleh aktuator, perlu untuk menambahkan dependensi kontrol keamanan pegas-boot-start-keamanan. Saat mengakses titik akhir pemantauan aplikasi, diperlukan informasi verifikasi. Ketergantungan keamanan, Anda dapat memilih untuk tidak menambah atau mengelola keamanan, tetapi tidak disarankan.
Antarmuka istirahat aktuator
Pemantauan aktuator dibagi menjadi dua kategori: titik akhir asli dan titik akhir yang ditentukan pengguna; Titik akhir khusus terutama merujuk pada skalabilitas. Pengguna dapat mendefinisikan beberapa indikator yang lebih peduli berdasarkan aplikasi mereka yang sebenarnya dan memantau mereka selama runtime.
Titik akhir asli menyediakan banyak antarmuka web dalam aplikasi untuk memahami keadaan internal runtime aplikasi. Titik akhir asli dapat dibagi menjadi tiga kategori:
Actuator menyediakan 13 antarmuka, seperti yang ditunjukkan pada tabel berikut.
| Metode HTTP | jalur | menggambarkan |
|---|---|---|
| MENDAPATKAN | /autoconfig | Laporan konfigurasi otomatis disediakan untuk merekam kondisi konfigurasi otomatis mana yang telah dilewati dan yang belum dilewati. |
| MENDAPATKAN | /configProps | Jelaskan cara menyuntikkan kacang dengan properti konfigurasi (termasuk nilai default) |
| MENDAPATKAN | /kacang | Jelaskan semua kacang dalam konteks aplikasi dan hubungannya |
| MENDAPATKAN | /membuang | Dapatkan snapshot aktivitas utas |
| MENDAPATKAN | /env | Dapatkan semua atribut lingkungan |
| MENDAPATKAN | /env/{name} | Dapatkan nilai atribut lingkungan tertentu berdasarkan nama |
| MENDAPATKAN | /kesehatan | Laporan Metrik Kesehatan Untuk Aplikasi, Nilai -Nilai -Nilai -Nilai -Nilai ini disediakan oleh kelas implementasi HealthIndicator |
| MENDAPATKAN | /info | Dapatkan informasi khusus untuk aplikasi, yang disediakan oleh atribut yang dipimpin oleh info |
| MENDAPATKAN | /pemetaan | Jelaskan semua jalur URI dan hubungan pemetaan mereka dengan pengontrol (termasuk titik akhir aktuator) |
| MENDAPATKAN | /metrik | Laporkan berbagai metrik aplikasi, seperti penggunaan memori dan jumlah permintaan HTTP |
| MENDAPATKAN | /metrik/{name} | Melaporkan nilai metrik aplikasi dari nama yang ditentukan |
| POS | /penutupan | Tutup aplikasi dan membutuhkan titik akhir.shutdown.Enabled untuk diatur ke True |
| MENDAPATKAN | /jejak | Berikan informasi pelacakan permintaan HTTP dasar (cap waktu, header http, dll.) |
Mulailah dengan cepat
Konfigurasi terkait
Ketergantungan proyek
<Dependencies> <dependency> <GroupId> org.springframework.boot </groupid> <t Artifactid> Spring-boot-starter-web </t Artifactid> </dependency> <sependency> <Roupid> org.springframework.boot </groupid> <ArtiFacTID> CONDENGENTORTORTORTORT.Actator </groupid> <ArtiFacTID> SPRING-BOTORTER.Actator </groupid> <ArtiFACTID> SPRING-BOTIONTORTOR.Actator.Actator </Groupid> <ArtiFACTID> SPRING-BOTICETORT.Actator.Actator </Groupid> <ArtiFACTID> SPRING-BOTORTER
File konfigurasi
Server: Port: 8080Management: Security: Diaktifkan: false #switch off keamanan otentikasi keamanan: 8088 #Admin port disesuaikan dengan 8088 konteks-path: /monitor #Actuator Access Path Endpoints: Shutdown: Diaktifkan: TrueInfo: APP: Nama: Spring-Boot-Actuator Versi: 1.0.0
Setelah konfigurasi selesai, proyek dapat dimulai dan Anda dapat terus memverifikasi berbagai fungsi pemantauan.
Penjelasan rinci tentang perintah tersebut
Autoconfig
Fungsi konfigurasi otomatis Spring Boot sangat nyaman, tetapi kadang -kadang juga berarti sulit untuk mengetahui penyebab spesifik ketika ada masalah. Gunakan AutoConfig untuk melihat kondisi di mana konfigurasi tertentu berlaku selama runtime aplikasi, atau mengapa konfigurasi otomatis tidak berlaku.
Mulai Proyek Sampel dan Kunjungi: http: // localhost: 8088/monitor/autoconfig. Bagian pengembalian dari informasi adalah sebagai berikut:
{"positiveMatches": {"devtoolsdataSourceautoconfiguration": {"notmatched": [{"condition": "devtoolsdataSourceauteAutoconfiguration," devtoolsource datasource "datsource" "" ]}, "RemotedevToolSAutoconfiguration": {"notmatched": [{"condition": "onpropertycondition", "message": "@conditionAlonProperty (spring.devtools.remote.secret) tidak menemukan properti '"}, "" "@ConditionAlclass menemukan kelas yang diperlukan 'javax.servlet.filter', 'org.springframework.http.server.serverHttpRequest'; @conditionAnonMissingClass tidak menemukan kelas yang tidak diinginkan"}]}}}ConfigProps
Lihat konten properti yang diatur dalam file konfigurasi, serta nilai default dari beberapa properti konfigurasi.
Mulai proyek sampel dan kunjungi: http: // localhost: 8088/monitor/configprops. Bagian pengembalian dari informasi adalah sebagai berikut:
{... "EnvironmEndPoint": {"prefix": "endpoints.env", "properties": {"id": "env", "sensitive": true, "diaktifkan": true}, "spring.http.multipart-org.springframework.boot.autoconfigure.multipart-org "Spring.http.multipart", "Properties": {"MaxRequestSize": "10MB", "FileizeThreshold": "0", "Lokasi": null, "MaxFileSize": "1MB", "diaktifkan": true, "resolvelilily": false}, "Infoend": "endoPPOOLS": "UNDOPIX": "FALSE}", "Infoend": "TRUE," UNDOPIX ": FALSE}," Infoend. " "Properties": {"id": "info", "Sensitive": false, "diaktifkan": true}} ...}kacang
Dari contohnya, kita dapat melihat bahwa alias kacang, jenis, apakah singleton, alamat kelas, ketergantungan dan informasi lainnya ditampilkan.
Mulai Proyek Sampel dan Kunjungi: http: // localhost: 8088/monitor/kacang. Bagian pengembalian dari informasi adalah sebagai berikut:
[{"Context": "Application: 8080: Management", "Parent": "Application: 8080", "Bean": [{"bean": "embeddedservletcontainererfactory", "aliases": [], "scope": "singleton", "type": " "org.springframework.boot.context.embedded.tomcat.tomcatembeddedServletContainerFactory", "Resource": "null", "Dependencies": []}, {"bean": "endpointwebmvcChildcildContextConfiguration" "": "" "" "" "" "" loePOPPOPSCCHILDCILDCONDEXTEXTEXTEXTEXTEXTEXTEXTEXTEXTEXTEXTEXTEXTEXTEXTEXTLEX "" "" " "org.springframework.boot.actuate.autoconfigure.endpointwebmvcchildContextConfiguration $$ EnhancerbySpringcglib $$ A4A10F9D"membuang
Antarmuka /dump akan menghasilkan snapshot dari aktivitas utas saat ini. Fungsi ini sangat bagus, yang membuatnya nyaman bagi kita untuk memeriksa situasi utas ketika kita menemukan masalah dalam kehidupan sehari -hari. Ini terutama menampilkan informasi seperti nama utas, ID utas, status utas, apakah akan menunggu sumber daya kunci.
Mulai Proyek Sampel dan Kunjungi: http: // localhost: 8088/monitor/dump. Bagian pengembalian dari informasi adalah sebagai berikut:
[{"ThreadName": "http-nio-8088-exec-6", "threadid": 49, "blockedtime": -1, "blockedcount": 0, "waitedtime": -1, "waitedcount": 2, "lockname": "java.util.concurrent.locks.abstractqueuedsynchronizer$conditionobject@1630a501", "lockownerid": -1, "lockownername": null, "innative": false, "ditangguhkan": false, "threadState": "tunggu", "stacktrace": " "Uncafe.java", "linenumber": -2, "className": "sun.misc.unsafe", "nativeMethod": true}, {"methodname": "park", "nama file": "locksupport.java", "linenumber": 175, "className": "java.java", "linenumber": 175, "className": "java. "nativeMethod": false}, {"methodName": "menunggu", "fileName": "abstractqueuedsynchronizer.java", "linenumber": 2039, "className": "java.util.concurrent.locks.abstractqueuedsynchronizer $ condition" emblect "{naturnam," "getTask", "nama file": "threadpoolexecutor.java", "linenumber": 1067, "classname": "java.util.concurrent.threadpoolexecutor", "nativeMethod": false}, {"methodname": "runworker", "" ":" "": "" "" liNiPOLEXORT "LiNOLEXEXECUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCED", "" ":" "": "" LiNENDAMER, "" "" "" "" liNOLEXEXEXUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCED "," "": "" "LiNOMOMOR," "" "" LiNOMOURSOR. "className": "java.util.concurrent.threadpoolexecutor", "nativeMethod": false}, {"methodname": "run", "filename": "threadpoolexecutor.java", "lineNumber": 617, "className": "java.utile.uteRure. "nativeMethod": false }, { "methodName": "run", "fileName": "TaskThread.java", "lineNumber": 61, "className": "org.apache.tomcat.util.threads.TaskThread$WrappingRunnable", "nativeMethod": false }, { "methodName": "run", "fileName": "Thread.java", "linenumber": 745, "className": "java.lang.thread", "nativeMethod": false}], "lockedmonitors": [], "lockedsynchronizers": [], "lockinfo": {"className":: "java.util.concurrent.locks.abstractqueuedsynchronizer $ conditionObject", "identityHashCode": 372286721}} ...]Env
Menampilkan informasi konfigurasi dari variabel lingkungan sistem, termasuk variabel lingkungan yang digunakan, properti JVM, parameter baris perintah, paket JAR yang digunakan oleh proyek, dll. Tidak seperti ConfigProps, ConfigProps berfokus pada informasi konfigurasi, sementara Env fokus pada informasi lingkungan operasi.
Mulai Proyek Sampel dan Kunjungi: http: // localhost: 8088/monitor/env. Bagian pengembalian dari informasi adalah sebagai berikut:
{"Profil": [], "server.ports": {"local.management.port": 8088, "local.server.port": 8080}, "servletcontextInitparams": {}, "SystemProperties": "com.sun.management.jmxremote.authentate": "com.sun.management.jmxremote.authentate" "Java (TM) SE Runtime Environment", "spring.output.ansi.enabled": "selalu", "sun.boot.library.path": "c: // file program // java // jdk1.8.0_101 // jre // bin", "java. Korporasi "," java.vendor.url ":" http://java.oracle.com/ "," java.rmi.server.randomids ":" true "," path.separator ":"; "," java.vm.name ":" java hotspot (tm) 64, "java.vm.name": "java hotspot (tm) 64" "" "", "java hotspot (tm) 64," "" "" "" "" "" "tm (tm) 64," java.vm. "sun.io", "user.country": "cn", "user.script": "", "sun.java.launcher": "sun_standard", "sun.os.patch.level": "", "pid": "5268", "com.sun.management.jmxremote.port": "6009," com.sun.management.jmxremote.port. "Java Virtual Machine SPEUntuk menghindari informasi sensitif yang terpapar /env, semua atribut bernama kata sandi, rahasia, kunci (atau paragraf terakhir dari nama ini adalah ini) akan ditambahkan ke /env dengan "*". Misalnya, jika ada database nama properti.password, maka efek tampilannya di /env adalah seperti ini:
"database.password": "******"
Penggunaan /env /{name}
Artinya, ekstensi Env dapat memperoleh informasi konfigurasi yang ditentukan, seperti: http: // localhost: 8088/monitor/env/java.vm.version, return: {"java.vm.version": "25.101-b13"}
kesehatan
Anda dapat melihat bahwa HealthendPoint memberi kami hasil pemantauan default, termasuk deteksi disk dan deteksi database
Mulailah Proyek Sampel dan Kunjungi: http: // localhost: 8088/monitor/kesehatan mengembalikan bagian dari informasi, respons JSON berikut terdiri dari status, ruang disk, dan DB. Menjelaskan status kesehatan keseluruhan aplikasi, UP menunjukkan bahwa aplikasi tersebut sehat. Ruang disk menggambarkan ruang disk total, ruang disk yang tersisa dan ambang batas minimum. Ambang batas application.properties dapat dikonfigurasi
{"Status": "Up", "Diskspace": {"Status": "Up", "Total": 209715195904, "Free": 183253909504, "Threshold": 10485760} "DB": {"" Status ":" Up "," My DataBase: "My DataBase:" My Database ":" My ":" My ":" My ":" My ":" My ":" My ":" My ":" My ":" My "Bahkan, melihat kode sumber boot-aktuator Spring, Anda akan menemukan bahwa informasi yang diberikan oleh HealthendPoint tidak terbatas pada ini. Di bawah paket org.springframework.boot.actuate.health, Anda akan menemukan ElasticsearchHealthindicator, Redishealthindicator, Rabbithealthindicator, dll.
info
Info adalah informasi konfigurasi yang kami konfigurasi dalam file konfigurasi dimulai dengan info. Misalnya, konfigurasi kami dalam proyek contoh adalah:
Info: Aplikasi: Nama: Spring-boot-aktuator Versi: 1.0.0
Mulailah Proyek Sampel dan Kunjungi: http: // localhost: 8088/monitor/info Bagian pengembalian informasi adalah sebagai berikut:
{"app": {"name": "spring-boot-aktuator", "versi": "1.0.0"}}pemetaan
Jelaskan semua jalur URI dan hubungan pemetaan mereka dengan controller
Mulai Proyek Sampel dan Kunjungi: http: // localhost: 8088/monitor/pemetaan. Bagian pengembalian dari informasi adalah sebagai berikut:
{"/**/favicon.ico": {"bean": "faviconhandlermapping"}, "{[/hello]}": {"bean": "requestMappingHandlermapping", "Method": "public java.lang.string com.neo.controller.hellocontroller public. "Bean": "RequestMappingHandlermapping", "Method": "Public org.springframework.http.responseentity <java.util.map <java.lang.string, java.lang.object >> org.springframework.boot.autoconfigure.web.basicerrorController.error (javax.servlet.http.httpservletrequest) "}}metrik
Salah satu konten pemantauan terpenting terutama memantau penggunaan konten JVM, situasi GC, informasi pemuatan kelas, dll.
Mulai Proyek Sampel dan Kunjungi: http: // localhost: 8088/monitor/metrik. Bagian pengembalian dari informasi adalah sebagai berikut:
{"mem": 337132, "mem.free": 183380, "prosesor": 4, "instance.uptime": 254552, "uptime": 259702, "SystemLoad.AVerage": -1.0, "heap. 1827840, "nonheap.committed": 45248, "nonheap.init": 2496, "nonheap. digunakan": 44269, "nonheap": 0, "threads.peak": 63, "threads.daemon": 43, "Threads.totalstarted": 83, "83," "," 63, "63," 63, "43," 63, " 6357, "class.unloaded": 0, "gc.ps_scavenge.count": 8, "gc.ps_scavenge.time": 99, "gc.ps_marksweep.count": 1, "gc.ps_marksweep.time": 43, "httpsions.max.Informasi yang disediakan oleh antarmuka /metrik hanya diklasifikasikan sebagai berikut:
| Klasifikasi | Awalan | Laporkan konten |
|---|---|---|
| Pengumpul sampah | gc.* | Jumlah koleksi sampah yang telah terjadi dan waktu yang dihabiskan untuk pengumpulan sampah cocok untuk pengumpul sampah yang membersihkan tanda dan pengumpul sampah paralel (data berasal dari java.lang.management. Garbagecollectormxbean) |
| Ingatan | mem.* | Jumlah memori yang dialokasikan untuk aplikasi dan jumlah memori bebas (data berasal dari java.lang. Runtime) |
| tumpukan | tumpukan.* | Penggunaan memori saat ini (data berasal dari java.lang.management.MemoryUsage) |
| Kelas Loader | kelas.* | Jumlah kelas yang dimuat dan diturunkan oleh loader kelas JVM (data berasal dari java.lang. Management.classloadingMxBean) |
| sistem | prosesor, instance.uptime, uptime, SystemLoad.Aungkan | Informasi sistem, seperti jumlah prosesor (data berasal dari java.lang.runtime), runtime (data berasal dari java.lang.management.runtimemxbean), rata -rata beban (data berasal dari java.lang.management.operatingsystemmxbean)) |
| Kumpulan benang | benang.* | Jumlah utas, utas daemon, dan jumlah puncak utas setelah startup JVM (data berasal dari java.lang.management.threadmxbean) |
| Sumber data | DataSource.* | Jumlah koneksi sumber data (metadata dari sumber data, hanya jika kacang data ada dalam konteks aplikasi pegas) |
| Sesi Tomcat | httpsessions.* | Nomor sesi aktif Tomcat dan nomor sesi maksimum (data berasal dari kacang tomcat tertanam, yang hanya tersedia saat menjalankan aplikasi menggunakan server tomcat tertanam) |
| Http | counter.status., gauge.response. | Langkah -langkah dan penghitung untuk permintaan HTTP untuk berbagai layanan aplikasi |
Penjelasan:
penutupan
Nyalakan antarmuka dan tutup aplikasi boot Spring secara elegan. Untuk menggunakan fungsi ini, Anda harus terlebih dahulu mengaktifkannya di file konfigurasi:
titik akhir: shutdown: diaktifkan: true
Setelah konfigurasi selesai, mulailah proyek sampel dan kunjungi: http: // localhost: 8088/monitor/shutdown pengembalian bagian dari informasi adalah sebagai berikut:
{"pesan": "mati, bye ..."}Pada titik ini Anda akan menemukan bahwa aplikasi telah ditutup.
jejak
Antarmuka /Trace dapat melaporkan informasi terperinci dari semua permintaan web, termasuk metode permintaan, jalur, cap waktu, dan informasi header permintaan dan respons, dan mencatat informasi terperinci dari setiap permintaan.
Mulailah proyek sampel, kunjungi dulu: http: // localhost: 8080/halo, dan kemudian jalankan di browser: http: // localhost: 8088/monitor/jejak lihat informasi pengembalian:
[{"timestamp": 1516780334777, "info": {"metode": "get", "path": "/hello", "header": {"request": {"host": "localhost: 8080", "connection": "Keep-Alive", "Cache-Control": "Max-N (" Max-Aerpor = ":" Cache-Cache-Cache ":" Max-AREAGE = "" 10.0; "Teks/html, aplikasi/xhtml+xml, aplikasi/xml; q = 0.9, gambar/webp, gambar/apng,*/*; q = 0.8", "encoding penerimaan": "gzip, kempa, br", "Accept-language": "Zh-cn, zh; q = 0.9," cooke "," cooke "," cooke "," cooke "," cooke "," cooke "," cooke "," cooke "," cooke, "zh-cn; "UM_DISTINCTID = 16053BA344F1CD-0DC220C44CC94-B7A103E-13C680-16053BA3450751; HM_LVT_0FB30C642C5F6453F17D881F529A1141 = 1513076406.1514961720.1515649377; HM_LVT_6D8E8BB59814010152D98507A18AD229 = 1515247964,1515296008,1515672972,1516086283 "}," respons ": {" X-APPLOCANDS "Teks/html; charset = UTF-8", "Panjang Konten": "11", "Tanggal": "Rabu, 24 Jan 2018 07:52:14 GMT", "Status": "200"}}, "TimeTaken": "4"}}]]Informasi di atas menunjukkan detail permintaan /halo.
Konfigurasi lainnya
Pembatasan akses ke informasi sensitif
Menurut tabel di atas, jika otentikasi salah, itu berarti tidak sensitif dan dapat diakses sesuka hati. Kalau tidak, itu akan dilindungi dan tidak dapat diakses sesuka hati.
endpoints.mappings.sensitive = false
Ini membutuhkan pengaturan masing -masing, yang lebih merepotkan. Metode sensitif mengharuskan pengguna untuk memiliki peran aktuator secara default, sehingga Anda juga dapat menetapkan batasan keamanan di luar:
manajemen.security.enabled = false
Atau bekerja sama dengan keamanan musim semi untuk kontrol berbutir halus.
Aktifkan dan Nonaktifkan Antarmuka
Meskipun antarmuka Actuator bermanfaat, Anda tidak perlu semuanya. Secara default, semua antarmuka (kecuali /shutdown) diaktifkan. Misalnya, untuk menonaktifkan antarmuka /metrik, Anda dapat mengaturnya sebagai berikut:
endpoints.metrics.enabled = false
Jika Anda hanya ingin membuka satu atau dua antarmuka, maka nonaktifkan semua antarmuka terlebih dahulu, dan kemudian aktifkan beberapa yang Anda inginkan, yang lebih nyaman.
endpoints.enabled = faleEndpoints.metrics.enabled = true
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.