Untuk memantau aplikasi yang dibangun menggunakan Spring Boot, Anda dapat menghubungkannya ke Alibaba Cloud Managed Service for Prometheus. Topik ini menjelaskan langkah-langkah untuk menghubungkan aplikasi Spring Boot ke Managed Service for Prometheus.
Informasi latar belakang
Pembuatan aplikasi dengan kerangka kerja Spring, Spring Web MVC, dan MyBatis sering kali memerlukan banyak konfigurasi manual, yang rentan terhadap kesalahan. Spring Boot dirancang untuk mengatasi masalah ini melalui konfigurasi otomatis. Spring Boot secara otomatis mengonfigurasi aplikasi menggunakan file JAR, sementara tetap memberikan fleksibilitas untuk menyesuaikan kelas yang dikonfigurasi secara otomatis sesuai kebutuhan bisnis Anda.
Setelah membangun dan merilis aplikasi Spring Boot, Anda dapat mulai memantaunya. Sistem pemantauan all-in-one yang mudah digunakan menyediakan fitur-fitur utama berikut:
Pengumpulan Data Pemantauan
Metode pengumpulan data pemantauan umumnya dibagi menjadi dua jenis: push dan pull. Contoh sistem pemantauan yang menggunakan metode pull adalah Managed Service for Prometheus, yang dibangun berdasarkan Prometheus yang semakin populer. Data pemantauan dari aplikasi dan infrastruktur diekspos ke Managed Service for Prometheus menggunakan standar OpenMetrics. Managed Service for Prometheus kemudian mengumpulkan data tersebut secara berkala dan menyimpannya untuk jangka waktu panjang.
OpenMetrics adalah protokol metrik cloud-native yang sangat skalabel. Protokol ini mendefinisikan standar untuk mentransmisikan metrik dalam skala besar, mendukung representasi teks serta Protocol Buffers. Secara default, Managed Service for Prometheus menggunakan representasi teks saat menangkap data. Gambar berikut menunjukkan contoh metrik dalam format OpenMetrics.

Model data metrik diidentifikasi oleh nama metrik dan satu set pasangan kunci-nilai yang disebut label. Sampel data dengan nama metrik dan label yang sama termasuk dalam deret waktu yang sama. Sebagai contoh, acme_http_router_request_seconds_sum{path="/api/v1",method="GET"} merepresentasikan sampel data dengan nama metrik acme_http_router_request_seconds_sum. Sampel ini memiliki label dengan kunci method dan nilai GET. Sampel tersebut mencakup nilai float64 dan timestamp UNIX dengan presisi milidetik. Data yang dikumpulkan dari waktu ke waktu dapat ditampilkan dalam grafik garis.
Sebagian besar komponen dasar dalam sistem cloud-native dapat mengekspos metrik dalam format OpenMetrics. Untuk komponen yang tidak mendukung eksposur metrik, open source Prometheus menyediakan berbagai Prometheus exporters bagi pengembang dan insinyur O&M. Komponen atau exporter ini menerima permintaan dari Managed Service for Prometheus dan mengekspor data pemantauan ke Managed Service for Prometheus untuk diproses dan dianalisis. Pengembang aplikasi juga dapat menggunakan SDK multi-bahasa dari Managed Service for Prometheus untuk menginstrumentasi aplikasi mereka dan mengintegrasikan metrik bisnis dengan layanan ini.
Visualisasi Data dan Analitik
Setelah mendapatkan informasi tentang status aplikasi atau infrastruktur, seperti penggunaan sumber daya dan status layanan, Anda dapat melacak dan membandingkan node dengan menganalisis informasi multidimensi dari berbagai jenis. Anda juga dapat menggunakan dasbor standar dan intuitif untuk mempelajari status sistem Anda. Grafana adalah solusi visualisasi data populer di komunitas open source, yang menyediakan berbagai macam grafik dan template. Managed Service for Prometheus juga menyediakan fitur query data, analitik, dan visualisasi berbasis managed Grafana.
Peringatan dan Tanggap Darurat
Sistem pemantauan harus mendeteksi risiko potensial yang dapat menyebabkan masalah dan segera memberi tahu administrator. Dengan cara ini, dampak pada bisnis dapat diminimalkan. Setelah masalah terjadi, administrator dapat mengidentifikasi penyebab utama berdasarkan metrik pemantauan dan data historis.
Prosedur
Untuk aplikasi Spring Boot, komunitas Spring menyediakan Spring Boot Actuator siap pakai. Spring Boot Actuator memungkinkan pengembang untuk menginstrumentasi aplikasi secara efisien dan memfasilitasi pengumpulan serta ekspor data pemantauan. Mulai dari Spring Boot 2.0, Spring Boot Actuator menggunakan Micrometer, yang menyediakan kemampuan pemantauan yang lebih kuat dan fleksibel. Micrometer bertindak sebagai facade pemantauan, mirip dengan SLF4J untuk logging. Anda dapat menggunakan Micrometer untuk menghubungkan aplikasi Anda ke berbagai sistem pemantauan, seperti AppOptics, Datadog, Elastic, InfluxDB, dan Managed Service for Prometheus.
Micrometer memungkinkan Anda memetakan metrik aplikasi Java ke Managed Service for Prometheus. Tabel berikut menjelaskan pemetaan tersebut.
Tipe metrik Micrometer | Managed Service for Prometheus tipe metrik | Skenario |
Counter | Counter | Digunakan untuk memantau variabel yang nilainya meningkat secara monotonik. Contoh: page view (PV), unique visitor (UV), dan jumlah panggilan API. |
Gauge | Gauge | Digunakan untuk memantau variabel yang nilainya berfluktuasi. Contoh: penggunaan sumber daya, beban sistem, dan panjang antrian permintaan. |
Timer | Histogram | Digunakan untuk memberikan statistik distribusi data. Sebagai contoh, tipe metrik ini dapat digunakan untuk memberikan persentil ke-50, ke-90, dan ke-99 latensi panggilan API. |
DistributionSummary | Summary | Digunakan untuk memberikan statistik distribusi data dengan cara yang mirip dengan tipe metrik Histogram. |
Tipe metrik Counter di Micrometer memetakan ke tipe metrik Counter di Managed Service for Prometheus. Tipe metrik ini digunakan untuk memantau variabel yang nilainya meningkat secara monotonik, seperti jumlah kunjungan API, jumlah cache hits, atau total jumlah kunjungan. Metrik Timer juga menyediakan informasi yang diberikan oleh metrik Counter, sehingga Anda tidak perlu mengonfigurasi kedua jenis metrik untuk sebuah API.
Tipe metrik Gauge di Micrometer memetakan ke tipe metrik Gauge di Managed Service for Prometheus. Tipe metrik ini digunakan untuk memantau variabel yang nilainya terus berfluktuasi dalam rentang tertentu, seperti utilisasi CPU atau jumlah antrian tugas dalam thread pool.
Tipe metrik Timer di Micrometer memetakan ke tipe metrik Histogram di Managed Service for Prometheus. Tipe metrik ini digunakan untuk memberikan statistik distribusi data terkait waktu, seperti distribusi waktu respons API.
Tipe metrik DistributionSummary di Micrometer sesuai dengan tipe metrik Summary di Managed Service for Prometheus. Sama seperti tipe metrik Histogram, tipe metrik Summary digunakan untuk menyediakan statistik distribusi data. Namun, perhitungan statistik distribusi data dilakukan oleh klien sebelum disimpan di Managed Service for Prometheus. Akibatnya, hasil dari beberapa mesin tidak dapat diagregasi dan gambaran distribusi data keseluruhan tidak dapat diberikan.
Prosedur
Untuk menghubungkan aplikasi Spring Boot ke Managed Service for Prometheus, Anda dapat menginstrumentasi aplikasi tersebut, menerapkannya di kluster Kubernetes, dan mengonfigurasi penemuan layanan.
Pertama, tambahkan dependensi Maven dari Spring Boot Actuator ke kode Anda, dan daftarkan data yang ingin Anda pantau atau anotasi metode dalam Controller.
Selanjutnya, terapkan aplikasi yang telah diinstrumentasi di kluster Kubernetes, dan ekspos endpoint ke Managed Service for Prometheus. Fitur penemuan layanan dari Managed Service for Prometheus akan menarik data pemantauan dari endpoint tersebut. Anda dapat mengonfigurasi penemuan layanan dengan membuat ServiceMonitors berdasarkan definisi sumber daya kustom (CRD).
Setelah endpoint aplikasi ditemukan oleh Managed Service for Prometheus, Anda dapat mengonfigurasi sumber data dan dasbor di Grafana, serta mengatur aturan peringatan untuk metrik utama.
Tujuan
Anda dapat menghubungkan aplikasi Spring Boot di kluster Kubernetes ke Managed Service for Prometheus untuk mencapai tujuan-tujuan berikut:
Memantau frontend sistem: Aplikasi yang dibangun menggunakan Spring Web MVC menyediakan layanan frontend, dan metrik rate, errors, dan duration (RED) dari aplikasi dipantau. Rate mengacu pada laju penanganan permintaan, Errors mengacu pada jumlah permintaan yang gagal, dan Duration mengacu pada waktu yang diperlukan untuk setiap permintaan.
Memantau objek di jalur kritis layanan backend, seperti jumlah antrian dalam thread pool atau rasio hit cache Guava Cache.
Memantau metrik kustom yang penting bagi bisnis Anda, seperti UV dari API.
Memantau tugas pengumpulan sampah Java virtual machine dan penggunaan memori.
Menggabungkan dan menampilkan metrik-metrik di atas, serta mengonfigurasi aturan peringatan untuk metrik utama.
Langkah 1: Menambahkan dependensi Spring Boot Actuator dan melakukan konfigurasi awal
Dalam contoh ini, sebuah aplikasi mikro-layanan cloud-native yang dibangun menggunakan Spring Boot dan Spring Cloud Alibaba digunakan untuk menjelaskan cara menghubungkan aplikasi Spring Boot di kluster Kubernetes ke Managed Service for Prometheus.
Jalankan kode berikut untuk menambahkan dependensi Spring Boot Actuator.
<!-- Spring Boot Actuator dependencies --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- Managed Service for Prometheus dependencies --> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency>Tambahkan konfigurasi berikut ke file application.properties untuk mengekspos port yang ingin Anda gunakan untuk mengekspor data pemantauan. Sebagai contoh, atur port ke 8091.
# Tambahkan konfigurasi berikut ke file application.properties untuk mengekspos metrik. spring.application.name=frontend management.server.port=8091 management.endpoints.web.exposure.include=* management.metrics.tags.application=${spring.application.name}Setelah konfigurasi selesai, Managed Service for Prometheus dapat mengakses port 8091 aplikasi dan memperoleh data pemantauan dalam format OpenMetrics dari path /actuator/prometheus.
Langkah 2: Menginstrumentasi dan memodifikasi aplikasi
Untuk mendapatkan metrik RED dari API, Anda dapat menambahkan anotasi @Timed ke metode API. Kode berikut menunjukkan cara menambahkan anotasi @Timed ke API halaman indeks:
@Timed(value = "main_page_request_duration", description = "Waktu yang diperlukan untuk mengembalikan halaman utama", histogram = true)
@ApiOperation(value = "Halaman utama", tags = {"Halaman utama"})
@GetMapping("/")
public String index(Model model) {
model.addAttribute("products", productDAO.getProductList());
model.addAttribute("FRONTEND_APP_NAME", Application.APP_NAME);
model.addAttribute("FRONTEND_SERVICE_TAG", Application.SERVICE_TAG);
model.addAttribute("FRONTEND_IP", registration.getHost());
model.addAttribute("PRODUCT_APP_NAME", PRODUCT_APP_NAME);
model.addAttribute("PRODUCT_SERVICE_TAG", PRODUCT_SERVICE_TAG);
model.addAttribute("PRODUCT_IP", PRODUCT_IP);
model.addAttribute("new_version", StringUtils.isBlank(env));
return "index.html";
}Dalam kode sebelumnya, value menunjukkan nama metrik yang diekspos ke /actuator/prometheus. histogram=true menunjukkan bahwa metrik tersebut adalah tipe Histogram dan digunakan untuk memantau waktu yang diperlukan untuk setiap permintaan. Metrik ini memungkinkan Anda menghitung persentil ke-90 dan ke-99 dari waktu yang diperlukan untuk permintaan.
Jika aplikasi Anda menggunakan pustaka cache in-process, seperti Guava Cache, dan Anda ingin memantau kesehatan cache in-process, Anda dapat mengenkapsulasi objek kunci yang akan dipantau menggunakan metode modifikasi yang disediakan oleh Micrometer.
Modifikasi Guava Cache
Injeksikan MeterRegistry. Dalam contoh ini, PrometheusMeterRegistry diinjeksikan secara otomatis oleh Spring Boot.
Gunakan API kelas utilitas untuk mengenkapsulasi cache lokal. Dalam contoh ini, GuavaCacheMetrics.monitor digunakan.
Aktifkan pencatatan data rekaman dengan menggunakan metode .recordStats().
Tentukan nama untuk cache. Nama tersebut digunakan dalam metrik yang dihasilkan.

Modifikasi Thread Pool
Injeksikan MeterRegistry. Dalam contoh ini, PrometheusMeterRegistry diinjeksikan secara otomatis oleh Spring Boot.
Gunakan API kelas utilitas untuk mengenkapsulasi thread pool.
Tentukan nama untuk thread pool. Nama tersebut digunakan dalam metrik yang dihasilkan.

Banyak metrik kustom yang penting bagi bisnis Anda memerlukan pemantauan selama proses pengembangan. Untuk memantau metrik ini, Anda dapat menginjeksikan MeterRegistry ke bean, dan mengonfigurasi metrik tipe Counter, Gauge, atau Timer berdasarkan kebutuhan bisnis dan skenario. Kemudian, Anda dapat mendaftarkan metrik ini ke MeterRegistry untuk mengekspos metrik tersebut. Kode berikut memberikan contoh:
@Service
public class DemoService {
Counter visitCounter;
public DemoService(MeterRegistry registry) {
visitCounter = Counter.builder("visit_counter")
.description("Jumlah kunjungan ke situs")
.register(registry);
}
public String visit() {
visitCounter.increment();
return "Hello World!";
}
}Setelah Anda menyelesaikan langkah-langkah di atas, kode aplikasi dimodifikasi. Selanjutnya, Anda harus membangun ulang dan menerapkan gambar aplikasi di kluster Kubernetes tempat Managed Service for Prometheus diaktifkan, dan mengonfigurasi ServiceMonitor di konsol Managed Service for Prometheus untuk menemukan Layanan yang sesuai dengan aplikasi. Untuk informasi lebih lanjut, lihat Pemantauan kluster ACK dan Manajemen instans.
Setelah ServiceMonitor dikonfigurasi, Anda dapat melihat Layanan yang baru didaftarkan di tab Targets halaman Penemuan Layanan.

Langkah 3: Mengonfigurasi dasbor
Setelah data pemantauan aplikasi dikumpulkan dan disimpan di Managed Service for Prometheus, Anda dapat mengonfigurasi dasbor dan aturan peringatan untuk data tersebut. Dua template dasbor open-source berikut disediakan oleh komunitas Grafana. Anda dapat menggunakan template ini untuk membuat dasbor kustom untuk bisnis Anda.
Anda dapat menggunakan template di atas dan layanan Grafana yang disediakan oleh Managed Service for Prometheus untuk menampilkan metrik utama pada dasbor Grafana. Ini membantu Anda memfasilitasi pengembangan dan operasi. Anda juga dapat membuat dasbor kustom untuk pemantauan harian. Gambar berikut menunjukkan dasbor yang dibangun berdasarkan template di atas dan kebutuhan bisnis. Dasbor tersebut memberikan gambaran dan metrik seperti durasi runtime komponen, penggunaan memori, penggunaan memori heap dan non-heap, serta data pengumpulan sampah tentang generasi yang berbeda.
