Zabbix’te Grafik ve Dashboard Oluşturma

Zabbix kurulumunu tamamladınız, host’larınızı eklediniz, triggerlarınız çalışıyor. Ama ekrana baktığınızda ne görüyorsunuz? Ham sayılar, tek tek item grafikler, belki birkaç dağınık widget. İşte tam bu noktada pek çok sistem yöneticisi Zabbix’in görselleştirme tarafını es geçiyor ve bu büyük bir kayıp. İyi yapılandırılmış bir dashboard, sabah işe geldiğinizde sistemin genel sağlığını 30 saniyede görmenizi sağlar. Bugün bunu nasıl düzgün yapacağımızı konuşacağız.

Zabbix Grafik Sistemini Anlamak

Zabbix’te görselleştirme temelde iki katmandan oluşur: grafikler ve dashboard’lar. Grafikler, item verilerini zaman serisi olarak görselleştirir. Dashboard’lar ise bu grafikleri ve diğer widget’ları bir araya getiren kontrol panellerdir.

Zabbix 6.x ile birlikte dashboard sistemi köklü biçimde değişti. Artık kullanıcı başına birden fazla dashboard oluşturabiliyorsunuz ve widget tabanlı yapı çok daha esnek hale geldi. Eski “screens” konsepti tamamen kalktı, yerini modern dashboard sistemi aldı.

Grafik türlerini bilmek önemli çünkü yanlış grafik türü seçimi veriyi yanlış yorumlamanıza yol açabilir:

  • Normal (Line): CPU, bellek, ağ trafiği gibi sürekli değişen metrikler için
  • Stacked: Birden fazla değeri üst üste göstermek için, disk I/O breakdown gibi senaryolarda kullanışlı
  • Pie/Exploded: Oran göstermek için, ama dikkatli kullanın, zaman serisi verisi için uygun değil
  • Bar: Karşılaştırma için, genellikle dashboard widget’larında kullanılır

Custom Grafik Oluşturma

İlk olarak basit ama gerçek hayatta işe yarayan bir grafik oluşturalım. Diyelim ki bir web sunucusunun CPU ve bellek kullanımını aynı grafikte görmek istiyorsunuz.

Monitoring > Hosts > ilgili host > Graphs > Create Graph yolunu takip edin.

Grafik ayarları için önemli parametreler:

  • Name: Açıklayıcı bir isim verin, “web01 – CPU ve Memory Overview” gibi
  • Width/Height: Genellikle 900×200 iyi bir başlangıç noktası
  • Graph type: Normal seçin
  • Show legend: Açık bırakın, birden fazla item varsa şart
  • Show working time: İş saatlerini göstermek için kullanışlı

Items sekmesinde her item için ayrı ayrı ayar yapabilirsiniz. Renk seçimine dikkat edin, kırmızıyı uyarı rengi olarak saklayın, normal operasyonel metrikler için mavi ve yeşil tonlarını kullanın.

Zabbix API üzerinden grafik oluşturmanız gerekiyorsa, özellikle birden fazla host için aynı grafiği kopyalamanız gerektiğinde, aşağıdaki yaklaşımı kullanabilirsiniz:

#!/bin/bash
# Zabbix API ile grafik bilgilerini çeken script
ZABBIX_URL="http://zabbix.sirketiniz.com/zabbix/api_jsonrpc.php"
API_TOKEN="buraya_api_tokeninizi_yazin"

curl -s -X POST 
  -H "Content-Type: application/json" 
  -d '{
    "jsonrpc": "2.0",
    "method": "graph.get",
    "params": {
      "output": "extend",
      "hostids": "10084",
      "sortfield": "name"
    },
    "auth": "'"$API_TOKEN"'",
    "id": 1
  }' 
  $ZABBIX_URL | python3 -m json.tool

Bu script size bir host’taki tüm grafiklerin listesini verir. Toplu grafik yönetiminde başlangıç noktanız bu olmalı.

Template Düzeyinde Grafik Tanımlamak

Burası çoğu kişinin kaçırdığı yer. Her host için ayrı ayrı grafik oluşturmak yerine, template’lere grafik tanımlamak çok daha ölçeklenebilir bir yaklaşım.

Configuration > Templates > Template seçin > Graphs > Create Graph

Template grafiği oluştururken item’ları host’a özgü değil, template’e ait item’lardan seçiyorsunuz. Bu sayede template’i assign ettiğiniz her host otomatik olarak aynı grafik yapısına sahip oluyor.

Gerçek dünya senaryosu: 50 tane Linux sunucunuz var ve hepsinde aynı nginx metriklerini izlemek istiyorsunuz. Template’e bir kez grafik tanımlıyorsunuz, hepsi için otomatik geliyor. Ayrıca bir host’a template’i assign ettiğinizde yeni host da anında bu grafiklerle geliyor.

# Template'leri API ile listelemek için
curl -s -X POST 
  -H "Content-Type: application/json" 
  -d '{
    "jsonrpc": "2.0",
    "method": "template.get",
    "params": {
      "output": ["templateid", "name"],
      "sortfield": "name"
    },
    "auth": "'"$API_TOKEN"'",
    "id": 1
  }' 
  $ZABBIX_URL | python3 -m json.tool

Dashboard Oluşturma ve Widget Yönetimi

Monitoring > Dashboards > Create Dashboard

Dashboard oluştururken ilk yapmanız gereken şey, bu dashboard’un kimin için olduğuna karar vermek. NOC ekibi için mi? Tek bir uygulama için mi? Yöneticilerin bakacağı üst seviye bir özet mi?

Bu sorunun cevabı widget seçimini doğrudan etkiler.

Zabbix 6.x’te kullanabileceğiniz başlıca widget türleri:

  • Graph: Klasik zaman serisi grafik
  • Graph prototype: Template’den gelen dinamik grafikler
  • Clock: Saat, basit ama NOC ekranlarında şart
  • Data overview: Birden fazla host için aynı item’ın değerlerini tablo şeklinde gösterir
  • Host availability: Host’ların up/down durumunu gösterir
  • Problems: Aktif problemleri listeler
  • Top hosts: Belirli bir metriğe göre en yüksek değere sahip host’ları sıralar
  • Gauge: Tek bir değeri gösterge şeklinde gösterir
  • Item value: Tek bir item’ın anlık değerini gösterir
  • Map: Network haritasını gösterir
  • URL: Harici bir URL’i iframe olarak gösterir

NOC Dashboard’u için Pratik Konfigürasyon

Bir NOC ekranı için şu yapıyı öneriyorum:

Üst satır: Clock widget’ı (her datacenter için ayrı timezone ile), yanına Host Availability widget’ı, ardından aktif problem sayısını gösteren bir Problems widget’ı

Orta satır: En kritik sistemlerin CPU ve Memory grafikleri

Alt satır: Network trafiği grafikleri ve disk kullanım durumu

Widget boyutlarını ayarlarken columns ve rows parametrelerine dikkat edin. Dashboard grid sistemine göre çalışır ve her widget’ın grid üzerindeki konumunu ve boyutunu piksel yerine grid hücresi olarak tanımlarsınız.

# Zabbix API ile dashboard oluşturma örneği
curl -s -X POST 
  -H "Content-Type: application/json" 
  -d '{
    "jsonrpc": "2.0",
    "method": "dashboard.create",
    "params": {
      "name": "NOC Ana Ekran",
      "display_period": 30,
      "auto_start": 1,
      "pages": [
        {
          "name": "Genel Durum",
          "widgets": [
            {
              "type": "clock",
              "name": "Saat",
              "x": 0,
              "y": 0,
              "width": 2,
              "height": 2,
              "params": [
                {"name": "time_type", "value": "0"}
              ]
            }
          ]
        }
      ]
    },
    "auth": "'"$API_TOKEN"'",
    "id": 1
  }' 
  $ZABBIX_URL

Dinamik Dashboard’lar ve Template Dashboard Konsepti

Zabbix 6.2 ile gelen Template Dashboard özelliği gerçekten çok işe yarar. Bir template’e dashboard tanımlıyorsunuz ve template’i assign ettiğiniz her host için otomatik olarak o host’a özel bir dashboard oluşuyor.

Bu özelliği kullanmak için:

Configuration > Templates > Template seçin > Dashboards > Create Dashboard

Burada oluşturduğunuz dashboard, template’i kullanan tüm host’lara otomatik uygulanıyor. Graph prototype widget’larıyla birleştirildiğinde çok güçlü bir yapı ortaya çıkıyor.

Örneğin bir PostgreSQL template’iniz varsa, template dashboard’una şunları ekleyebilirsiniz:

  • Queries per second grafiği
  • Active connections gauge
  • Cache hit ratio item value
  • Lock bekleme süresi grafiği
  • Transaction commit/rollback oranları

Bu template’i hangi PostgreSQL sunucusuna assign ederseniz, o sunucu anında hazır bir dashboard’a sahip oluyor.

# Belirli bir template'in dashboard'larını listele
curl -s -X POST 
  -H "Content-Type: application/json" 
  -d '{
    "jsonrpc": "2.0",
    "method": "templatedashboard.get",
    "params": {
      "output": "extend",
      "templateids": ["10322"],
      "selectPages": "extend"
    },
    "auth": "'"$API_TOKEN"'",
    "id": 1
  }' 
  $ZABBIX_URL | python3 -m json.tool

Grafik Performansını Etkileyen Faktörler

Zabbix’te dashboard yavaş yükleniyorsa, genellikle şu faktörler suçludur:

History ve Trend tabloları: Çok fazla item’ı aynı anda grafikte gösterirseniz, veritabanı üzerindeki yük artar. Özellikle uzun zaman aralığı seçtiğinizde (1 ay, 3 ay gibi) Zabbix history yerine trend verisi kullanır ve bu çok daha hızlıdır. Trend verisinin doğru tutulduğundan emin olun.

Item history saklama süresi: Her item için history ve trend retention değerlerini makul tutun. Her şeyi 365 gün history ile saklamaya çalışırsanız veritabanınız şişer ve grafik sorguları yavaşlar.

# Zabbix veritabanında büyük tabloları kontrol et (MySQL/MariaDB için)
mysql -u zabbix -p zabbix -e "
SELECT 
  table_name,
  ROUND(((data_length + index_length) / 1024 / 1024), 2) AS 'Boyut (MB)'
FROM information_schema.tables 
WHERE table_schema = 'zabbix'
ORDER BY (data_length + index_length) DESC
LIMIT 10;
"

Bu sorgu size en büyük tabloları gösterir. History ve trends tabloları büyükse, housekeeper ayarlarınızı gözden geçirin.

# zabbix_server.conf üzerinde housekeeper optimizasyonu
grep -E "HousekeepingFrequency|MaxHousekeeperDelete" /etc/zabbix/zabbix_server.conf

# Önerilen değerler:
# HousekeepingFrequency=1
# MaxHousekeeperDelete=5000

Grafiklerde Threshold ve Baseline Gösterimi

Zabbix grafiklerinde sabit değer çizgileri ekleyebilirsiniz. Bu özelliği kullanarak SLA limitleri veya kapasit planlaması eşiklerini grafiğe işleyebilirsiniz.

Grafik düzenleme ekranında “Add” butonu ile yeni item eklediğinizde, item türü olarak “Simple graph item” yerine sabit değer için aşağıdaki yaklaşımı kullanabilirsiniz:

Örneğin CPU kullanımı için %80 uyarı ve %95 kritik eşiklerini grafik üzerinde görmek istiyorsanız, önce bu eşik değerlerini tutan sabit item’lar oluşturun (type: Zabbix internal, key: zabbix[version] gibi bir item’ı kopyalayıp modifiye edebilirsiniz ya da calculated item olarak sabit değer dönüttürebilirsiniz):

# Calculated item ile sabit eşik değeri oluşturma
# Item key: threshold.cpu.warning
# Formula: 80
# Bu item her zaman 80 döndürür ve grafikte kırmızı çizgi olarak gösterebilirsiniz

Daha pratik bir yaklaşım, grafiği oluşturduktan sonra Y ekseni minimum ve maksimum değerlerini sabitlemek ve görsel olarak referans noktası oluşturmaktır. Grafik ayarlarında “Min” ve “Max” değerlerini “Fixed” olarak ayarlayın.

Dashboard’ları Paylaşmak ve Yetkilendirme

Zabbix 6.x’te dashboard’lar public veya private olarak işaretlenebilir. Public dashboard’lar tüm kullanıcılar tarafından görülebilir, private olanlar sadece sahibi tarafından.

Operasyon ekibi için bir dashboard oluşturdunuz, ama sadece onların görmesini istiyorsunuz. Ya da müşteriye read-only erişim vereceksiniz ve sadece kendi sistemlerini görsün istiyorsunuz.

Bunun için user group bazlı yetkilendirmeyi kullanın:

  • Administration > User Groups > ilgili grup
  • Permissions sekmesinde host group bazlı erişim yetkisi verin
  • Dashboard paylaşımında bu grupları seçin

Müşteri portalı için ayrı bir user group oluşturun, o group’u sadece ilgili host group’larına okuma yetkisiyle sınırlandırın ve dashboard’u bu group ile paylaşın.

Grafik Export ve Raporlama

Haftalık durum raporu göndermeniz mi gerekiyor? Zabbix’in yerleşik scheduled report özelliği (6.x Pro/Enterprise) olmadan da bunu halledebilirsiniz.

#!/bin/bash
# Zabbix grafiğini PNG olarak indirip mail gönderme scripti
ZABBIX_URL="http://zabbix.sirketiniz.com"
GRAPHID="123"
PERIOD="604800"  # 1 hafta, saniye cinsinden
OUTPUT_FILE="/tmp/weekly_report_$(date +%Y%m%d).png"

# Önce session cookie al
SESSION_COOKIE=$(curl -s -c /tmp/zabbix_cookie.txt -b /tmp/zabbix_cookie.txt 
  -d "name=Admin&password=zabbix&autologin=1&enter=Sign+in" 
  "${ZABBIX_URL}/zabbix/index.php" -o /dev/null -w "%{redirect_url}")

# Grafik indir
curl -s -b /tmp/zabbix_cookie.txt 
  "${ZABBIX_URL}/zabbix/chart2.php?graphid=${GRAPHID}&period=${PERIOD}&width=1200&height=400" 
  -o "${OUTPUT_FILE}"

# Mail gönder
echo "Haftalık sistem performans raporu ektedir." | 
  mail -s "Haftalık Zabbix Raporu - $(date +%d.%m.%Y)" 
  -a "${OUTPUT_FILE}" 
  [email protected]

# Temizlik
rm -f /tmp/zabbix_cookie.txt "${OUTPUT_FILE}"

Bu script’i crontab’a ekleyerek her Pazartesi sabahı otomatik rapor gönderebilirsiniz:

# Crontab'a eklemek için
crontab -e
# Her Pazartesi sabahı 08:00'de çalışsın
0 8 * * 1 /opt/scripts/zabbix_weekly_report.sh >> /var/log/zabbix_report.log 2>&1

Gerçek Dünya Senaryosu: E-ticaret Platformu İzleme Dashboard’u

Pratikte nasıl uygulandığını görmek için bir örnek üzerinden gidelim. Bir e-ticaret platformunu yönetiyorsunuz: 3 web sunucusu, 2 uygulama sunucusu, 1 veritabanı sunucusu ve bir cache sunucusu (Redis).

Bu altyapı için şu dashboard yapısını öneriyorum:

Sayfa 1: Genel Sağlık

  • Sol üst: Host availability widget (tüm host’lar)
  • Sağ üst: Aktif problemler listesi (severity: warning ve üstü)
  • Ortada: Her sunucu için CPU kullanım grafiği (mini boyut, 6 grafik yan yana)
  • Altta: Her sunucu için memory kullanımı

Sayfa 2: Uygulama Metrikleri

  • Web sunucularının request per second metrikleri
  • Response time grafikleri
  • Error rate (HTTP 5xx) grafikleri
  • Redis cache hit/miss oranı

Sayfa 3: Veritabanı

  • PostgreSQL queries per second
  • Active connections gauge
  • Slow query sayısı
  • Replication lag (eğer replica varsa)

Bu yapı sayesinde bir sorun anında hangi sayfaya bakacağınızı biliyorsunuz. Alarm mı geldi? Sayfa 1’e bakın. Uygulama yavaşladı mı? Sayfa 2’ye geçin.

# Dashboard sayfaları arasında geçişi hızlandırmak için
# Slideshow modunda açmak için URL parametresi
# http://zabbix.sirketiniz.com/zabbix/zabbix.php?action=dashboard.view&dashboardid=1&slideshow=1
# Bu URL'i NOC ekranlarına kısayol olarak ekleyin

Dashboard Bakımı ve Düzenli Gözden Geçirme

Dashboard oluşturduktan sonra iş bitmez. Her ay en azından şunları kontrol etmenizi öneririm:

  • Artık var olmayan host’ların item’larını gösteren bozuk grafikler var mı?
  • Yeni eklenen kritik host’lar dashboard’a dahil edildi mi?
  • Widget’ların renk kodlaması hala mantıklı mı?
  • Dashboard’u kullanan ekipten geri bildirim aldınız mı?

Özellikle altyapı değişikliklerinden sonra eski grafiklerin “no data” göstermesi çok yaygın bir sorun. Bunu temizlemeden bırakmak, gerçek sorunların gözden kaçmasına yol açar.

# API ile veri gelmeyen item'ları tespit etmek için
curl -s -X POST 
  -H "Content-Type: application/json" 
  -d '{
    "jsonrpc": "2.0",
    "method": "item.get",
    "params": {
      "output": ["itemid", "name", "lastclock"],
      "hostids": "10084",
      "filter": {"state": 1},
      "sortfield": "name"
    },
    "auth": "'"$API_TOKEN"'",
    "id": 1
  }' 
  $ZABBIX_URL | python3 -m json.tool

state: 1 parametresi “not supported” durumundaki item’ları filtreler. Bu item’ları içeren grafikler “no data” gösterecektir.

Sonuç

Zabbix’in grafik ve dashboard sistemi, doğru kullanıldığında ekibinizin reaction time’ını ciddi ölçüde düşürür. Ama çoğu kurulumda “default template grafiklerine bir göz atıyoruz” seviyesinde kalıyor.

En önemli tavsiyem şu: Dashboard’larınızı kullanıcı odaklı tasarlayın. NOC ekibinin gece 2’de alarm geldiğinde ne görmek istediğini düşünün. Geliştirici ekibinin deploy sonrasında neye bakacağını düşünün. Yöneticinin aylık toplantıya girdiğinde hangi rakamları sunması gerektiğini düşünün.

Her kullanıcı grubu için ayrı dashboard. Template bazlı grafikler sayesinde ölçeklenebilir yapı. API ile otomatik raporlama. Ve en önemlisi, düzenli bakım.

Bu üç adımı uygulayan bir Zabbix kurulumu, izleme aracı olmaktan çıkıp gerçek anlamda operasyonel zeka aracına dönüşür. Siz de grafik veya dashboard konusunda takıldığınız bir yer olursa yorumlarda paylaşın.

Bir yanıt yazın

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