Grafana Kurulumu ve Prometheus Veri Kaynağı Ekleme

Prometheus kurulumunu tamamladıktan sonra metriklerin ham haliyle terminalde takip etmek bir süre sonra işkenceye dönüşüyor. Binlerce satır sayı arasında “şu an sunucum nasıl?” sorusuna cevap bulmak yerine, güzel grafikler üzerinden birkaç saniyede durumu kavramak istiyorsunuz. İşte tam bu noktada Grafana devreye giriyor. Bu yazıda Ubuntu/Debian tabanlı bir sunucuya Grafana kurulumunu, Prometheus veri kaynağı bağlantısını ve temel dashboard oluşturmayı adım adım ele alacağız.

Grafana Nedir ve Neden Kullanmalıyız?

Grafana, açık kaynaklı bir veri görselleştirme ve analiz platformudur. Prometheus, InfluxDB, Elasticsearch, MySQL gibi onlarca farklı veri kaynağını destekler. Sysadmin tarafında özellikle şu senaryolarda hayat kurtarır:

  • Sunucu CPU, RAM, disk kullanımını gerçek zamanlı izlemek
  • Geçmiş performans verilerini karşılaştırmak
  • Kritik eşikler için alarm (alert) kurmak
  • Ekip içinde ortak izleme dashboardları paylaşmak

Prometheus tek başına veri toplar ve sorgular, ama görselleştirme konusunda oldukça kısıtlıdır. Grafana ise bu eksikliği dolduran mükemmel bir tamamlayıcıdır. İkisi birlikte kullanıldığında production ortamı izleme için sağlam bir altyapı oluşur.

Kurulum Öncesi Gereksinimler

Grafana kurulumuna geçmeden önce sistemin hazır olduğundan emin olalım. Bu rehberde aşağıdaki ortamı kullanıyoruz:

  • Ubuntu 22.04 LTS (Debian tabanlı dağıtımlar için aynı adımlar geçerli)
  • Prometheus zaten kurulu ve çalışıyor olmalı (varsayılan olarak 9090 portunda)
  • Node Exporter kurulu ve Prometheus tarafından scrape ediliyor olmalı
  • Minimum 512MB RAM, 1 vCPU

Sistemi güncel tutalım ve gerekli bağımlılıkları yükleyelim:

sudo apt update && sudo apt upgrade -y
sudo apt install -y apt-transport-https software-properties-common wget curl gnupg2

Grafana Kurulumu

Grafana’yı kurmanın birkaç yolu var: apt deposundan, manuel .deb paketi olarak veya Docker container olarak. Production ortamlarında apt deposunu tercih ediyorum çünkü güncelleme yönetimi çok daha kolay oluyor.

APT Deposu ile Kurulum

Önce Grafana’nın GPG anahtarını sisteme ekleyelim:

sudo mkdir -p /etc/apt/keyrings
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null

Ardından Grafana APT deposunu sisteme tanıtalım. Stabil (stable) sürümü öneriyorum:

echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list

Şimdi depoyu güncelleyip Grafana’yı kuralım:

sudo apt update
sudo apt install -y grafana

Kurulum tamamlandıktan sonra Grafana servisini başlatıp sistem açılışında otomatik başlamasını sağlayalım:

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

Servisin düzgün başlayıp başlamadığını kontrol edelim:

sudo systemctl status grafana-server

Çıktıda active (running) görüyorsanız her şey yolunda demektir. Grafana varsayılan olarak 3000 portunda çalışır.

Firewall Ayarları

Eğer UFW aktifse Grafana portunu açmamız gerekiyor:

sudo ufw allow 3000/tcp
sudo ufw reload
sudo ufw status

Production ortamında Grafana’yı doğrudan internete açmak yerine Nginx reverse proxy arkasına almak daha güvenlidir. Ama önce kurulumun çalıştığını doğrulayalım.

Grafana’ya İlk Giriş

Tarayıcıdan http://sunucu-ip:3000 adresine gidin. Karşınıza Grafana giriş ekranı gelecek.

Varsayılan kimlik bilgileri:

  • Kullanıcı adı: admin
  • Şifre: admin

İlk girişte Grafana sizden şifreyi değiştirmenizi isteyecek. Bunu kesinlikle yapın, özellikle sunucu dışarıdan erişilebilir durumdaysa. Güçlü bir şifre belirleyin ve geçin.

Giriş yaptıktan sonra Grafana’nın ana sayfasını göreceksiniz. Sol menüden tüm özelliklere ulaşabilirsiniz. Şimdi asıl işe, yani Prometheus veri kaynağını eklemeye geçelim.

Prometheus Veri Kaynağı Ekleme

Grafana’da bir şey görselleştirebilmek için önce veri kaynağı (data source) tanımlamanız gerekiyor. Grafana UI üzerinden veya API ile bu işlemi yapabilirsiniz. Her ikisini de gösterelim.

UI Üzerinden Veri Kaynağı Ekleme

  1. Sol menüden dişli çark ikonuna (Configuration) tıklayın
  2. Data Sources seçeneğini seçin
  3. Add data source butonuna tıklayın
  4. Listeden Prometheus seçin
  5. HTTP bölümünde URL alanına Prometheus adresinizi girin: http://localhost:9090
  6. Eğer Prometheus ve Grafana aynı sunucudaysa localhost kullanın
  7. Save & Test butonuna tıklayın

“Data source is working” mesajını görürseniz bağlantı başarılı demektir.

API ile Veri Kaynağı Ekleme (Otomasyon için)

Eğer birden fazla sunucuya Grafana kuruyorsanız veya infrastructure as code yaklaşımı benimsiyorsanız, veri kaynağını API ile eklemek çok daha pratik:

curl -X POST 
  http://admin:your_password@localhost:3000/api/datasources 
  -H 'Content-Type: application/json' 
  -d '{
    "name": "Prometheus",
    "type": "prometheus",
    "url": "http://localhost:9090",
    "access": "proxy",
    "isDefault": true,
    "jsonData": {
      "timeInterval": "15s",
      "httpMethod": "POST"
    }
  }'

Bu komutu çalıştırdığınızda JSON formatında bir yanıt alırsınız. "message":"Datasource added" görüyorsanız başarılıdır.

Provisioning ile Otomatik Veri Kaynağı Tanımlama

Grafana’nın çok güçlü bir özelliği olan provisioning ile veri kaynaklarını YAML dosyaları üzerinden yönetebilirsiniz. Bu yöntem özellikle Ansible veya Terraform ile altyapı yönetiyorsanız ideal:

sudo nano /etc/grafana/provisioning/datasources/prometheus.yaml

Dosya içeriği şu şekilde olmalı:

apiVersion: 1

datasources:
  - name: Prometheus
    type: prometheus
    access: proxy
    url: http://localhost:9090
    isDefault: true
    version: 1
    editable: true
    jsonData:
      timeInterval: "15s"
      httpMethod: POST
      exemplarTraceIdDestinations:
        - name: trace_id
          datasourceUid: tempo

Dosyayı kaydedip Grafana’yı yeniden başlatın:

sudo systemctl restart grafana-server

Grafana başlarken bu YAML dosyasını okuyacak ve veri kaynağını otomatik olarak oluşturacak. Provisioning ile oluşturulan veri kaynaklarını UI üzerinden silemezsiniz, bu da yanlışlıkla silinme riskini ortadan kaldırır.

Temel Grafana Konfigürasyonu

Grafana’nın ana konfigürasyon dosyası /etc/grafana/grafana.ini konumundadır. Tüm ayarları değiştirmek zorunda değilsiniz ama birkaç kritik ayara göz atalım:

sudo nano /etc/grafana/grafana.ini

Önemli parametreler:

  • [server] http_port: Grafana’nın dinlediği port, varsayılan 3000
  • [server] domain: Grafana’nın çalıştığı domain adı
  • [server] root_url: Grafana’nın tam URL’i, reverse proxy kullanıyorsanız önemli
  • [security] admin_password: Admin şifresi (ilk kurulumda değiştirilmeli)
  • [auth.anonymous] enabled: Anonim erişim, production’da false olmalı
  • [smtp]: E-posta bildirimleri için SMTP ayarları

Örneğin Nginx reverse proxy arkasında çalıştırıyorsanız şu ayarları güncelleyin:

[server]
protocol = http
http_port = 3000
domain = grafana.sirketim.com
root_url = https://grafana.sirketim.com
serve_from_sub_path = false

Değişikliklerden sonra mutlaka yeniden başlatın:

sudo systemctl restart grafana-server

İlk Dashboard Oluşturma

Veri kaynağı hazır, şimdi görselleştirme zamanı. Sıfırdan dashboard oluşturmak yerine hazır community dashboardları kullanmak işi hızlandırır. Grafana’nın resmi dashboard kütüphanesi grafana.com/grafana/dashboards adresinde binlerce hazır şablon barındırıyor.

Node Exporter Dashboard İçe Aktarma

Node Exporter ile toplanan sistem metriklerini görselleştirmek için en popüler dashboard ID 1860 (Node Exporter Full). Bu dashboard CPU, RAM, disk, network gibi onlarca metriği hazır grafiklerle sunar.

  1. Sol menüden + ikonuna tıklayın
  2. Import seçeneğini seçin
  3. Import via grafana.com alanına 1860 yazın
  4. Load butonuna tıklayın
  5. Açılan ekranda veri kaynağı olarak az önce eklediğimiz Prometheus’u seçin
  6. Import butonuna tıklayın

Birkaç saniye içinde tam teşekküllü bir sistem izleme dashboardı karşınızda olacak. Gerçek dünyada bu kadar hızlı bir şekilde profesyonel görünümlü bir izleme ekranı kurmak mümkün, bu yüzden Grafana bu kadar popüler.

Sıfırdan Panel Oluşturma

Hazır dashboardlar iyi bir başlangıç noktası ama kendi ihtiyaçlarınıza göre özel paneller oluşturmanız gerekecek. Örneğin son 1 saatteki CPU kullanım yüzdesini gösteren bir panel oluşturalım:

  1. New Dashboard oluşturun
  2. Add new panel tıklayın
  3. Query editörüne şu PromQL sorgusunu girin:
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

Bu sorgu her instance için ortalama CPU kullanım yüzdesini hesaplar. Panel başlığını “CPU Kullanımı (%)” olarak ayarlayın, visualization olarak Time series seçin ve sağ taraftaki Unit alanından Percent (0-100) seçin.

Benzer şekilde RAM kullanımı için:

(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100

Disk kullanımı için:

100 - ((node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100)

Alert Kuralı Oluşturma

İzleme sisteminin en kritik parçalarından biri alerting, yani anormallik durumunda bildirim almak. Grafana 8 ve üzeri sürümlerde Unified Alerting özelliği ile alarm yönetimi çok daha güçlü hale geldi.

Örneğin CPU kullanımı yüzde 85’i geçtiğinde e-posta bildirimi gönderecek bir alert oluşturalım:

  1. Sol menüden Alerting bölümüne gidin
  2. Alert rules seçin ve New alert rule tıklayın
  3. Rule adını “High CPU Usage” olarak belirleyin
  4. Query bölümüne şu sorguyu ekleyin:
avg(100 - (rate(node_cpu_seconds_total{mode="idle"}[5m]) * 100)) > 85
  1. Expressions bölümünde threshold değerini 85 olarak ayarlayın
  2. Evaluation behavior kısmında “For” değerini 5m yapın (5 dakika boyunca eşik aşılırsa tetiklensin)
  3. Labels ve Annotations ekleyerek alert mesajını zenginleştirin
  4. Save edin

Alert notification kanalı eklemek için:

  1. Alerting > Contact points bölümüne gidin
  2. Add contact point tıklayın
  3. E-posta, Slack, PagerDuty, Telegram gibi onlarca seçenekten birini seçin
  4. İlgili bilgileri doldurun ve test edin

Nginx ile Reverse Proxy Kurulumu

Production ortamında Grafana’yı doğrudan 3000 portundan yayınlamak yerine Nginx arkasına almak güvenlik ve esneklik açısından çok daha iyi:

sudo apt install -y nginx
sudo nano /etc/nginx/sites-available/grafana

Nginx konfigürasyonu:

server {
    listen 80;
    server_name grafana.sirketim.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 90;
    }
}

Konfigürasyonu etkinleştirip Nginx’i yeniden başlatalım:

sudo ln -s /etc/nginx/sites-available/grafana /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

SSL sertifikası için Let’s Encrypt kullanabilirsiniz:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d grafana.sirketim.com

Sorun Giderme

Grafana kurulumunda karşılaştığınız sorunlar için önce loglara bakın:

sudo journalctl -u grafana-server -f
sudo tail -f /var/log/grafana/grafana.log

Sık karşılaşılan sorunlar ve çözümleri:

  • Prometheus bağlantı hatası: Prometheus’un çalıştığını sudo systemctl status prometheus ile kontrol edin. URL’in doğru olduğundan emin olun.
  • Port 3000 erişilemiyor: sudo ss -tlnp | grep 3000 ile portun dinlenip dinlenmediğini kontrol edin, firewall kurallarını gözden geçirin.
  • Dashboard boş görünüyor: Time range’i kontrol edin, sağ üst köşeden son 1 saat veya 6 saat seçin. Prometheus’un veri topluyor olduğunu http://localhost:9090/targets adresinden doğrulayın.
  • Yavaş yükleme: Grafana veritabanı büyüdükçe yavaşlayabilir. Varsayılan SQLite yerine PostgreSQL kullanmayı düşünün.

Grafana servisini tamamen sıfırlamak gerekirse:

sudo systemctl stop grafana-server
sudo rm -rf /var/lib/grafana/grafana.db
sudo systemctl start grafana-server

Dikkat: Bu işlem tüm dashboard ve ayarlarınızı siler. Production’da yapmadan önce yedek alın.

Grafana’yı Yedekleme

Dashboard ve konfigürasyonlarınızı kaybetmemek için düzenli yedek alın:

sudo systemctl stop grafana-server
sudo cp -r /var/lib/grafana /backup/grafana-$(date +%Y%m%d)
sudo cp -r /etc/grafana /backup/grafana-config-$(date +%Y%m%d)
sudo systemctl start grafana-server

Dashboard’ları JSON olarak dışa aktarmak için Grafana API’yi kullanabilirsiniz:

curl -s http://admin:sifre@localhost:3000/api/dashboards/home | python3 -m json.tool > dashboard-backup.json

Tüm dashboardları listelemek için:

curl -s http://admin:sifre@localhost:3000/api/search?type=dash-db | python3 -m json.tool

Sonuç

Grafana ve Prometheus birlikteliği, sistem izleme dünyasında neredeyse standart haline gelmiş durumda. Bu yazıda Grafana’nın APT deposundan kurulumunu, Prometheus veri kaynağı eklemeyi hem UI hem API hem de provisioning yöntemiyle ele aldık. Temel dashboard oluşturma, alert kurma ve Nginx reverse proxy arkasına alma konularına da değindik.

Burada anlattıklarım sağlam bir başlangıç noktası ama Grafana’nın potansiyeli çok daha derin. Grafana Loki ile log yönetimi, Grafana Tempo ile distributed tracing, çok sunuculu ortamlar için organization ve team yönetimi gibi konular ayrı yazıların konusu. Önce bu temeli sağlamlaştırın, production ortamınızda düzgün çalıştığından emin olun, sonra üzerine inşa edin.

En önemli tavsiyem şu: Dashboardlarınızı provisioning YAML dosyaları olarak versiyon kontrol sisteminde (Git) saklayın. Sunucu çöktüğünde veya sıfırdan kurulum yapmanız gerektiğinde her şeyi dakikalar içinde geri getirmek paha biçilmez bir avantaj sağlar.

Benzer Konular

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir