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
- Sol menüden dişli çark ikonuna (Configuration) tıklayın
- Data Sources seçeneğini seçin
- Add data source butonuna tıklayın
- Listeden Prometheus seçin
- HTTP bölümünde URL alanına Prometheus adresinizi girin:
http://localhost:9090 - Eğer Prometheus ve Grafana aynı sunucudaysa localhost kullanın
- 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.
- Sol menüden + ikonuna tıklayın
- Import seçeneğini seçin
- Import via grafana.com alanına
1860yazın - Load butonuna tıklayın
- Açılan ekranda veri kaynağı olarak az önce eklediğimiz Prometheus’u seçin
- 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:
- New Dashboard oluşturun
- Add new panel tıklayın
- 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:
- Sol menüden Alerting bölümüne gidin
- Alert rules seçin ve New alert rule tıklayın
- Rule adını “High CPU Usage” olarak belirleyin
- Query bölümüne şu sorguyu ekleyin:
avg(100 - (rate(node_cpu_seconds_total{mode="idle"}[5m]) * 100)) > 85
- Expressions bölümünde threshold değerini 85 olarak ayarlayın
- Evaluation behavior kısmında “For” değerini 5m yapın (5 dakika boyunca eşik aşılırsa tetiklensin)
- Labels ve Annotations ekleyerek alert mesajını zenginleştirin
- Save edin
Alert notification kanalı eklemek için:
- Alerting > Contact points bölümüne gidin
- Add contact point tıklayın
- E-posta, Slack, PagerDuty, Telegram gibi onlarca seçenekten birini seçin
- İ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 prometheusile kontrol edin. URL’in doğru olduğundan emin olun. - Port 3000 erişilemiyor:
sudo ss -tlnp | grep 3000ile 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/targetsadresinden 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.
