Prometheus ve Grafana ile Ölçeklenebilir Altyapı İzleme Mimarisi Kurulumu

 · 

Prometheus ve Grafana ile Ölçeklenebilir Altyapı İzleme Mimarisi Kurulumu

Prometheus ve Grafana ile Ölçeklenebilir Altyapı İzleme Mimarisi Kurulumu

Modern IT altyapılarında proaktif yönetim, potansiyel sorunları henüz etki yaratmadan tespit edebilmekle mümkündür. Bu bağlamda, Prometheus ve Grafana ikilisi, metrik tabanlı izleme ve görselleştirme için sektör standardı bir çözüm sunar. Prometheus, çekme (pull) modeliyle çalışarak hedeflerden metrikleri toplar ve zamansal veri tabanında depolar. Grafana ise bu verileri zengin ve interaktif panolarla görselleştirerek altyapınızın sağlık durumunu anlık olarak sunar. Bu kombinasyon, özellikle dinamik ve mikroservis tabanlı ortamlarda esneklik, ölçeklenebilirlik ve güçlü analiz yetenekleri sağlar.

Prometheus Kurulumu ve Yapılandırması

Prometheus, hedeflerden (target) metrikleri HTTP endpoint'leri üzerinden çeker. Kurulum için Linux tabanlı bir sistem kullanacağız. İlk adım olarak Prometheus binary'sini indirip sistemimize yerleştirelim:

# Gerekli dizinleri oluşturma
sudo mkdir -p /etc/prometheus /var/lib/prometheus

# Prometheus binary'sini indirme (sürümü güncelleyebilirsiniz)
wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz
tar xvfz prometheus-2.47.0.linux-amd64.tar.gz
cd prometheus-2.47.0.linux-amd64

# Binary'leri sistem yoluna kopyalama
sudo cp prometheus promtool /usr/local/bin/

# Yapılandırma dosyasını kopyalama
sudo cp prometheus.yml /etc/prometheus/

# Web UI ve konsol şablonlarını kopyalama
sudo cp -r consoles console_libraries /etc/prometheus/

# Dizin ve dosya sahipliklerini ayarlama
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
sudo chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool

Prometheus için bir sistem kullanıcısı oluşturalım ve yetkileri düzenleyelim:

sudo useradd --no-create-home --shell /bin/false prometheus

Şimdi Prometheus'un yapılandırma dosyasını (`/etc/prometheus/prometheus.yml`) düzenleyelim. İlk aşamada, Prometheus'un kendi metriklerini ve örnek bir Node Exporter'ı izlemesini sağlayacak temel bir yapılandırma yeterlidir:

global:
  scrape_interval: 15s # Metrik toplama aralığı
  scrape_timeout: 10s # Metrik toplama zaman aşımı

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090'] # Prometheus'un kendi metrikleri

  - job_name: 'node_exporter'
    static_configs:
      - targets: ['localhost:9100'] # Node Exporter'dan metrik toplama (sonraki adımda kuracağız)

Prometheus'u bir systemd servisi olarak çalıştıralım:

# /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Monitoring System
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
    --config.file /etc/prometheus/prometheus.yml \
    --storage.tsdb.path /var/lib/prometheus \
    --web.console.templates=/etc/prometheus/consoles \
    --web.console.libraries=/etc/prometheus/console_libraries
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
sudo systemctl status prometheus

Prometheus artık 9090 portundan erişilebilir olmalı. Tarayıcınızdan http://<sunucu_ip>:9090 adresine giderek arayüzü kontrol edebilirsiniz.

Node Exporter ile Sistem Metrikleri Toplama

Fiziksel veya sanal sunucuların (CPU, bellek, disk I/O, ağ trafiği vb.) temel işletim sistemi metriklerini toplamak için Node Exporter kullanılır. Prometheus'un bu metrikleri çekebilmesi için her izlenecek sunucuya Node Exporter kurulmalıdır.

# Node Exporter binary'sini indirme
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar xvfz node_exporter-1.6.1.linux-amd64.tar.gz
cd node_exporter-1.6.1.linux-amd64

# Binary'yi sistem yoluna kopyalama
sudo cp node_exporter /usr/local/bin/

# Dizin ve dosya sahipliklerini ayarlama
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter

Node Exporter için de bir sistem kullanıcısı oluşturalım ve systemd servisi olarak yapılandıralım:

sudo useradd --no-create-home --shell /bin/false node_exporter
# /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
sudo systemctl status node_exporter

Node Exporter varsayılan olarak 9100 portundan metrik sunar. Prometheus yapılandırma dosyanızdaki node_exporter işinin bu hedefi işaret ettiğinden emin olun. Prometheus arayüzünde 'Targets' bölümüne giderek Node Exporter'ın 'UP' durumda olduğunu doğrulayabilirsiniz.

Grafana Kurulumu ve Prometheus Entegrasyonu

Grafana, farklı veri kaynaklarından alınan metrikleri görselleştirmek için güçlü bir platformdur. Kurulumunu bir Ubuntu/Debian tabanlı sistem üzerinde gerçekleştirelim:

# GPG anahtarını ekleme
sudo apt-get install -y apt-transport-https software-properties-common wget
wget -q -O - https://apt.grafana.com/gpg.key | sudo apt-key add -

# Grafana deposunu ekleme
echo "deb https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

# Grafana'yı yükleme
sudo apt-get update
sudo apt-get install grafana

Grafana'yı systemd servisi olarak başlatıp etkinleştirelim:

sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo systemctl status grafana-server

Grafana varsayılan olarak 3000 portundan erişilebilir olacaktır (http://<sunucu_ip>:3000). İlk giriş için varsayılan kullanıcı adı admin ve parola admin'dir. İlk girişte şifrenizi değiştirmeniz istenecektir.

Prometheus'u Veri Kaynağı Olarak Ekleme

Giriş yaptıktan sonra sol menüden 'Connections' -> 'Data sources' yolunu izleyerek 'Add new data source' butonuna tıklayın. Arama kutusuna 'Prometheus' yazıp seçin. Yapılandırma ekranında:

  • Name: Prometheus (veya istediğiniz bir isim)
  • URL: http://localhost:9090 (Prometheus sunucunuzun IP adresi ve portu)

Diğer ayarları varsayılan bırakıp 'Save & test' butonuna tıklayın. 'Data source is working' mesajını görmelisiniz.

İlk Grafana Panosu Oluşturma

Şimdi Node Exporter'dan gelen metriklerle basit bir pano oluşturalım. Sol menüden 'Dashboards' -> 'New dashboard' -> 'Add a new panel' adımlarını izleyin. Panel editöründe:

  • Query: Prometheus veri kaynağınızın seçili olduğundan emin olun.
  • PromQL: Örnek olarak CPU kullanımını gösteren bir sorgu girelim:sum by (instance) (rate(node_cpu_seconds_total{mode!="idle"}[5m])) * 100Bu sorgu, son 5 dakikadaki boşta olmayan CPU kullanımını (çekirdek başına) toplayıp yüzde cinsinden gösterir.
  • Visualizations: 'Graph' veya 'Gauge' gibi görselleştirme tiplerini seçerek metriklerinizi daha anlamlı hale getirebilirsiniz.

Panonuzu kaydederek hızlı bir şekilde sisteminizdeki temel metrikleri izlemeye başlayabilirsiniz. Grafana topluluğu tarafından paylaşılan hazır panoları (Grafana Labs Dashboards) da içe aktararak zamandan kazanabilirsiniz. Örneğin, Node Exporter için ID 1860 numaralı panoyu içe aktarabilirsiniz.

Gerçek Üretim Senaryolarında İzleme Stratejileri

Tek bir Prometheus ve Grafana kurulumu küçük ortamlar için yeterli olsa da, büyük ve dağıtık sistemlerde daha gelişmiş stratejiler gereklidir:

  • Yüksek Erişilebilirlik ve Ölçeklenebilirlik: Prometheus tek bir noktadan hata verebilir (single point of failure). Yüksek erişilebilirlik için iki Prometheus sunucusunu aynı hedefleri scrape edecek şekilde yapılandırabilir, uzun süreli depolama ve sorgulama için Thanos veya Cortex gibi çözümlerle entegre edebilirsiniz. Bu çözümler, Prometheus metriklerini merkezi bir object storage'a (AWS S3, Google Cloud Storage) yazarak yatay ölçeklenebilirlik ve global sorgulama yeteneği kazandırır.
  • Otomatik Keşif (Service Discovery): Dinamik ortamlarda (Kubernetes, AWS EC2 Auto Scaling grupları) hedeflerin IP adresleri sürekli değişebilir. Prometheus, Kubernetes API, EC2 API gibi servis keşif mekanizmalarıyla entegre olarak hedefleri otomatik olarak bulup izlemeye başlayabilir. Bu, manuel yapılandırma ihtiyacını ortadan kaldırır.
  • Uyarı Yönetimi (Alerting): Prometheus, kritik eşikleri aşıldığında veya belirli durumlar oluştuğunda uyarı tetiklemek için Alertmanager ile entegre çalışır. Alertmanager, uyarıları gruplandırır, tekrarları bastırır ve bildirimleri Slack, PagerDuty, email gibi farklı kanallara yönlendirir. Örneğin, bir sunucunun CPU kullanımı %90'ın üzerine çıktığında veya bir disk %95 doluluğa ulaştığında otomatik olarak bir Slack kanalına uyarı gönderilebilir.
  • Uygulama Metrikleri: İşletim sistemi metriklerinin yanı sıra, uygulamalarınızın performansını izlemek kritik öneme sahiptir. Prometheus client library'leri (Go, Python, Java vb.) kullanarak uygulamanızın kendi iş metriklerini (istek sayısı, gecikme süresi, hata oranları, aktif kullanıcı sayısı) Prometheus formatında dışa aktarabilirsiniz. Örneğin, bir e-ticaret uygulamasında sepet terk oranını veya ödeme işlemlerinin başarı oranını izlemek, iş süreçlerindeki aksaklıkları hızlıca tespit etmenizi sağlar.
  • Bulut Ortamları ile Entegrasyon: AWS CloudWatch veya diğer bulut sağlayıcılarının izleme hizmetleriyle entegrasyon, karma bulut stratejileri için önemlidir. CloudWatch metriklerini Prometheus'a aktarmak veya Prometheus metriklerini CloudWatch'a göndermek için adaptörler ve exporter'lar mevcuttur. Bu sayede, hibrit altyapınızda tutarlı bir izleme deneyimi sağlayabilirsiniz.

Örnek Senaryo: Mikroservis Ortamında Gecikme Süresi İzleme

Bir Kubernetes kümesinde çalışan sipariş işleme mikroservisinin API gecikme sürelerini izlediğimizi varsayalım. Uygulama, Prometheus Go client library'sini kullanarak order_service_api_request_duration_seconds_bucket gibi histogram metriklerini dışa aktarıyor. Grafana'da şu PromQL sorgusu ile API'nin 99. yüzdelik dilim (p99) gecikme süresini izleyebiliriz:

histogram_quantile(0.99, sum(rate(order_service_api_request_duration_seconds_bucket[5m])) by (le, service_name, endpoint))

Bu metrik, Alertmanager'da bir kurala bağlanabilir: Eğer p99 gecikme süresi arka arkaya 5 dakika boyunca 500ms'yi aşarsa, Slack kanalına 'Yüksek API Gecikmesi' uyarısı gönderilir. Bu sayede, kullanıcı deneyimini doğrudan etkileyen performans sorunları anında tespit edilip müdahale edilebilir.

Sonuç

Prometheus ve Grafana, modern altyapıların karmaşıklığını yönetmek için güçlü, esnek ve ölçeklenebilir bir izleme çözümü sunar. Bu entegre sistem, sadece sistem kaynaklarını değil, aynı zamanda uygulama davranışlarını ve iş metriklerini de derinlemesine izleme yeteneği sağlar. Doğru yapılandırıldığında ve üretim senaryolarına uygun ölçeklendirme stratejileriyle desteklendiğinde, proaktif sorun tespiti, hızlı hata ayıklama ve sürekli performans optimizasyonu için vazgeçilmez bir araç haline gelir. Bu rehberdeki adımlarla temel bir izleme altyapısını kurabilir, ardından ihtiyaçlarınıza göre Alertmanager, Thanos/Cortex ve özel uygulama metrikleri gibi ileri düzey bileşenlerle sisteminizi genişletebilirsiniz.

← Blog Listesine Dön