How-To Guides

Uygulama Gözlemlenebilirliğini Uzmanlık Düzeyine Getirme: Prometheus ile İzleme Kapsamlı Kılavuz

Modern yazılım geliştirme ortamında, özellikle mikroservisler ve konteynerleştirilmiş ortamlarda, basit çalışma süreleri kontrollerine güvenmek artık yeterli değildir. Geliştiriciler ve Site Güvenilirliği Mühendisleri (SRE'ler), gerçek zamanlı olarak sistem performansına, kaynak kullanımına ve uygulama sağlığına derin bir görünürlük gerektirir. İşte tam da burada, SoundCloud'da geliştirilmeye başlanan açık kaynaklı bir sistem izleme ve uyarı kiti olan Prometheus, varsayılan standart olarak ortaya çıkmıştır. Bu kılavuz, uygulamalarınız için Prometheus izleme uygulamanıza yönelik temel adımları, sadece teoriye değil pratik uygulamaya odaklanarak size adım adım anlatacaktır.

Neden Prometheus Seçmelisiniz?

Yapılandırmaya dalmadan önce, Prometheus'un birçok mühendislik ekibi tarafından tercih edilme nedenini anlamak kritiktir. İtme tabanlı metriklere veya çekme tabanlı günlüklere dayanan geleneksel izleme araçlarının aksine, Prometheus çekme tabanlı bir mimari kullanır. Bu, belirli aralıklarla HTTP uç noktaları üzerinden metrikleri uygulamanızdan çektiği anlamına gelir. Bu tasarım seçeneği birkaç avantaj sunar: 1. **Basitlik:** Ajanların ağ hatalarını yönetmesine gerek yoktur; merkezi sunucu yeniden denemeleri ve bağlantı sorunlarını yönetir. 2. **Ölçeklendirmenin Kolaylığı:** Yatay ölçeklendirme yetenekleri, uygulama kodunuzda önemli değişiklikler yapmadan daha fazla sunucu eklemenize olanak tanır. 3. **Güçlü Sorgu Dili (PromQL):** Prometheus, karmaşık metrik analizi ve özetleme için yüksek derecede esneklik sağlayan güçlü bir sorgu dili sağlar.

Adım 1: Uygulamanızı Enstrümante Etmek

Bir uygulamayı izlemek için, metriklerini Prometheus'un anlayabileceği bir biçimde (genellikle OpenMetrics veya Prometheus gösterim biçimi) dışa aktarması gerekir. En popüler dillerin bu süreci basitleştiren istemci kütüphaneleri mevcuttur. Örneğin, Go kullanıyorsanız, resmi `prometheus/client_golang` kütüphanesini kullanabilirsiniz. İşte HTTP istek gecikmesi için bir histogramın nasıl dışa aktarılacağını gösteren basit bir kod parçacığı:
package main

import (
    "net/http"
    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/promhttp"
)

var requestLatency = prometheus.NewHistogramVec(
    prometheus.HistogramOpts{
        Name:    "http_request_duration_seconds",
        Help:    "HTTP isteklerinin süresi.",
        Buckets: prometheus.DefBuckets,
    },
    []string{"method", "status"},
)

func main() {
    prometheus.MustRegister(requestLatency)

    http.HandleFunc("/api", func(w http.ResponseWriter, r *http.Request) {
        start := time.Now()
        // ... isteği işle ...
        latency := time.Since(start).Seconds()
        requestLatency.WithLabelValues(r.Method, "200").Observe(latency)
        w.WriteHeader(http.StatusOK)
    })

    http.Handle("/metrics", promhttp.Handler())
    http.ListenAndServe(":8080", nil)
}
Bu kodda, API çağrılarının süresini HTTP yöntemi ve durum koduna göre kategorize eden bir histogram metriği tanımlıyoruz. `/metrics` uç noktası, Prometheus tarafından gereken düz metin formatında bu değerleri sunar.

Adım 2: Prometheus Yapılandırması

Uygulamanız metrikleri dışa aktardıktan sonra, Prometheus'un bunları çekmesi için yapılandırmanız gerekir. Bu işlem `prometheus.yml` yapılandırma dosyası aracılığıyla yapılır. Statik hedeflere (uygulama örneklere) işaret eden "işler" tanımlarsınız ve çekme aralığını ayarlarsınız.
global:
  scrape_interval: 15s

evaluation_interval: 15s

scrape_configs:
  - job_name: 'my-application'
    static_configs:
      - targets: ['localhost:8080']
Bu yapılandırma, Prometheus'a metrikleri `localhost:8080` adresinden her 15 saniyede bir çekmesini söyler. Bir üretim ortamında, genellikle yeni uygulama örneklere ölçeklendirme sırasında veya ölçeklendirme azaltıldığında otomatik olarak algılamak için hizmet keşfi (örneğin Kubernetes hizmet keşfi) kullanırsınız.

Adım 3: PromQL ile Etkili Sorgular Yazmak

Prometheus'un gerçek gücü sorgu dilinde, PromQL'de yatar. Veritabanlarını sorgulayan SQL'in aksine, PromQL zaman serisi verilerini sorgular. Metriklerinizi görselleştirmek için genellikle Prometheus'u Grafana gibi bir panelleme aracına bağlarsınız. API'niz için ortalama istek gecikmesini almak için şu tür bir sorgu kullanabilirsiniz:
rate(http_request_duration_seconds_sum{job="my-application"}[5m]) 
/ 
rate(http_request_duration_seconds_count{job="my-application"}[5m])
Bu sorgu, son 5 dakika içindeki toplam gecikmelerin ikinci başına ortalama artış hızını, istek sayısına bölerek hesaplar ve bu da size etkili bir şekilde ortalama gecikmeyi verir.

Sonuç

Prometheus izleme uygulamak, uygulamanızı şeffaf ve gözlemlenebilir bir sistemden bir kara kutuya dönüştürür. Kodunuzu enstrümante ederek, çekicileri yapılandırarak ve PromQL'i uzmanlık düzeyinde kullanarak, kullanıcıları etkilemeden önce anormallikleri tespit etmek için gerekli içgörülere sahip olursunuz. Altyapınız büyüdükçe, bu uygulamalar sağlam bir gözlemlenebilirlik stratejisinin omurgasını oluşturur ve ölçeklenebilirlikte güvenilirlik ile performansı sağlar. Küçük başlayın, en kritik hizmetlerinizi enstrümante edin ve dayanıklı bir sistem oluşturmak için izleme kapsamınızı kademeli olarak genişletin.
Share: