Zabbix Güncelleme ve Sürüm Yükseltme Rehberi

Zabbix güncellemesi. Kim sever? Kimse. Ama yapmak zorunda mısın? Kesinlikle evet. Üretim ortamında çalışan bir izleme sistemini güncellemek, kalp ameliyatı yapar gibi hassas bir iş. Yanlış adım at, bütün altyapının gözü kör olur. Bu yazıda sana gerçekten işe yarayan, production’da defalarca denediğim bir güncelleme sürecini anlatacağım. Hem 5.x’ten 6.x’e geçiş hem de 6.x içi minor güncellemeler için geçerli olacak.

Neden Zabbix Güncellemesi Bu Kadar Kritik

Zabbix’in yeni sürümleri sadece güvenlik yamaları getirmiyor. Performans iyileştirmeleri, yeni metrik toplama yöntemleri, gelişmiş şablon yapıları ve özellikle büyük ortamlarda ciddi fark yaratan poller optimizasyonları geliyor. Zabbix 6.0 LTS’den 6.4’e geçtiğimizde, 2000 host üzerindeki bir müşteri ortamında value cache hit ratio yüzde 68’den yüzde 89’a çıktı. Bu rakam, server yükü açısından ciddi bir fark demek.

Öte yandan, güncel kalmak PostgreSQL veya MySQL’in yeni sürümleriyle uyumluluk açısından da zorunlu. Özellikle PostgreSQL 15+ kullananlar Zabbix 6.2 altında ciddi performans sorunlarıyla karşılaştı. Bu gerçekler, güncellemeyi “yaparsak iyi olur” kategorisinden “yapmak zorundayız” kategorisine taşıyor.

Güncelleme Öncesi Hazırlık

Hazırlık yapmadan güncellemeye başlamak, paraşütsüz atlamak gibi. Şu adımları mutlaka takip et.

Mevcut Ortamı Belgele

# Zabbix server versiyonunu kontrol et
zabbix_server --version

# Zabbix agent versiyonunu kontrol et
zabbix_agentd --version

# Kullanılan veritabanı versiyonunu öğren
psql --version
# veya
mysql --version

# Çalışan Zabbix process'lerini gör
ps aux | grep zabbix

# Zabbix server konfigürasyonunu yedekle
cp /etc/zabbix/zabbix_server.conf /etc/zabbix/zabbix_server.conf.bak.$(date +%Y%m%d)

Bu komutların çıktısını bir yere not et. Güncelleme sonrası karşılaştırma yapman gerekecek.

Veritabanı Yedeği Al

Bu adımı atlarsan, ne söylediğimin önemi yok. PostgreSQL için:

# PostgreSQL tam dump
pg_dump -U zabbix -h localhost zabbix | gzip > /backup/zabbix_db_$(date +%Y%m%d_%H%M).sql.gz

# Dump boyutunu ve bütünlüğünü kontrol et
ls -lh /backup/zabbix_db_*.sql.gz
gzip -t /backup/zabbix_db_$(date +%Y%m%d_%H%M).sql.gz && echo "Yedek OK"

MySQL kullananlar için:

mysqldump --single-transaction --routines --triggers 
  -u zabbix -p zabbix | gzip > /backup/zabbix_db_$(date +%Y%m%d_%H%M).sql.gz

--single-transaction parametresi kritik. Olmadan aldığın yedek, tutarsız olabilir. Üretimde bunu öğrenmek istemezsin.

Zabbix Frontend ve Konfigürasyon Yedeği

# Frontend dosyalarını yedekle
tar -czf /backup/zabbix_web_$(date +%Y%m%d).tar.gz /etc/zabbix/web/ /usr/share/zabbix/

# Tüm Zabbix konfigürasyonlarını yedekle
tar -czf /backup/zabbix_conf_$(date +%Y%m%d).tar.gz /etc/zabbix/

Disk Alanını Kontrol Et

Güncelleme sırasında schema migration çalışacak. Büyük veritabanlarında bu işlem geçici disk alanı tüketebilir:

df -h /var/lib/postgresql/  # veya MySQL data dizini
df -h /backup/

# Zabbix DB boyutunu öğren (PostgreSQL)
psql -U zabbix -c "SELECT pg_size_pretty(pg_database_size('zabbix'));"

Veritabanı boyutunun en az 2 katı kadar boş alan olmasını öneririm. Schema migration sırasında geçici tablolar oluşturuluyor ve bu bazen beklenmedik kadar yer kaplıyor.

Zabbix Servislerini Durdur

Güncelleme başlamadan önce Zabbix’i düzgün şekilde durdurman gerekiyor. Önce server, sonra agent:

# Zabbix server'ı durdur
systemctl stop zabbix-server

# Durduğundan emin ol
systemctl status zabbix-server

# Zabbix agent'ı durdur (server üzerindeyse)
systemctl stop zabbix-agent
# veya agent2 kullanıyorsan
systemctl stop zabbix-agent2

# Web sunucusunu da durdur (opsiyonel ama önerilen)
systemctl stop nginx
# veya
systemctl stop apache2

Zabbix server’ı durdurmadan güncelleme yapma. Özellikle büyük ortamlarda, server çalışırken schema migration başlarsa veri tutarsızlığı yaşanabilir.

Paket Deposunu Güncelle

Zabbix’in kendi paket deposunu kullanıyorsun değil mi? Zaten kullanmalısın. Yeni sürüme geçişte depoyu da güncellemen gerekiyor.

Ubuntu/Debian için Depo Güncellemesi

# Eski Zabbix depo paketini kaldır
apt remove zabbix-release

# Yeni sürüm deposunu ekle (örnek: 6.4 için)
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

# Paket listesini güncelle
apt update

RHEL/CentOS/Rocky Linux için Depo Güncellemesi

# Eski depoyu kaldır
rpm -e zabbix-release

# Yeni depoyu ekle
rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/8/x86_64/zabbix-release-6.4-1.el8.noarch.rpm

# Yum cache'ini temizle
dnf clean all
dnf makecache

Ubuntu/Debian versiyonunu ve RHEL versiyonunu URL’de doğru girmen şart. Yanlış depoyu eklemek beklenmedik bağımlılık sorunlarına yol açıyor.

Paketleri Güncelle

Depo hazır, şimdi asıl güncelleme adımı:

Debian/Ubuntu

# Sadece Zabbix paketlerini güncelle
apt install --only-upgrade zabbix-server-pgsql zabbix-frontend-php zabbix-nginx-conf zabbix-agent2

# Veya MySQL kullananlar için
apt install --only-upgrade zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-agent2

# Güncelleme sonrası versiyon kontrolü
zabbix_server --version

RHEL/Rocky Linux

dnf update zabbix-server-pgsql zabbix-web-pgsql zabbix-nginx-conf zabbix-agent2

# Versiyonu kontrol et
zabbix_server --version

Burada önemli bir nokta var: dnf update veya apt upgrade komutunu tüm sistem için çalıştırmak yerine sadece Zabbix paketlerini hedeflemek daha güvenli. Başka bir paketin güncellenmesi sırasında ortam değişkenlerini bozmak istemezsin.

Veritabanı Schema Migrasyonu

İşte kritik an. Zabbix server ilk başlatıldığında schema migrasyonunu otomatik olarak yapar, ama bu süreçte ne olduğunu takip etmen gerekiyor:

# Önce Zabbix server log'unu izlemeye al
tail -f /var/log/zabbix/zabbix_server.log &

# Sonra server'ı başlat
systemctl start zabbix-server

Log çıktısında şöyle şeyler göreceksin:

current database version (mandatory/optional): 06040000/06040000
required mandatory version: 06040000

Eğer versiyon farkı varsa migration otomatik başlar. Büyük veritabanlarında bu 15-30 dakika sürebilir. Bekle, acele etme. 500GB üzeri Zabbix veritabanlarında migration’ın 2 saate kadar sürdüğünü gördüm.

Migration sırasında log’da hata görürsen:

# Migration hatalarını filtrele
grep -i "error|fail|fatal" /var/log/zabbix/zabbix_server.log

Hata yoksa ve server başarıyla ayağa kalktıysa, bir sonraki adıma geç.

Frontend Güncellemesi

Paket güncellemesi PHP dosyalarını otomatik yeniledi. Ama web frontend konfigürasyonunu kontrol etmek gerek:

# Frontend konfigürasyon dosyasını kontrol et
cat /etc/zabbix/web/zabbix.conf.php

# Nginx konfigürasyonunu kontrol et
nginx -t

# Frontend PHP versiyonunu kontrol et
php --version

# PHP-FPM servisini yeniden başlat
systemctl restart php8.1-fpm  # versiyona göre değişir

Zabbix 6.4 ve üzeri PHP 8.0+ gerektiriyor. PHP 7.4 ile çalıştırmaya çalışırsan frontend’de garip hatalar alırsın. Bunu öğrenmek için bir müşteri sunucusunda 45 dakika harcadım.

# Web sunucusunu başlat
systemctl start nginx
# veya
systemctl start apache2

Agent Güncellemesi

Server güncellemesi tamamlandıktan sonra agent’ları güncellemeye başlayabilirsin. Zabbix backward compatibility konusunda genellikle iyidir, yani 6.0 server ile 5.4 agent çalışabilir. Ama yeni özellikleri kullanmak istiyorsan agent’ları da güncellemen gerek.

Toplu agent güncellemesi için Ansible kullanıyorsan:

# Ansible ile toplu güncelleme
ansible all -i inventory.ini -b -m package 
  -a "name=zabbix-agent2 state=latest update_cache=yes"

# Agent servislerini yeniden başlat
ansible all -i inventory.ini -b -m service 
  -a "name=zabbix-agent2 state=restarted"

Ansible yoksa ve 50+ host’un varsa bu güncellemeyi script ile otomasyona bağlamanı öneririm. Bunun için basit bir örnek:

#!/bin/bash
# agents_update.sh

HOSTS_FILE="/etc/zabbix/agent_hosts.txt"
LOG="/var/log/zabbix_agent_update.log"

while IFS= read -r host; do
    echo "[$(date +%Y%m%d_%H%M%S)] Updating $host..." | tee -a $LOG
    ssh -o StrictHostKeyChecking=no root@$host 
      "apt update && apt install --only-upgrade zabbix-agent2 -y && systemctl restart zabbix-agent2" 
      >> $LOG 2>&1
    if [ $? -eq 0 ]; then
        echo "[$(date +%Y%m%d_%H%M%S)] $host - SUCCESS" | tee -a $LOG
    else
        echo "[$(date +%Y%m%d_%H%M%S)] $host - FAILED" | tee -a $LOG
    fi
done < "$HOSTS_FILE"

Güncelleme Sonrası Doğrulama

Güncelleme bitti, ama iş henüz bitmedi. Sistemi doğrulamanın birkaç yolu var.

Servis Durumlarını Kontrol Et

# Tüm Zabbix servislerinin durumunu kontrol et
systemctl status zabbix-server zabbix-agent2 nginx

# Son 100 log satırını kontrol et
journalctl -u zabbix-server -n 100 --no-pager

# Hata var mı bak
grep -c "error" /var/log/zabbix/zabbix_server.log

Veritabanı Bağlantısını Test Et

# Zabbix'in veritabanına bağlanıp bağlanamadığını test et
zabbix_server -R diaginfo 2>/dev/null | head -20

Metrik Akışını Doğrula

# Item queue durumunu kontrol et (unsupported item sayısına bak)
zabbix_server -R housekeeper_execute

# Zabbix internal item'ları sorgula (PostgreSQL)
psql -U zabbix -c "SELECT key_, lastvalue FROM items WHERE key_ LIKE 'zabbix%' LIMIT 20;"

Web arayüzünden Administration > Queue sayfasını aç. Eğer bekleyen item sayısı normalin çok üzerindeyse bir sorun var demek.

Performans Karşılaştırması

Güncelleme öncesinde not aldığın metrikleri şimdi karşılaştır. Zabbix’in kendi iç metrikleri (zabbix[wcache,values], zabbix[rcache,buffer,pfree] gibi) güncelleme sonrası performansı gösterir.

Sık Karşılaşılan Sorunlar ve Çözümleri

Frontend Boş Sayfa Gösteriyor

PHP OPcache bazen eski dosyaları önbelleğe alıyor:

# PHP-FPM'i yeniden başlat
systemctl restart php8.1-fpm

# OPcache'i temizle (eğer CLI erişimin varsa)
php -r "opcache_reset();"

Schema Migration Takılı Kaldı

Migration başladı ama ilerlemiyorsa:

# Veritabanında uzun süren sorguları kontrol et (PostgreSQL)
psql -U postgres -c "SELECT pid, now() - pg_stat_activity.query_start AS duration, query, state FROM pg_stat_activity WHERE state != 'idle' AND query_start < now() - interval '5 minutes';"

Bu sorgu uzun süren migration sorgularını gösterir. Eğer migration 3 saatten uzun sürüyorsa ve ilerleme yoksa, yedeğe dönmeyi düşün.

Zabbix Server Başlamıyor

# Detaylı hata için
zabbix_server -f -c /etc/zabbix/zabbix_server.conf 2>&1 | head -50

-f parametresi foreground modda çalıştırır ve hataları doğrudan terminale yazar. Servis olarak başlamayan Zabbix’i debug etmenin en hızlı yolu bu.

Major Versiyon Atlamaları Hakkında

5.x’ten direkt 7.x’e geçmek istiyorsan dur. Zabbix, major versiyon atlamayı desteklemiyor. 5.4 -> 6.0 -> 6.2 -> 6.4 gibi adım adım gitmen gerekiyor. Her sürüm için ayrı migration script’leri var ve bunlar sırayla çalışması gerekiyor.

Ama şunu da söyleyeyim: LTS sürümlerine bağlı kalmak bu acıyı azaltıyor. 6.0 LTS kullanıyorsan, 7.0 LTS’e geçmek için sadece bir adım atman yeterli. Non-LTS sürümleri üretim ortamında kullanmaktan kaçın, güncelleme sıklığı ve riski gereksiz yere artıyor.

Rollback Planı

Her güncelleme planının bir rollback bölümü olmalı. Yedeği aldık, şimdi nasıl döneriz?

# Eski pakete dönmek için (Debian/Ubuntu)
apt install zabbix-server-pgsql=6.0.*

# Veritabanını geri yükle
systemctl stop zabbix-server
dropdb -U postgres zabbix
createdb -U postgres -O zabbix zabbix
zcat /backup/zabbix_db_20241201_1200.sql.gz | psql -U zabbix zabbix

# Konfigürasyonu geri yükle
cp /etc/zabbix/zabbix_server.conf.bak.20241201 /etc/zabbix/zabbix_server.conf

# Servisi başlat
systemctl start zabbix-server

Rollback planını test ettin mi hiç? Etmediysen, yedek almanın yarısı kadar bile değerli değil. Ayda bir test ortamında yedek geri yükleme pratiği yapmanı öneririm.

Sonuç

Zabbix güncellemesi korkutucu görünüyor ama sistematik yaklaşınca oldukça yönetilebilir. Özetlersek: önce belgele, sonra yedekle, servisleri durdur, depoyu güncelle, paketleri güncelle, migration’ı izle, doğrula. Bu sırayı bozmak sonradan saatler kaybettiriyor.

LTS sürümlerine bağlı kalmak uzun vadede işini kolaylaştırır. 6.0 LTS hala aktif destek alıyor ve stabil. Yeni özellikler cazip gelse de, üretim ortamında yeni bir major sürümü 3-6 ay bekletip community’nin sorunları bildirmesini beklemek akıllıca.

Son olarak: bu işi bakım penceresi olmadan yapmaya çalışma. Zabbix birkaç dakika izleyemez hale geldiğinde panikleyen bir organizasyonun ortasında sorun çözmeye çalışmak hem seni hem de ekibi bunaltır. Planlı, bakım penceresinde, rollback planı hazır olarak yapılan güncelleme her zaman daha sorunsuz geçiyor.

Bir yanıt yazın

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