Java İle Grafana Kullanarak Uygulama Metrikleri İzleme Nasıl Yapılır?

Java İle Grafana Kullanarak Uygulama Metrikleri İzleme Nasıl Yapılır?
Java İle Grafana Kullanarak Uygulama Metrikleri İzleme Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Uygulamaya başlamadan önce sisteminizde aşağıdaki araçların ve sürümlerin kurulu olduğundan emin olmalısınız. 2026 standartlarına göre Java 21 veya üzeri sürümler önerilmektedir.

  • Java Development Kit (JDK): 21 veya 25 sürümü.
  • Spring Boot: 3.4.x veya güncel kararlı sürüm.
  • Prometheus: Metriklerin zaman serisi veritabanında tutulması için.
  • Grafana: Verilerin görselleştirilmesi için.
  • Docker: Servisleri hızlıca ayağa kaldırmak için önerilen yöntemdir.

Adım 1: Spring Boot Projesine Micrometer Entegrasyonu

Micrometer, Java uygulamaları için "metriklerin SLF4J'si" olarak adlandırılan bir cephe (facade) kütüphanesidir. Uygulamanızdaki metrikleri Prometheus formatına dönüştürmek için gerekli bağımlılıkları projenize eklemeniz gerekir.


    io.micrometer
    micrometer-registry-prometheus


    org.springframework.boot
    spring-boot-starter-actuator

Bu bağımlılıklar, Spring Boot Actuator üzerinden /actuator/prometheus endpoint'ini otomatik olarak açar. Bu endpoint, Prometheus'un okuyabileceği tüm metrikleri barındırır.

Adım 2: Actuator Yapılandırması ve Güvenlik

Metrik endpoint'lerinin dışarıya açık olması güvenlik riski oluşturabilir. Bu nedenle, application.properties dosyanızda erişim kontrollerini yapılandırmanız gerekir.

management.endpoints.web.exposure.include=prometheus,health,info
management.endpoint.prometheus.enabled=true
management.metrics.tags.application=urun-servisi

Burada management.metrics.tags.application parametresi, birden fazla servisiniz varsa bunları Grafana üzerinde ayırt etmenizi sağlayan önemli bir etikettir.

Güvenlik Uyarısı: Actuator endpoint'lerini üretim ortamında (production) mutlaka Spring Security ile koruma altına alın. Sadece Prometheus sunucusunun IP adresinden gelen isteklere izin veren bir firewall veya IP kısıtlaması uygulayın.

Adım 3: Prometheus Sunucusunu Yapılandırma

Prometheus, Java uygulamanızdan verileri belirli aralıklarla çeken bir "çekici" (pull-based) sistemdir. prometheus.yml dosyanızı aşağıdaki gibi düzenleyerek Java uygulamanızı hedef olarak ekleyin.

scrape_configs:
  - job_name: 'java-uygulamam'
    scrape_interval: 15s
    static_configs:
      - targets: ['localhost:8080']
        labels:
          env: 'prod'

Bu yapılandırma, Prometheus'un her 15 saniyede bir 8080 portundaki uygulamanıza giderek metrikleri toplamasını sağlar.

Adım 4: Grafana Üzerinde Veri Kaynağı Ekleme

Grafana'yı başlattıktan sonra (genellikle 3000 portunda), Prometheus'u veri kaynağı (Data Source) olarak eklemelisiniz. "Connections" -> "Data Sources" -> "Add data source" yolunu izleyerek Prometheus'u seçin ve URL kısmına http://prometheus:9090 yazın.

Veri kaynağı bağlantısını test ettikten sonra "Save & Test" butonuna basarak bağlantının başarılı olduğunu doğrulayın.

Adım 5: Metrikleri Görselleştirme ve Dashboard Oluşturma

Grafana üzerinde kendi dashboard'unuzu oluşturabilir veya hazır şablonları kullanabilirsiniz. Java uygulamaları için en popüler şablon ID'si 4701'dir. Ancak özel bir metrik izlemek isterseniz, "Explore" panelinde PromQL sorguları yazabilirsiniz.

# JVM bellek kullanımını yüzde olarak gösterir
100 * (jvm_memory_used_bytes / jvm_memory_max_bytes)

Bu sorguyu "Panel" kısmına yapıştırarak anlık bellek tüketimini bir grafik üzerinde görebilirsiniz.

Karşılaştırmalı İzleme Yöntemleri

Yöntem Avantaj Dezavantaj
Prometheus/Grafana Açık kaynak, güçlü topluluk Kurulum ve bakım gerektirir
CloudWatch/Datadog Yönetilen hizmet (Managed) Maliyetli olabilir

Sıkça Sorulan Sorular

Prometheus metrikleri neden görünmüyor?

Uygulamanızın /actuator/prometheus endpoint'inin dışarıdan erişilebilir olup olmadığını kontrol edin. Ayrıca Prometheus konfigürasyonunda port numarasının doğru olduğundan emin olun.

Özel iş metriklerini nasıl eklerim?

Micrometer'in MeterRegistry sınıfını kullanarak kod içerisinde registry.counter("siparis.sayisi").increment(); şeklinde kendi metriklerinizi oluşturabilirsiniz.

Dashboard'lar neden yavaş yükleniyor?

Prometheus üzerinde çok fazla veri birikmiş olabilir. Sorgularınızı optimize edin ve gereksiz metrikleri toplamayı devre dışı bırakın.

Üretim ortamında performans kaybı olur mu?

Micrometer oldukça hafiftir; ancak çok yüksek frekansta özel metrik oluşturmak CPU üzerinde küçük bir yük oluşturabilir. İzleme sıklığını (scrape interval) 15-30 saniye arasında tutmak idealdir.

Hangi metrikler daha kritiktir?

JVM heap kullanımı, aktif thread sayısı, HTTP istek süresi (latency) ve hata oranları (4xx/5xx hataları) her zaman ilk izlenmesi gereken metriklerdir.

Sorumluluk Reddi: Bu rehberdeki kod örnekleri eğitim amaçlıdır. Üretim ortamında kullanmadan önce mutlaka güvenlik testlerinden geçirin ve hassas verilerin metrikler aracılığıyla log'lara veya dış sistemlere sızmadığından emin olun.

İleri Seviye Metrik Yönetimi: Micrometer ile Özel Ölçümleme

Standart JVM metrikleri uygulamanızın genel sağlığı hakkında bilgi verse de, iş mantığınızın derinliklerine inmek için özel metrikler tanımlamanız gerekir. Micrometer, Counter, Gauge ve Timer gibi bileşenlerle karmaşık iş süreçlerini ölçmenize olanak tanır.

Özel İş Metrikleri Uygulama Örneği

Bir e-ticaret uygulamasında, başarılı ödeme işlemlerini takip etmek için bir Counter (sayaç) kullanalım. Bu sayaç, her başarılı işlemde artacak ve Prometheus tarafından periyodik olarak çekilecektir.


import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Service;

@Service
public class PaymentService {

    private final Counter successfulPayments;

    public PaymentService(MeterRegistry registry) {
        this.successfulPayments = Counter.builder("payment.success.total")
                .description("Başarılı ödeme sayısı")
                .register(registry);
    }

    public void processPayment() {
        // Ödeme mantığı burada...
        successfulPayments.increment();
    }
}

Metriklerde Performans ve Ölçeklenebilirlik İpuçları

Metrik toplama süreci, uygulamanızın ana iş akışını (main thread) yavaşlatmamalıdır. Yüksek trafikli sistemlerde metriklerin performans üzerindeki etkisini minimize etmek için aşağıdaki stratejileri izlemelisiniz:

  • Cardinality (Kardinalite) Yönetimi: Metrik etiketlerinde (tags) benzersiz değerler (örneğin kullanıcı ID'si veya IP adresi) kullanmaktan kaçının. Bu, Prometheus'un bellek kullanımını hızla artırarak sistemin çökmesine neden olabilir.
  • Örnekleme (Sampling): Çok sık tetiklenen metodlar için tüm çağrıları değil, belirli bir yüzdeyi örnekleyerek Timer kullanın.
  • Batching: Metrik verilerini toplu olarak dışa aktarmak, ağ trafiğini ve CPU yükünü azaltır.

Metriklerin Doğruluğunu Test Etme

Metriklerinizin doğru çalışıp çalışmadığını anlamak için birim testlerinizde MeterRegistry nesnesini mock'layarak veya SimpleMeterRegistry kullanarak değerlerin artışını doğrulayabilirsiniz.


import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;

class PaymentServiceTest {

    @Test
    void testPaymentCounterIncrements() {
        SimpleMeterRegistry registry = new SimpleMeterRegistry();
        PaymentService service = new PaymentService(registry);
        
        service.processPayment();
        
        double count = registry.get("payment.success.total").counter().count();
        assertThat(count).isEqualTo(1.0);
    }
}
Profesyonel Not: Üretim ortamında metriklerinizi izlerken, "Prometheus Scrape Interval" süresini çok kısa tutmak (örneğin 1 saniye) sisteminize gereksiz yük bindirir. Genellikle 15-30 saniyelik aralıklar, çoğu kurumsal uygulama için yeterli çözünürlüğü sağlar.

Sonuç

Java ile Grafana kullanarak uygulama metrikleri izleme süreci, uygulamanızın sağlığını proaktif bir şekilde yönetmenizi sağlar. Micrometer ile verileri hazırlayıp, Prometheus ile toplayarak Grafana'da görselleştirmek, 2026 yılı standartlarında profesyonel bir DevOps pratiğidir. Bir sonraki adım olarak, metrikleriniz belirli bir eşiği aştığında (örneğin bellek kullanımı %90'ı geçtiğinde) e-posta veya Slack üzerinden bildirim alabilmek için Grafana Alerting kurallarını incelemenizi öneririm.

Bu yazıya tepkinizi paylaşın:
Emre Güneş

Teknik çözümler ve ev gereçleri kullanımı konusunda deneyimli bir editörüm. Kullanıcı hatalarını minimize eden, yalın ve çözüm odaklı rehberler hazırlıyorum.

Yorumlar (0)

Yorum Yaz