How-To Guides

Prometheus ile Uygulama İzlemeyi Ustalaşmak: Pratik Bir Kılavuz

Modern yazılım geliştirme ve operasyon dünyasında görünürlük güçtür. Uygulamalar dağıtık sistemlerde ölçeklendiğinde, geleneksel günlük kayıtları genellikle performans darboğazlarını veya sistem hatalarını gerçek zamanlı tespit etmek için yetersiz kalır. İşte burada, SoundCloud tarafından geliştirilen açık kaynaklı bir sistem izleme ve uyarı kiti olan Prometheus devreye girer. Konteyner ortamları ve bulut-native mimariler için varsayılan standart haline gelen Prometheus, sağlam bir çok boyutlu veri modeli ve PromQL adlı güçlü bir sorgu dili sağlar.

Bu kılavuz, Prometheus'u kurmanın, dışa aktarıcıları (exporters) anlamanın ve ilk uyarılarınızı yapılandırmanın temellerini size adım adım anlatacaktır. İster mikro hizmet mimarisi yürütüyor olun, ister tek bir sunucuda monolitik bir uygulama çalıştırıyor olun, Prometheus'u uygulamak sisteminizin güvenilirliğini ve ekibinizin olaylara yanıt süresini önemli ölçüde artırabilir.

Mimariyi Anlamak

Yapılandırmaya dalmadan önce Prometheus'un verileri nasıl topladığını anlamak kritik öneme sahiptir. Prometheus metrikleri göndermez (push); bunları çeker (pull). Bu çekme tabanlı model, güvenliği ve ölçeklenebilirliği basitleştirir. Prometheus sunucuları, uygulamanız veya altyapı bileşenleriniz tarafından dışa aktarılan metrik uç noktalarını düzenli aralıklarla tarar (scrape). Bu uç noktalar genellikle Exposition Format olarak bilinen basit, metin tabanlı bir biçimde veri döndürür.

Çoğu uygulama metrikleri varsayılan olarak dışa aktarmadığından, "Dışa Aktarıcılar" (Exporters) kullanırız. Bir dışa aktarıcı, belirli bir bileşenden donanım veya işletim sistemi düzeyindeki metrikleri toplayan ve bunları Prometheus'un tarayabileceği bir biçime dönüştüren bir kod parçasıdır. Örneğin, Node Exporter CPU ve bellek kullanımını toplarken, cAdvisor dışa aktarıcısı konteyner metriklerini sağlar.

Prometheus Yapılandırması

Prometheus'un çekirdeği, genellikle prometheus.yml adlandırılan yapılandırma dosyasıdır. Bu YAML dosyası, genel ayarları, tarama hedeflerini ve kural dosyalarını tanımlar. Temel bir yapılandırma, localhost'taki 9090 numaralı bağlantı noktasında (varsayılan Prometheus bağlantı noktası) ve 9100 numaralı bağlantı noktasında (varsayılan Node Exporter bağlantı noktası) hedef alan aşağıdaki kod parçacığına benzer:

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node-exporter'
    static_configs:
      - targets: ['localhost:9100']

Bu yapılandırmada, scrape_interval Prometheus'un verileri ne sıklıkta çekeceğini belirler. Bu değeri spesifik ihtiyaçlarınıza göre ayarlamak—örneğin, düşük trafik dönemlerinde yükü azaltmak için artırmak veya yüksek frekanslı veri toplama için azaltmak—yaygın bir optimizasyon tekniğidir.

Özel Uygulamaları Entegre Etme

Sistem metrikleri hayati önem taşırken, iş mantığı metrikleri de equally önemlidir. Flask kullanarak bir Python web uygulaması çalıştırdığınızı varsayalım. prometheus_client gibi bir istemci kütüphanesi kullanarak, istemci gecikmesi veya hata oranları gibi özel metrikleri dışa aktarmak için kodunuzu enstrümante edebilirsiniz.

İstek süresi için bir histogram tanımlayarak, uygulamanızın yük altında nasıl performans gösterdiğine dair derin içgörüler elde edebilirsiniz. İşte uygulamanızda bir metrik tanımlamanın basitleştirilmiş bir örneği:

from prometheus_client import Histogram, start_http_server
import time

REQUEST_DURATION = Histogram('request_duration_seconds', 'Histogram açıklaması')

@app.route('/api/data')
def handle_data():
    with REQUEST_DURATION.time():
        # Bazı işleri simüle et
        time.sleep(1)
        return "Veri işlendi"

Bu kod, Prometheus'un tarayabileceği otomatik olarak bir /metrics uç noktası dışa aktarır. Prometheus sunucusunun (muhtemelen ayrı bir konteynerde çalışıyor) buna erişebilmesi için uygulamanızın 0.0.0.0 adresine bağlandığından emin olun.

Görselleştirme ve Uyarılar

Prometheus, verileri depolamak ve sorgulamak için mükemmeldir, ancak karmaşık panolar için yerleşik bir görselleştirme arayüzüne sahip değildir. İşte burada Grafana devreye girer. Grafana'yı Prometheus veri kaynağınıza bağlayarak, zaman içindeki trendleri görselleştiren sezgisel, gerçek zamanlı panolar oluşturabilirsiniz.

Ayrıca Prometheus, tanımlanmış kurallara dayanarak uyarıları tetikleyebilir. Örneğin, CPU kullanımının beş dakikadan fazla bir süre boyunca %80'i aşması durumunda ateşlenecek bir uyarı yapılandırabilirsiniz. Bu uyarı, Slack, PagerDuty veya e-posta gibi araçlara gönderilebilir, böylece ekibiniz kritik sorunlardan anında haberdar edilir.

Sonuç

Prometheus'u uygulamak, olgun bir DevOps kültürüne doğru atılmış temel bir adımdır. Tepkisel hata ayıklamayı proaktif izlemeye dönüştürür. Dışa aktarıcıları anlamayı, tarama hedeflerini doğru yapılandırmayı ve özel uygulama metriklerini entegre etmeyi öğrendiğinizde, sisteminizin sağlığına dair bütünsel bir görünüme sahip olursunuz. Temellerle başlayın, izleme kapsamınızı kademeli olarak genişletin ve ham verileri eyleme dönüştürmek için Grafana'dan yararlanın. Gelecekteki siz ve kullanıcılarınız, artan güvenilirlik ve performans için size minnettar kalacaktır.

Share: