Tüm Ürünler
Search
Belge Merkezi

Managed Service for Prometheus:Spring Boot uygulamalarını Managed Service for Prometheus'a bağlama

Son Güncelleme:Oct 09, 2026

Spring Boot uygulamalarını sürekli sağlık ve performans izleme amacıyla Managed Service for Prometheus'a bağlayabilirsiniz. Bu konu, bu entegrasyonun nasıl hızlıca kurulacağını açıklar.

Arka plan bilgileri

Geleneksel SSM tabanlı MVC uygulamaları, küçük bir hatanın bile arızalara yol açabileceği kapsamlı yapılandırmalar gerektirir. Spring Boot bu sorunu otomatik yapılandırma ile çözer: gerekli JAR paketleri mevcut olduğunda uygulama otomatik olarak yapılandırılır. Ayrıca otomatik yapılandırma sınıflarını özel yapılandırmalarla değiştirerek kurumsal düzeyde uygulamaları hızla geliştirebilirsiniz.

Spring Boot uygulamaları için kapsamlı bir izleme sistemi genellikle aşağıdaki temel bileşenlerden oluşur.

Collect monitoring data

İzleme verilerini toplamanın en yaygın yöntemleri itme (push) ve çekme (pull) modelleridir. Prometheus izleme ekosistemi çekme tabanlı sistemlere önde gelen bir örnektir. Managed Service for Prometheus tipik bir çekme tabanlı sistemdir. Uygulamalar ve altyapı OpenMetrics uyumlu bir arayüz aracılığıyla izleme verilerini sunar; Managed Service for Prometheus ise bu verileri uzun vadeli depolama için düzenli aralıklarla çeker.

OpenMetrics, cloud-native ölçümlerin büyük ölçekte raporlanması için standartları tanımlayan, yüksek ölçeklenebilirliğe sahip bir ölçüm protokolüdür. Hem metin temsili hem de Protocol Buffers formatını destekler. Metin tabanlı format daha yaygındır ve Managed Service for Prometheus veri çekme işleminde varsayılan protokol olarak bunu kullanır. Aşağıdaki örnek OpenMetrics tabanlı ölçüm temsil formatını gösterir.

# 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
Not

Bir ölçümün veri modeli ölçüm adı ve etiketler (labels) olarak adlandırılan anahtar-değer çiftlerinden oluşan bir küme tarafından tanımlanır. Aynı ölçüm adına ve etiketlere sahip veri noktaları aynı zaman serisine aittir. Örneğin acme_http_router_request_seconds_sum{path="/api/v1",method="GET"} ifadesi değeri GET olan bir method etiketine sahip acme_http_router_request_seconds_sum adlı ölçüm için bir veri örneğini temsil eder. Her örnek bir Float64 değeri ve milisaniye hassasiyetinde bir UNIX zaman damgası içerir. Zaman içinde toplanan bu örnekler grafikteki dinamik çizgileri oluşturur.

Cloud-native ekosistemindeki altyapı bileşenlerinin çoğu ölçümleri OpenMetrics metin formatında sunabilir. Bu formatı yerel olarak desteklemeyen bileşenler için Prometheus topluluğu zengin bir Prometheus Exporter koleksiyonu sağlar. Bu bileşenler (veya Exporter'lar) Managed Service for Prometheus tarafından yapılan periyodik çekme isteklerine yanıt vererek operasyonel durumlarını sonraki analizler için Managed Service for Prometheus içinde kaydeder. Kendi iş ölçümlerinizi Prometheus ekosistemine entegre etmek amacıyla Managed Service for Prometheus çok dilli SDK'larını da kullanabilirsiniz.

Data visualization and analysis

Uygulama ve altyapı ölçümlerini topladıktan sonra sistem durumunu anlamak için çok boyutlu verileri sorgulayabilir analiz edebilir ve karşılaştırabilirsiniz. Lider açık kaynaklı bir veri görselleştirme aracı olan Grafana geniş bir grafik türü ve şablon yelpazesi sunar. Managed Service for Prometheus izleme verilerinizi sorgulamak analiz etmek ve görselleştirmek için tamamen yönetilen bir Grafana hizmeti sağlar.

Timely alerting and incident management

Bir hizmet arıza riski altında olduğunda izleme sistemi yöneticilere derhal bildirimde bulunmalıdır. Böylece yöneticiler sorunları çözebilir veya proaktif olarak önleyerek iş etkisini en aza indirebilir. Yöneticiler farklı ölçümleri ve geçmiş verileri analiz ederek kök nedenleri belirleyip çözebilir.

Entegrasyon sürecine genel bakış

Spring Boot uygulamaları için topluluk Java geliştiricileri için kod enstrümantasyonu ölçüm toplama ve çıktı işlemlerini basitleştiren Spring Boot Actuator çerçevesini sağlar. Spring Boot 2.0'dan başlayarak Actuator daha güçlü ve esnek izleme yetenekleri sağlayan Micrometer üzerine yeniden inşa edildi. Micrometer günlükleme için SLF4J'ye benzer şekilde bir ölçüm cephesidir (metrics facade). Micrometer kullanarak uygulamalar AppOptics Datadog Elastic InfluxDB ve Managed Service for Prometheus gibi çeşitli izleme sistemlerine bağlanabilir.

Java uygulamalarından ölçümleri eşlerken Micrometer kendi ölçüm türlerini Managed Service for Prometheus tarafından kullanılan türlerle eşlemek için aşağıdaki semantiği kullanır:


Micrometer ölçüm türü


Managed Service for Prometheus ölçüm türü


Tipik kullanım durumu


Counter


Counter


Sürekli artan bir değer. Örneğin sayfa görüntülemelerini (PV) tekil ziyaretçileri (UV) veya API çağrılarını sayma.


Gauge


Gauge


Zaman içinde dalgalanan bir değişken. Örneğin kaynak kullanımı sistem yükü veya istek kuyruk uzunluğu.


Timer


Histogram


Verinin istatistiksel dağılımı tipik olarak gecikme süresi için. Örneğin bir API çağrısı için P50 P90 ve P99 gecikme sürelerini hesaplama.


DistributionSummary


Summary


Verinin istatistiksel dağılımı amaç açısından Histogram'a benzer.

  • Micrometer'ın Counter ölçüm türü Managed Service for Prometheus içindeki Counter türüne eşlenir ve API çağrı sayısı önbellek isabetleri veya toplam ziyaret sayısı gibi monoton olarak artan bir değişkeni tanımlamak için kullanılır. Bir Timer mantıksal olarak bir Counter içerir. Bir API'nin yanıt sürelerini toplamak için Timer kullanırsanız çağrı sayısını da toplarsınız. Bu nedenle aynı API için hem Timer hem de Counter belirtmeniz gerekmez.

  • Micrometer'ın Gauge ölçüm türü Managed Service for Prometheus içindeki Gauge türüne eşlenir ve CPU kullanımı veya bir thread pool kuyruğundaki görev sayısı gibi bir aralıkta sürekli dalgalanan bir değişkeni tanımlamak için kullanılır.

  • Micrometer'ın Timer ölçüm türü Managed Service for Prometheus içindeki Histogram türüne eşlenir ve bir API'nin yanıt süresi (RT) dağılımı gibi zamanla ilgili verileri tanımlamak için kullanılır.

  • Micrometer'ın DistributionSummary ölçüm türü Managed Service for Prometheus içindeki Summary türüne eşlenir. Histogram'a benzer şekilde Summary de istatistiksel dağılımlar için kullanılır. Ancak dağılım Managed Service for Prometheus içinde depolanmak üzere gönderilmeden önce istemci tarafında hesaplandığından Summary sonuçları birden fazla makine arasında toplanamaz (aggregate edilemez). Bu durum veri dağılımının küresel bir görünümünü sağlayamaması nedeniyle kullanımını sınırlar.

Integration workflow

Kubernetes kümesine dağıtılmış bir Spring Boot uygulamasını Managed Service for Prometheus ile bağlamanız gerektiğinde kod enstrümantasyonu > uygulama dağıtımı > hizmet keşfi sürecini takip etmeniz gerekir.

image

Öncelikle kodunuza gerekli Spring Boot Actuator Maven bağımlılıklarını ekleyin ve izlemek istediğiniz ölçümleri kaydedin veya denetleyicilerinizdeki (controllers) yöntemlere açıklamalar (annotations) ekleyin.

Ardından enstrüman edilmiş uygulamayı Kubernetes'te dağıtın ve ölçüm toplama uç noktasını Managed Service for Prometheus ile kaydedin. Bu süreç service discovery (hizmet keşfi) olarak bilinir. Managed Service for Prometheus ServiceMonitor özel kaynak tanımı (CRD) kullanarak hizmet keşfi sağlar.

Son olarak Managed Service for Prometheus hedef uygulamanın ölçüm uç noktasını başarıyla keşfettikten sonra Grafana'da veri kaynaklarını yapılandırabilir ve panolar oluşturabilirsiniz. Ayrıca temel ölçümlere dayalı uyarılar da yapılandırabilirsiniz.

İzleme hedefleri

Kubernetes kümesindeki bir Spring Boot uygulamasını Managed Service for Prometheus ile bağlayarak aşağıdakileri başarabilirsiniz:

  • Sistem giriş noktasını izleyin: Müşteri trafiğini işleyen bir ön uç hizmetindeki harici API'ler için temel RED ölçümlerini (Rate Errors Duration) takip edin.

  • Kritik sistem yollarını izleyin: Arka uç hizmetlerinin kritik yolundaki temel nesneleri gözlemleyin; örneğin bir thread pool'un kuyruk durumu veya proses içi Guava Cache'in isabet oranı.

  • İşle ilgili özel ölçümleri izleyin: Belirli bir API için tekil ziyaretçi sayısı gibi işinize özel ölçümler için izleme uygulayın.

  • JVM performansını izleyin: JVM çöp toplama (GC) ve bellek kullanımını takip edin.

  • İzlemeyi merkezileştirin: Yukarıdaki tüm ölçümleri tek bir pano üzerinde toplayıp görüntüleyin ve temel göstergeler için uyarılar yapılandırın.

Adım 1: Spring Boot Actuator'ı yapılandırın

Bu konuda Kubernetes kümesindeki bir Spring Boot mikroservis uygulamasını Managed Service for Prometheus'a nasıl bağlayacağınızı göstermek için Spring Boot ve Spring Cloud Alibaba ile oluşturulmuş bir cloud-native mikroservis uygulaması kullanılmaktadır.

  1. Spring Boot Actuator bağımlılıklarını pom.xml dosyanıza ekleyin.

    <!-- 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. application.properties dosyasına izleme verileri için bağlantı noktasını açmak amacıyla aşağıdaki yapılandırmayı ekleyin. Bu örnekte bağlantı noktası 8091'dir.

    # 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}

    Yapılandırma başarılı olduktan sonra uygulamanın 8091 numaralı bağlantı noktasına erişebilirsiniz. OpenMetrics formatındaki izleme verileri bu bağlantı noktasındaki /actuator/prometheus yolunda mevcuttur.

Adım 2: Kodu enstrüman edin

Bir API için RED ölçümlerini toplamak üzere ilgili yönteme @Timed açıklamasını ekleyin. Aşağıdaki örnek index sayfası API'sine @Timed ekler.

@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";
}
Not

Burada value parametresi /actuator/prometheus adresine sunulan ölçümün adıdır ve histogram=true parametresi P90 ve P99 gibi istek süresi dağılımlarını hesaplayabilmeniz için API istek süresine ilişkin bir histogram ölçümü sunar.

Uygulamanız Guava Cache gibi proses içi bir önbellek kütüphanesi kullanıyorsa ve çalışma zamanı durumunu takip etmek istiyorsanız Micrometer'ın dekoratör yöntemlerini kullanarak temel nesneleri sarabilirsiniz.

Modifying the Guava cache

  1. MeterRegistry öğesini inject edin. Spring Boot PrometheusMeterRegistry uygulamasını otomatik olarak inject eder.

  2. Aşağıdaki kodda GuavaCacheMetrics.monitor olan bir yardımcı API kullanarak yerel önbelleği sarın.

  3. .recordStats() yöntemini çağırarak önbellek istatistiklerinin kaydedilmesini etkinleştirin.

  4. İlgili ölçümleri oluşturmak için önbellek nesnesine bir ad verin.

@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");

Modifying the thread pool

  1. MeterRegistry öğesini inject edin. Burada inject edilen spesifik uygulama PrometheusMeterRegistry şeklindedir.

  2. Bir yardımcı API kullanarak thread pool'u sarın.

  3. İlgili ölçümleri oluşturmak için thread pool'a bir ad verin.

@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"
);

İşe özel özel ölçümleri izlemek için bean'inize MeterRegistry inject edin ardından gereksinimlerinize göre bir Counter Gauge veya Timer oluşturun. Aşağıdaki örnekte gösterildiği gibi ölçümü sunmak için bunu MeterRegistry ile kaydedin.

@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!";
    }    
}

Gerekli kod değişiklikleri tamamlanmıştır. Şimdi uygulama görüntüsünü yeniden oluşturmanız ve Managed Service for Prometheus yüklü bir Kubernetes kümesine dağıtmanız gerekmektedir. Ardından hizmet keşfini etkinleştirmek için Managed Service for Prometheus konsolunda bir ServiceMonitor yapılandırın. Daha fazla bilgi için bkz. Container Observability ve instance management.

ServiceMonitor yapılandırıldıktan sonra yeni kaydedilen uygulamayı Hedefler (Targets) listesinde bulabilirsiniz.

Targets sayfasında default/frontend-service-monitor/0 (1/1 up) ifadesini görüyor ve Durum UP ise bu durum ölçüm uç noktasının (yol: /actuator/prometheus) doğru çalıştığını ve ServiceMonitor yapılandırmasının etkin olduğunu gösterir.

Adım 3: Panoları yapılandırın

Managed Service for Prometheus artık uygulamanızın izleme verilerini toplamakta ve depolamaktadır. Verileri görüntülemek için panolar ve uyarılar yapılandırabilirsiniz. Aşağıdaki açık kaynaklı Grafana topluluk pano şablonları kendi izleme panonuzu oluşturmanıza yardımcı olabilir.

Bu şablonları ve Managed Service for Prometheus yerleşik Grafana hizmetini kullanarak günlük geliştirme ve operasyonlar için temel ölçümleri tek bir sayfada birleştiren bir pano oluşturabilirsiniz. Örneğin bu şablonlardan oluşturulan bir pano genel bakış bileşen çalışma süreleri bellek kullanımı yığın (heap) ve yığın dışı (non-heap) bellek ile nesil bazlı GC durumunu içerebilir.

wsd