Zabbix Nedir: Kurumsal Sunucu İzleme Sistemine Giriş

On yılı aşkın süredir sunucu yönetimi yapıyorum ve şunu rahatlıkla söyleyebilirim: bir sistemi izlemeden yönetmek, gözleri kapalı araba kullanmak gibidir. Fark etmezsin, ta ki bir şeylere çarpana kadar. İşte bu yüzden monitoring, sysadmin’in en kritik görevlerinden biri. Bu yazıda, kurumsal dünyada adından en çok söz ettiren açık kaynaklı izleme sistemi olan Zabbix’i tüm yönleriyle ele alacağız.

Zabbix Nedir?

Zabbix, 2001 yılında Alexei Vladishev tarafından geliştirilen, açık kaynaklı ve kurumsal sınıf bir ağ ve sistem izleme platformudur. Bugün Zabbix SIA şirketi tarafından aktif olarak geliştirilen platform, GPL v2 lisansı altında tamamen ücretsiz olarak sunulmaktadır. Yani hem lisans maliyeti sıfır, hem de kaynak koduna tam erişim imkanı mevcut.

Zabbix’i rakiplerinden ayıran en temel özellik, ölçeklenebilirliktir. Birkaç sunucuyu izlediğiniz küçük bir ortamdan, binlerce cihazı izlediğiniz büyük bir kurumsal ağa kadar aynı Zabbix kurulumunu kullanabilirsiniz. Nagios ile başlamış, sonra Prometheus’a geçmeyi düşünmüş, bir ara Grafana + InfluxDB kombinasyonuyla uğraşmış biri olarak şunu söyleyeyim: Zabbix, özellikle Windows sunucuların yoğun olduğu karma ortamlar için gerçekten biçilmiş kaftan.

Zabbix Mimarisi: Parçalar Nasıl Bir Araya Geliyor?

Zabbix’i anlamak için önce mimarisini kavramak şart. Birbirine bağlı birkaç ana bileşenden oluşuyor.

Zabbix Server

Her şeyin kalbi. Veri toplama, işleme, tetikleme mantığı ve uyarılar buradan yönetilir. Agent’lardan, SNMP cihazlarından ve diğer kaynaklardan gelen verileri toplar, veritabanına yazar ve tanımladığınız eşiklere göre alert oluşturur.

Zabbix Agent

İzlenecek her sunucuya kurulur. İki modda çalışır:

  • Aktif mod: Agent, belirli aralıklarla Zabbix Server’a bağlanır ve veri gönderir. NAT arkasındaki sunucular için idealdir.
  • Pasif mod: Zabbix Server, agent’a bağlanarak veri çeker. Doğrudan erişilebilir sunucular için standart yöntem.

Zabbix Proxy

Büyük ortamlarda veya coğrafi olarak dağıtık yapılarda hayat kurtarır. Proxy, bir grup sunucunun verilerini toplayarak merkezi Zabbix Server’a iletir. Bu sayede server üzerindeki yük azalır ve network trafiği optimize edilir.

Zabbix Frontend

PHP tabanlı web arayüzü. Tüm konfigürasyon, görselleştirme ve alarm yönetimi buradan yapılır. Apache veya Nginx üzerinde çalışır.

Veritabanı Katmanı

Zabbix, tarihsel verileri ve konfigürasyonu ilişkisel bir veritabanında saklar. Desteklenen seçenekler:

  • MySQL/MariaDB: En yaygın tercih
  • PostgreSQL: Yüksek performans gerektiren ortamlar için
  • Oracle: Kurumsal lisanslı ortamlar için
  • SQLite: Sadece Zabbix Proxy için önerilir

Zabbix Kurulumu: Ubuntu 22.04 Üzerinde Adım Adım

Teoriden pratiğe geçelim. Ubuntu 22.04 üzerine Zabbix 6.4 kurulumunu göstereyim. Üretim ortamı için MySQL kullanacağız.

Önce sistemi güncelleyelim ve Zabbix repository’sini ekleyelim:

apt update && apt upgrade -y

wget https://repo.zabbix.com/zabbix/6.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.4-1+ubuntu22.04_all.deb
dpkg -i zabbix-release_6.4-1+ubuntu22.04_all.deb
apt update

MySQL kurulumu ve veritabanı hazırlığı:

apt install -y mysql-server

mysql -uroot -p <<EOF
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'GucluBirSifre123!';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
SET GLOBAL log_bin_trust_function_creators = 1;
FLUSH PRIVILEGES;
EOF

Zabbix paketlerini kuralım:

apt install -y zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent

# Şemayı import edelim
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix

# log_bin_trust_function_creators'i kapatalım
mysql -uroot -p -e "SET GLOBAL log_bin_trust_function_creators = 0;"

Zabbix Server konfigürasyonunu düzenleyelim:

nano /etc/zabbix/zabbix_server.conf

# Şu satırları bulup düzenleyin:
# DBPassword=GucluBirSifre123!

Servisleri başlatalım:

systemctl restart zabbix-server zabbix-agent apache2
systemctl enable zabbix-server zabbix-agent apache2

Bu adımların ardından http://sunucu-ip/zabbix adresine giderek web kurulum sihirbazını tamamlayabilirsiniz. Varsayılan kullanıcı adı Admin, şifre zabbix‘tir. İlk giriş sonrası bunu değiştirmeyi kesinlikle unutmayın.

Zabbix Agent Kurulumu: İzlenecek Sunuculara

Zabbix Server kuruldu, şimdi izlemek istediğimiz sunuculara agent kuralım. Bir CentOS/RHEL 8 sunucusu için:

# Agent kurulumu (CentOS/RHEL 8)
rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/8/x86_64/zabbix-release-6.4-1.el8.noarch.rpm
dnf install -y zabbix-agent2

# Konfigürasyon
cat >> /etc/zabbix/zabbix_agent2.conf <<EOF
Server=192.168.1.100          # Zabbix Server IP
ServerActive=192.168.1.100    # Aktif kontroller için
Hostname=web-sunucu-01        # Bu sunucunun adı
EOF

systemctl enable --now zabbix-agent2

Burada zabbix-agent2 kullandığımıza dikkat edin. Zabbix Agent 2, Go ile yeniden yazılmış modern versiyondur. Paralel kontroller, daha az kaynak tüketimi ve zengin plugin desteği sunar. Eski zabbix-agent yerine artık bunu tercih etmenizi öneririm.

Temel Kavramlar: Host, Item, Trigger, Action

Zabbix’i verimli kullanmak için bazı kavramları iyi anlamak gerekiyor.

Host ve Host Grupları

Host, izlediğiniz her bir cihazı temsil eder. Sunucu, switch, router, uygulama, URL… hepsi host olarak tanımlanır. Hostları mantıksal gruplara ayırabilirsiniz: “Web Sunucuları”, “Veritabanı Sunucuları”, “Şube Ağ Ekipmanları” gibi.

Item: Veri Toplama Birimi

Item, bir hostta ölçmek istediğiniz tek bir metriği tanımlar. CPU kullanımı, RAM, disk I/O, ağ trafiği, belirli bir servisin durumu… Her item bir anahtarla tanımlanır. Örneğin system.cpu.util[,idle] CPU’nun boşta kalma yüzdesini verir.

Özel bir item nasıl tanımlanır? Diyelim ki bir web servisinin yanıt süresini ölçmek istiyorsunuz:

# Zabbix agent'ın çalıştığı sunucuda UserParameter tanımlayalım
echo 'UserParameter=web.response.time,curl -o /dev/null -s -w "%{time_total}" http://localhost/api/health' >> /etc/zabbix/zabbix_agent2.d/custom.conf

systemctl restart zabbix-agent2

Artık Zabbix’te bu item’ı web.response.time anahtarıyla kullanabilirsiniz.

Trigger: Ne Zaman Alarm Verelim?

Trigger, topladığınız verilere göre alarm koşullarını tanımlar. Örneğin “son 5 dakikada CPU kullanımı %90’ın üzerindeyse PROBLEM durumu oluştur” gibi. Trigger ifadeleri oldukça güçlü bir fonksiyon diliyle yazılır.

Zabbix 6.x’te trigger ifadesi şöyle görünür:

avg(/web-sunucu-01/system.cpu.util[,idle],5m)<10

Bu ifade: “web-sunucu-01 hostunun CPU idle değerinin 5 dakikalık ortalaması %10’un altındaysa” anlamına gelir. Yani CPU %90’ın üzerinde kullanılıyorsa alarm tetiklenir.

Trigger’ların severity seviyeleri vardır:

  • Not classified: Sınıflandırılmamış
  • Information: Bilgi amaçlı
  • Warning: Dikkat gerektiren durum
  • Average: Orta önem
  • High: Yüksek önem
  • Disaster: Kritik, acil müdahale gerekiyor

Action: Alarm Gelince Ne Yapalım?

Action, bir trigger tetiklendiğinde ne olacağını tanımlar. E-posta gönder, SMS at, Slack mesajı yolla, hatta bir script çalıştır… Bunların hepsi Action tanımlamasıyla yapılır.

Telegram bildirimi için örnek bir media type konfigürasyonu:

#!/bin/bash
# /usr/lib/zabbix/alertscripts/telegram.sh

TELEGRAM_BOT_TOKEN="botTOKEN_BURAYA"
CHAT_ID="$1"
SUBJECT="$2"
MESSAGE="$3"

curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" 
  -d "chat_id=${CHAT_ID}" 
  -d "text=*${SUBJECT}*%0A${MESSAGE}" 
  -d "parse_mode=Markdown" > /dev/null

Template Sistemi: Zabbix’in Süper Gücü

Zabbix’in en güçlü özelliklerinden biri template sistemi. Bir template; item’lar, trigger’lar, graph’lar ve dashboard’ları bir araya getirir. Bu template’i istediğiniz sayıda host’a uygulayabilirsiniz.

Örneğin “Linux by Zabbix agent” template’ini bir host’a uyguladığınızda, onlarca hazır metrik ve alarm kuralı otomatik devreye girer. CPU, RAM, disk, ağ, çalışan servisler, sistem yük ortalamaları… hepsi tek tıkla.

Kendi template’inizi oluşturmak için XML/YAML export-import mekanizması kullanılır:

# Mevcut bir template'i export etmek
# Zabbix API kullanarak:

curl -s -X POST http://localhost/zabbix/api_jsonrpc.php 
  -H "Content-Type: application/json" 
  -d '{
    "jsonrpc": "2.0",
    "method": "configuration.export",
    "params": {
      "format": "yaml",
      "options": {
        "templates": ["10001"]
      }
    },
    "auth": "AUTH_TOKEN_BURAYA",
    "id": 1
  }' | python3 -m json.tool

Zabbix API: Otomasyonun Kapısı

Zabbix’in REST benzeri JSON-RPC API’si, monitoring altyapınızı kod olarak yönetmenizi sağlar. Host ekleme, silme, maintenance tanımlama, veri sorgulama… her şey API üzerinden yapılabilir.

Infrastructure as Code yaklaşımıyla Zabbix’i yönetiyorsanız bu API’yi seveceksiniz. Ansible’ın Zabbix modülleri de arka planda bu API’yi kullanır.

Basit bir Python örneği ile API’ye bağlanalım ve host listesini çekelim:

#!/usr/bin/env python3
import requests
import json

ZABBIX_URL = "http://192.168.1.100/zabbix/api_jsonrpc.php"

def zabbix_login(user, password):
    payload = {
        "jsonrpc": "2.0",
        "method": "user.login",
        "params": {"username": user, "password": password},
        "id": 1
    }
    r = requests.post(ZABBIX_URL, json=payload)
    return r.json()["result"]

def get_hosts(auth_token):
    payload = {
        "jsonrpc": "2.0",
        "method": "host.get",
        "params": {
            "output": ["hostid", "host", "status"],
            "selectInterfaces": ["ip"]
        },
        "auth": auth_token,
        "id": 2
    }
    r = requests.post(ZABBIX_URL, json=payload)
    return r.json()["result"]

token = zabbix_login("Admin", "zabbix")
hosts = get_hosts(token)

for host in hosts:
    print(f"Host: {host['host']} | ID: {host['hostid']}")

Bu script’i cron’a ekleyerek Zabbix’teki host envanterinizi düzenli olarak çekip başka sistemlerle senkronize edebilirsiniz.

Gerçek Dünya Senaryosu: E-Ticaret Platformu İzleme

Anlattıklarımızı bir araya getirelim. Diyelim ki orta ölçekli bir e-ticaret şirketi için monitoring altyapısı kuruyorsunuz. Elinizde şunlar var:

  • 5 adet web sunucu (Nginx + PHP-FPM)
  • 2 adet MySQL sunucu (Primary-Replica)
  • 1 adet Redis cache sunucu
  • 1 adet RabbitMQ sunucu
  • F5 load balancer (SNMP ile izlenecek)

Bu yapı için Zabbix’te şöyle bir strateji izlerim:

Host Grupları: “Web Katmanı”, “Veritabanı Katmanı”, “Cache/Queue”, “Ağ Ekipmanları”

Template Atamaları:

  • Web sunuculara: “Linux by Zabbix agent” + “Nginx by Zabbix agent” + özel “PHP-FPM Monitor”
  • MySQL’lere: “Linux by Zabbix agent” + “MySQL by Zabbix agent”
  • Redis’e: “Linux by Zabbix agent” + “Redis by Zabbix agent”
  • F5’e: “F5 BIG-IP by SNMP”

Kritik Trigger’lar:

  • Web sunucu response time 2 saniyeyi geçerse: High
  • MySQL replica lag 30 saniyeyi geçerse: Disaster
  • Redis memory kullanımı %85’i geçerse: Average
  • RabbitMQ queue uzunluğu 10.000’i geçerse: High

Maintenance Window: Her Pazar 02:00-04:00 arası bakım penceresi tanımlanır. Bu sürede alarm üretilmez ama veri toplanmaya devam eder.

Yoğun satış dönemlerinde (kampanya günleri, bayramlar) threshold’ları geçici olarak yükseltmek için API üzerinden otomatik maintenance tanımlayabilirsiniz.

Performans Tuning: Büyük Ortamlar İçin

100+ sunucu izlemeye başladığınızda bazı optimizasyonlar şart olur. Zabbix Server konfigürasyonunda dikkat etmeniz gereken parametreler:

# /etc/zabbix/zabbix_server.conf

# Veri toplama işçi sayısı - CPU core başına 4-5 ayarlayın
StartPollers=40
StartPollersUnreachable=4
StartTrappers=10
StartPingers=5

# History ve trend syncer'lar
StartDBSyncers=8

# Cache boyutları - RAM'e göre artırın
ValueCacheSize=128M
HistoryCacheSize=64M
TrendCacheSize=32M
HistoryIndexCacheSize=32M

# Housekeeping - eski veri temizleme
HousekeepingFrequency=1
MaxHousekeeperDelete=500000

MySQL tarafında da ayarlamalar gerekir:

# /etc/mysql/mysql.conf.d/mysqld.cnf
innodb_buffer_pool_size = 4G       # RAM'in %70'i
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2  # Performans için (veri kaybı riski minimal)
innodb_flush_method = O_DIRECT

Zabbix Alternatiflerine Kısa Bir Bakış

Zabbix’i seçmeden önce alternatifleri de değerlendirmiş olmanız gerekir.

Nagios / Icinga: Eski ve köklü. Plugin ekosistemi zengin ama modern arayüz açısından zayıf. Konfigürasyon dosya bazlı olduğundan büyük ortamlarda yönetimi zahmetli.

Prometheus + Grafana: Micro servis ve Kubernetes ortamları için son derece güçlü. Pull tabanlı mimarisi cloud-native dünyayla mükemmel uyum sağlıyor. Ancak geleneksel altyapı izleme için Zabbix kadar kapsayıcı değil ve öğrenme eğrisi dik.

Datadog / New Relic: SaaS tabanlı, çok yetenekli ama maliyetli. Yüzlerce sunucuda lisans ücreti ciddi rakamlara ulaşıyor. Veri egemenliği konusunda hassas kurumlar için uygun değil.

Checkmk: Zabbix’e en yakın rakip. Auto-discovery özellikleri güçlü. Ücretsiz Raw Edition mevcut ama Enterprise özellikler için ücretli.

Karma ortamlar (Linux + Windows), SNMP cihazları ve sıfır lisans maliyeti öncelikliyse Zabbix’i seçin. Kubernetes-first bir dünyada yaşıyorsanız Prometheus ekosistemi daha doğal hissettiriyor.

Güvenlik: Göz Ardı Edilemeyecek Başlıklar

Zabbix kurulumunu güvenli hale getirmek için mutlaka yapılması gerekenler:

  • Default Admin/zabbix şifresini ilk girişte değiştirin
  • Zabbix web arayüzünü doğrudan internete açmayın, VPN veya reverse proxy arkasına alın
  • TLS/SSL zorunlu hale getirin, hem frontend hem de agent-server iletişimi için
  • Agent konfigürasyonunda Server= parametresini yalnızca Zabbix Server IP’siyle sınırlandırın
  • Firewall kurallarıyla 10050 (agent pasif) ve 10051 (server) portlarını yalnızca gerekli IP’lere açın
  • Zabbix veritabanı kullanıcısına minimum gerekli yetkileri verin
  • Düzenli Zabbix güncellemelerini takip edin, güvenlik açıkları aktif olarak gideriliyor

Sonuç

Zabbix, öğrenme eğrisi biraz dik ama karşılığını fazlasıyla veren bir platform. İlk kurulumdan itibaren template’ler sayesinde hızlıca değer üretmeye başlıyorsunuz. Üstüne bir API var, otomasyon imkanları sonsuz, ölçekleniyor ve en önemlisi lisans maliyeti yok.

Bu yazıda temelleri ele aldık: mimari, kurulum, temel kavramlar, gerçek dünya senaryosu ve performans ayarları. Serinin devam yazılarında Zabbix’te ileri düzey trigger yazımı, distributed monitoring ile Proxy kurulumu, Grafana entegrasyonu ve Ansible ile Zabbix otomasyonu konularını işleyeceğiz.

Eğer hala “monitoring’e neden bu kadar zaman ayırayım?” diye düşünüyorsanız, şunu sorayım: son production olayınızı kullanıcı mı bildirdi, yoksa siz mi tespit ettiniz? Cevabınız “kullanıcı” ise, Zabbix kurma zamanı gelmiş demektir.

Bir yanıt yazın

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