All Products
Search
Document Center

Managed Service for Prometheus:Menghubungkan aplikasi Spring Boot ke Managed Service for Prometheus

Last Updated:Jun 22, 2026

Anda dapat menghubungkan aplikasi Spring Boot ke Managed Service for Prometheus untuk memantau kesehatan dan kinerjanya secara berkelanjutan. Topik ini menjelaskan cara menyiapkan integrasi tersebut dengan cepat.

Informasi latar belakang

Aplikasi MVC berbasis SSM tradisional memerlukan konfigurasi yang rumit, di mana kesalahan kecil saja dapat menyebabkan kegagalan. Spring Boot mengatasi hal ini melalui auto-configuration: jika paket JAR yang diperlukan tersedia, Spring Boot akan secara otomatis mengonfigurasi aplikasi. Anda juga dapat mengganti kelas auto-configuration dengan konfigurasi kustom untuk membangun aplikasi tingkat enterprise secara cepat.

Sistem pemantauan komprehensif untuk aplikasi Spring Boot umumnya terdiri atas komponen-komponen utama berikut.

Kumpulkan data pemantauan

Metode paling umum untuk mengumpulkan data pemantauan adalah model push dan pull. Ekosistem pemantauan Prometheus merupakan contoh utama sistem berbasis pull. Managed Service for Prometheus adalah sistem berbasis pull yang khas. Aplikasi dan infrastruktur mengekspos data pemantauan melalui antarmuka yang sesuai dengan OpenMetrics, dan Managed Service for Prometheus secara berkala mengambil (scrape) data ini untuk penyimpanan jangka panjang.

OpenMetrics adalah protokol metrik cloud-native yang sangat scalable dan mendefinisikan standar pelaporan metrik cloud-native dalam skala besar. Protokol ini mendukung representasi teks dan Protocol Buffers. Format berbasis teks lebih umum digunakan dan merupakan protokol default yang digunakan oleh Managed Service for Prometheus untuk scraping data. Contoh berikut menunjukkan format representasi metrik berdasarkan OpenMetrics.

# TYPE acme_http_router_request_seconds summary
# UNIT acme_http_router_request_seconds seconds
# HELP acme_http_router_request_seconds Latency though all of ACME's HTTP request router.
acme_http_router_request_seconds_sum{path="/api/v1",method="GET"} 9036.32
acme_http_router_request_seconds_count{path="/api/v1",method="GET"} 807283.0
acme_http_router_request_seconds_created{path="/api/v1",method="GET"} 1605281325.0
acme_http_router_request_seconds_sum{path="/api/v2",method="POST"} 479.3
acme_http_router_request_seconds_count{path="/api/v2",method="POST"} 34.0
acme_http_router_request_seconds_created{path="/api/v2",method="POST"} 1605281325.0
# TYPE go_goroutines gauge
# HELP go_goroutines Number of goroutines that currently exist.
go_goroutines 69
# TYPE process_cpu_seconds counter
# UNIT process_cpu_seconds seconds
# HELP process_cpu_seconds Total user and system CPU time spent in seconds.
process_cpu_seconds_total 4.20072246e+06
# EOF
Catatan

Model data untuk suatu metrik didefinisikan oleh nama metrik dan serangkaian pasangan kunci-nilai yang disebut label. Titik 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 untuk metrik bernama acme_http_router_request_seconds_sum, dengan label method yang nilainya GET. Setiap sampel berisi nilai Float64 dan stempel waktu UNIX dengan presisi milidetik. Seiring waktu, sampel-sampel yang dikumpulkan ini membentuk garis dinamis pada grafik.

Sebagian besar komponen infrastruktur dalam ekosistem cloud-native dapat mengekspos metrik dalam format teks OpenMetrics. Untuk komponen yang tidak mendukungnya secara native, komunitas Prometheus menyediakan kumpulan kaya berupa Prometheus Exporter. Komponen-komponen ini (atau Exporter) merespons permintaan scraping berkala dari Managed Service for Prometheus untuk mencatat status operasionalnya di Managed Service for Prometheus guna analisis selanjutnya. Anda juga dapat menggunakan SDK multi-bahasa dari Managed Service for Prometheus untuk menginstrumentasi kode Anda, sehingga mengintegrasikan metrik bisnis Anda sendiri ke dalam ekosistem Prometheus.

Visualisasi dan analisis data

Setelah mengumpulkan metrik aplikasi dan infrastruktur, Anda dapat melakukan kueri, menganalisis, dan membandingkan data multidimensi untuk memahami kondisi sistem. Grafana, tool open-source terkemuka untuk visualisasi data, menawarkan berbagai jenis grafik dan templat. Managed Service for Prometheus menyediakan layanan Grafana yang sepenuhnya dikelola untuk melakukan kueri, analisis, dan visualisasi data pemantauan Anda.

Peringatan tepat waktu dan manajemen insiden

Ketika suatu layanan berisiko mengalami kegagalan, sistem pemantauan harus segera memberi tahu administrator agar mereka dapat menyelesaikan masalah atau mencegahnya secara proaktif, sehingga dampak terhadap bisnis diminimalkan. Dengan menganalisis berbagai metrik dan data historis, administrator dapat mengidentifikasi serta menyelesaikan akar permasalahan.

Ikhtisar proses integrasi

Untuk aplikasi Spring Boot, komunitas menyediakan framework Spring Boot Actuator, yang menyederhanakan instrumentasi kode, pengumpulan metrik, dan output bagi developer Java. Mulai Spring Boot 2.0, Actuator dibangun ulang di atas Micrometer, sehingga menyediakan kemampuan pemantauan yang lebih kuat dan fleksibel. Micrometer adalah facade metrik, analog dengan SLF4J untuk logging. Dengan menggunakan Micrometer, aplikasi dapat terhubung ke berbagai sistem pemantauan, seperti AppOptics, Datadog, Elastic, InfluxDB, dan Managed Service for Prometheus.

Saat memetakan metrik dari aplikasi Java, Micrometer menggunakan semantik berikut untuk memetakan jenis metriknya ke jenis yang digunakan oleh Managed Service for Prometheus:

Jenis metrik Micrometer

Jenis metrik Managed Service for Prometheus

Kasus penggunaan khas

Counter

Counter

Nilai yang meningkat secara monoton. Misalnya, menghitung jumlah tayangan halaman (PV), pengunjung unik (UV), atau panggilan API.

Gauge

Gauge

Variabel yang berfluktuasi seiring waktu. Misalnya, pemanfaatan resource, beban sistem, atau panjang antrian permintaan.

Timer

Histogram

Distribusi statistik data, biasanya untuk latensi. Misalnya, menghitung latensi P50, P90, dan P99 untuk panggilan API.

DistributionSummary

Summary

Distribusi statistik data, dengan tujuan serupa Histogram.

  • Jenis metrik Counter dari Micrometer dipetakan ke tipe Counter di Managed Service for Prometheus dan digunakan untuk menggambarkan variabel yang meningkat secara monoton, seperti jumlah panggilan API, hit cache, atau total kunjungan. Timer secara logis mencakup Counter. Jika Anda menggunakan Timer untuk mengumpulkan waktu respons suatu API, jumlah panggilannya juga akan dikumpulkan. Oleh karena itu, Anda tidak perlu menentukan Timer dan Counter secara terpisah untuk API yang sama.

  • Jenis metrik Gauge dari Micrometer dipetakan ke tipe Gauge di Managed Service for Prometheus dan digunakan untuk menggambarkan variabel yang terus berfluktuasi dalam suatu rentang, seperti pemanfaatan CPU atau jumlah tugas dalam antrian kolam thread.

  • Jenis metrik Timer dari Micrometer dipetakan ke tipe Histogram di Managed Service for Prometheus dan digunakan untuk menggambarkan data terkait waktu, seperti distribusi waktu respons (RT) suatu API.

  • Jenis metrik DistributionSummary dari Micrometer dipetakan ke tipe Summary di Managed Service for Prometheus. Mirip dengan Histogram, Summary digunakan untuk distribusi statistik. Namun, karena distribusi dihitung di sisi klien sebelum dikirim ke Managed Service for Prometheus untuk disimpan, hasil Summary tidak dapat diagregasi lintas beberapa mesin. Hal ini membatasi penggunaannya karena tidak dapat memberikan gambaran global distribusi data.

Alur kerja integrasi

Saat Anda perlu menghubungkan aplikasi Spring Boot yang diterapkan di kluster Kubernetes ke Managed Service for Prometheus, Anda harus mengikuti proses instrumentasi kode > penerapan aplikasi > penemuan layanan.

Pertama, tambahkan dependensi Maven Spring Boot Actuator yang diperlukan ke kode Anda dan daftarkan metrik yang ingin Anda pantau atau tambahkan anotasi ke metode di controller Anda.

Selanjutnya, terapkan aplikasi yang telah diinstrumentasi di Kubernetes dan daftarkan titik akhir pengumpulan metrik ke Managed Service for Prometheus. Proses ini dikenal sebagai service discovery. Managed Service for Prometheus menyediakan service discovery dengan menggunakan Definisi Sumber Daya Kustom (CRD) ServiceMonitor.

Akhirnya, setelah Managed Service for Prometheus berhasil menemukan titik akhir metrik aplikasi target, Anda dapat mengonfigurasi sumber data dan membuat dasbor di Grafana. Anda juga dapat mengonfigurasi peringatan berdasarkan metrik kunci.

Tujuan pemantauan

Dengan menghubungkan aplikasi Spring Boot di kluster Kubernetes ke Managed Service for Prometheus, Anda dapat mencapai hal-hal berikut:

  • Memantau titik masuk sistem: Lacak metrik RED utama (Rate, Errors, Duration) untuk API yang menghadap eksternal pada layanan antarmuka depan yang menangani trafik pelanggan.

  • Memantau jalur sistem kritis: Amati objek-objek kunci pada jalur kritis layanan backend, seperti status antrian kolam thread atau tingkat hit cache Guava in-process.

  • Memantau metrik kustom yang relevan dengan bisnis: Terapkan pemantauan untuk metrik spesifik bisnis Anda, seperti jumlah pengunjung unik untuk API tertentu.

  • Memantau kinerja JVM: Lacak Pengumpulan sampah (GC) dan Penggunaan memori JVM.

  • Pemantauan terpusat: Agregasi dan tampilkan semua metrik di atas pada satu dasbor terpadu serta konfigurasikan peringatan untuk indikator kunci.

Langkah 1: Konfigurasi Spring Boot Actuator

Topik ini menggunakan aplikasi layanan mikro cloud-native yang dibangun dengan Spring Boot dan Spring Cloud Alibaba untuk menunjukkan cara menghubungkan aplikasi layanan mikro Spring Boot di kluster Kubernetes ke Managed Service for Prometheus.

  1. Tambahkan dependensi Spring Boot Actuator ke file pom.xml Anda.

    <!-- spring-boot-actuator dependency -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <!-- prometheus dependency -->
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-registry-prometheus</artifactId>
    </dependency>
  2. Pada file application.properties, tambahkan konfigurasi berikut untuk mengekspos port data pemantauan. Pada contoh ini, port-nya adalah 8091.

    # Add the following configuration to application.properties to expose metrics
    spring.application.name=frontend
    management.server.port=8091
    management.endpoints.web.exposure.include=*
    management.metrics.tags.application=${spring.application.name}

    Setelah konfigurasi berhasil, Anda dapat mengakses port 8091 aplikasi. Data pemantauan dalam format OpenMetrics tersedia di path /actuator/prometheus pada port tersebut.

Langkah 2: Instrumentasi kode

Untuk mengumpulkan metrik RED suatu API, tambahkan anotasi @Timed ke metode yang sesuai. Contoh berikut menambahkan @Timed ke API halaman indeks.

@Timed(value = "main_page_request_duration", description = "Time taken to return main page", histogram = true)
@ApiOperation(value = "Home page", tags = {"Home page operations"})
@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";
}
Catatan

Di sini, value adalah nama metrik yang diekspos ke /actuator/prometheus, dan histogram=true mengekspos metrik histogram untuk durasi permintaan API sehingga Anda dapat menghitung distribusi waktu permintaan seperti P90 dan P99.

Jika aplikasi Anda menggunakan library cache in-process seperti Guava Cache dan Anda ingin melacak status runtime-nya, Anda dapat membungkus objek kunci dengan menggunakan metode decorator Micrometer.

Modifikasi cache Guava

  1. Inject MeterRegistry. Spring Boot secara otomatis menginjeksikan implementasi PrometheusMeterRegistry.

  2. Bungkus cache lokal dengan menggunakan API utilitas, yaitu GuavaCacheMetrics.monitor pada kode berikut.

  3. Aktifkan pencatatan statistik cache dengan memanggil metode .recordStats().

  4. Beri nama objek cache untuk menghasilkan metrik yang sesuai.

@Resource
private static MeterRegistry meterRegistry;
private static final LoadingCache&lt;String, String&gt; REFRESH_CACHE = GuavaCacheMetrics.monitor(
        meterRegistry,
        CacheBuilder.newBuilder()
                .recordStats()
                .build(new CacheLoader&lt;String, String&gt;() {
                    @Override
                    public String load(String key) {
                        // Implement the specific load operation here.
                        return "";
                    }
                }),
        "refresh-cache");

Modifikasi kolam thread

  1. Inject MeterRegistry. Implementasi spesifik yang diinjeksikan di sini adalah PrometheusMeterRegistry.

  2. Bungkus kolam thread dengan menggunakan API utilitas.

  3. Beri nama kolam thread untuk menghasilkan metrik yang sesuai.

@Resource
private static MeterRegistry meterRegistry;
private static final ScheduledExecutorService REFRESH_EXECUTOR = ExecutorServiceMetrics.monitor(
        meterRegistry,
        Executors.newScheduledThreadPool(1,
                new ThreadFactory() {
                        public Thread newThread(Runnable r) {
                            Thread thread = new Thread(r);
                            thread.setDaemon(true);
                            thread.setName("dubbo.outlier.refresh-" + thread.getId());
                            return thread;
                        }
                }),
        "refresh-executor"
);

Untuk memantau metrik kustom yang spesifik bisnis, inject MeterRegistry ke bean Anda, lalu buat Counter, Gauge, atau Timer sesuai kebutuhan. Daftarkan ke MeterRegistry untuk mengekspos metrik tersebut, seperti pada contoh berikut.

@Service
public class DemoService {
    Counter visitCounter;
    public DemoService(MeterRegistry registry) {
        visitCounter = Counter.builder("visit_counter")
            .description("Number of visits to the site")
            .register(registry);
    }
    public String visit() {
        visitCounter.increment();
        return "Hello World!";
    }    
}

Langkah modifikasi kode ini telah selesai. Sekarang Anda perlu membangun ulang gambar aplikasi dan menerapkannya ke kluster Kubernetes tempat Managed Service for Prometheus diinstal. Kemudian, konfigurasikan ServiceMonitor di konsol Managed Service for Prometheus untuk mengaktifkan service discovery. Untuk informasi lebih lanjut, lihat Container Observability dan instance management.

Setelah ServiceMonitor dikonfigurasi, Anda dapat menemukan aplikasi yang baru didaftarkan dalam daftar Targets.

Pada halaman Targets, jika Anda melihat default/frontend-service-monitor/0 (1/1 up) dan Status-nya UP, ini menunjukkan bahwa titik akhir metrik (path: /actuator/prometheus) berjalan dengan benar dan konfigurasi ServiceMonitor aktif.

Langkah 3: Konfigurasi dasbor

Managed Service for Prometheus kini mengumpulkan dan menyimpan data pemantauan aplikasi Anda. Anda dapat mengonfigurasi dasbor dan peringatan untuk melihat data tersebut. Templat dasbor komunitas Grafana open-source berikut dapat membantu Anda membangun dasbor pemantauan sendiri.

Dengan menggunakan templat-templat ini dan layanan Grafana bawaan dari Managed Service for Prometheus, Anda dapat membuat dasbor yang mengkonsolidasikan metrik kunci untuk Pengembangan dan Operasi harian dalam satu halaman. Sebagai contoh, dasbor yang dibangun dari templat ini dapat mencakup ikhtisar, waktu proses komponen, Penggunaan memori, memori heap dan non-heap, serta status GC generasional.

wsd