Zabbix Agent Kurulumu: Linux Sunucularını İzlemeye Alma

Yeni bir sunucu geldiğinde ilk yaptığım şeylerden biri Zabbix agent’ı kurmaktır. Monitoring olmadan sunucu yönetmek, göz bağlı araba kullanmak gibi bir şey. Disk doldu mu? Load average patladı mı? Servis çöktü mü? Bunları öğrenmek için ya bir şeyler bozulana kadar beklersiniz, ya da izleme koyarsınız. Ben ikincisini tercih ediyorum.

Bu yazıda Zabbix agent kurulumunu, konfigürasyonunu ve gerçek hayatta işe yarayan ince ayarları anlatacağım. Sıfırdan kurulumdan başlayıp aktif/pasif mod farkına, özel item tanımlamaya ve sık karşılaşılan sorunlara kadar gideceğiz.

Zabbix Agent Nedir, Ne Yapar?

Zabbix’in iki temel izleme yöntemi var: agent’lı ve agent’sız. Agent’sız izlemede Zabbix server doğrudan SSH ya da SNMP üzerinden sorgu atar. Bu yöntem işe yarar ama hem daha yavaştır hem de sunucu üzerinde daha az kontrol sağlar. Agent kurduğunuzda ise izlenen sunucu üzerinde çalışan küçük bir daemon var ve bu daemon hem Zabbix server’ın isteklerini karşılıyor hem de kendi başına veri toplayıp gönderiyor.

Zabbix Agent 2, orijinal agent’ın yerini almaya devam ediyor. Go ile yazılmış, plugin mimarisi var ve özellikle veritabanı izlemede çok daha yetenekli. Yeni kurulumlar için Agent 2 kullanmanızı öneririm. Bu yazıda her ikisini de göstereceğim ama ana akış Agent 2 üzerinden gidecek.

Kurulum Öncesi Hazırlık

Önce hangi Zabbix versiyonunu kullandığınızı bilmeniz lazım. Server tarafındaki versiyon ile agent versiyonunun uyumlu olması gerekiyor. Zabbix, eski agent versiyonlarını desteklemeye devam ediyor ama yeni özelliklerden yararlanmak istiyorsanız server ile aynı major versiyon üzerinde olun.

Zabbix’in kendi resmi repository’sini kullanmak en sağlıklı yol. Dağıtım repository’lerindeki paketler çoğunlukla eski kalıyor.

# Zabbix server versiyonunuzu öğrenmek için
zabbix_server --version

# Ya da Zabbix web arayüzünden: Administration > About

Hangi Linux dağıtımı üzerinde çalıştığınızı da netleştirin:

cat /etc/os-release

Ubuntu/Debian Üzerine Kurulum

Ubuntu 22.04 üzerinde Zabbix 7.0 Agent 2 kurulumunu göstereceğim. Diğer Debian tabanlı dağıtımlar için repository URL’ini uygun şekilde değiştirmeniz yeterli.

# Repository paketini indir
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-2+ubuntu22.04_all.deb

# Paketi kur
dpkg -i zabbix-release_7.0-2+ubuntu22.04_all.deb

# Paket listesini güncelle
apt update

# Zabbix Agent 2'yi kur
apt install -y zabbix-agent2 zabbix-agent2-plugin-*

# Servisi başlat ve enable et
systemctl enable zabbix-agent2
systemctl start zabbix-agent2

# Durumu kontrol et
systemctl status zabbix-agent2

Burada zabbix-agent2-plugin-* ile tüm plugin paketlerini kuruyoruz. Bunlar arasında MySQL, PostgreSQL, MongoDB ve benzeri servisler için hazır plugin’ler var. Bunların hepsini kurmak zorunda değilsiniz elbette, ama küçük bir storage maliyeti var ve ileride lazım olduğunda tekrar uğraşmamak için hepsini almayı tercih ediyorum.

RHEL/CentOS/Rocky Linux Üzerine Kurulum

Red Hat tabanlı dağıtımlar için süreç biraz farklı. Rocky Linux 9 örneği:

# Repository'i ekle
rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rhel/9/x86_64/zabbix-release-7.0-5.el9.noarch.rpm

# Önbelleği temizle
dnf clean all

# Agent 2'yi kur
dnf install -y zabbix-agent2 zabbix-agent2-plugin-*

# SELinux varsa ve izin veriyorsanız (veya troubleshoot aşamasında)
# setsebool -P zabbix_can_network on

# Servisi başlat
systemctl enable --now zabbix-agent2

# Durum kontrolü
systemctl status zabbix-agent2

SELinux konusuna ayrıca değineceğim çünkü bu, RHEL tabanlı sistemlerde en sık sorun çıkaran noktalardan biri.

Konfigürasyon: Temel Ayarlar

Kurulum tamamlandıktan sonra asıl iş konfigürasyon dosyasında başlıyor. Agent 2 için konfigürasyon dosyası /etc/zabbix/zabbix_agent2.conf konumunda.

Dosyayı açmadan önce bir yedek alın:

cp /etc/zabbix/zabbix_agent2.conf /etc/zabbix/zabbix_agent2.conf.bak

Şimdi düzenlemeye başlayalım:

nano /etc/zabbix/zabbix_agent2.conf

En kritik parametreler şunlar:

PidFile: Agent’ın PID dosyasının yolu. Genellikle default yeterli.

LogFile: Log dosyasının yolu. /var/log/zabbix/zabbix_agent2.log olarak bırakın.

LogFileSize: Log dosyasının maksimum boyutu MB cinsinden. 100 MB makul bir değer, production’da disk dolmasın diye 50’de bırakabilirsiniz.

Server: Pasif kontroller için Zabbix Server’ın IP adresi. Bu adresten gelen bağlantıları kabul eder. Birden fazla server varsa virgülle ayırın.

ServerActive: Aktif kontroller için Zabbix Server’ın IP adresi. Agent bu adrese bağlantı kurar. Proxy kullanıyorsanız proxy IP’sini yazın.

Hostname: Bu çok önemli. Zabbix web arayüzünde host oluştururken ne yazacaksanız buraya da aynısını yazın. Büyük/küçük harf duyarlı.

HostMetadata: Opsiyonel ama çok kullanışlı. Otomatik registration için grup/template bilgisi burada belirtilir.

Minimal bir konfigürasyon şöyle görünür:

PidFile=/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=50
Server=192.168.1.10
ServerActive=192.168.1.10
Hostname=web-prod-01.sirketim.com
HostMetadata=Linux WebServer
Include=/etc/zabbix/zabbix_agent2.d/*.conf

Include satırı önemli. Özel konfigürasyonlarınızı, UserParameter tanımlarınızı ayrı dosyalarda tutabilirsiniz. Bu, ana konfigürasyon dosyasını temiz tutar ve yönetimi kolaylaştırır.

Değişiklikleri yaptıktan sonra agent’ı yeniden başlatın:

systemctl restart zabbix-agent2
systemctl status zabbix-agent2

Aktif ve Pasif Mod: Farkı Anlamak

Bu kavramı düzgün anlamadan Zabbix’i verimli kullanamıyorsunuz.

Pasif mod: Zabbix server, agent’a “şu veriye ihtiyacım var” diye bağlantı kurar, agent cevap verir. Default port: 10050.

Aktif mod: Agent, Zabbix server’a bağlantı kurar, “benim için ne toplamam gerekiyor?” diye sorar, listeyi alır, verileri toplar ve server’a gönderir. Default port: 10051.

Pasif mod daha anlaşılır görünse de aktif modun ciddi avantajları var. Özellikle çok sayıda sunucu izlerken, server tarafındaki bağlantı yükü pasif modda dramatik şekilde artabiliyor. Aktif modda agent kendi zamanlamasını yönetir ve server’a toplu veri gönderir. Ayrıca firewall açısından bakıldığında, bazı ortamlarda dışarıdan içeriye bağlantı açmak zor olabiliyor, aktif modda agent dışarı bağlantı kurduğu için bu sorun ortadan kalkıyor.

Production ortamlarında genellikle her ikisini de aktif tutuyorum. Log izleme için aktif mod şart, sistem metrikleri için her ikisi de çalışıyor.

Firewall Ayarları

Kurulum sonrası sık yapılan hata: agent kuruldu, konfigürasyon tamam ama Zabbix’ten bağlanamıyoruz. İlk kontrol noktası firewall.

Ubuntu/Debian (UFW):

# Pasif mod için Zabbix server'dan gelen bağlantılara izin ver
ufw allow from 192.168.1.10 to any port 10050

# Durumu kontrol et
ufw status

RHEL/Rocky Linux (firewalld):

# Zabbix servisini ekle
firewall-cmd --permanent --add-service=zabbix-agent
firewall-cmd --reload

# Ya da belirli IP için
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.10" port port="10050" protocol="tcp" accept'
firewall-cmd --reload

# Kontrol
firewall-cmd --list-all

SELinux ile Yaşamak

RHEL tabanlı sistemlerde SELinux, Zabbix’in işini yapmasını engelleyebiliyor. Kapatmak çözüm değil, doğru policy yazmak gerekiyor.

# SELinux durumunu kontrol et
getenforce

# Zabbix agent logunu incele
tail -f /var/log/zabbix/zabbix_agent2.log

# SELinux denial'larını kontrol et
ausearch -c 'zabbix_agent2' --raw | audit2allow -M zabbix-custom
semodule -i zabbix-custom.pp

# Network bağlantısına izin ver
setsebool -P zabbix_can_network on

Eğer özel script’ler çalıştırıyorsanız, o script’lerin context’ini de ayarlamanız gerekebilir:

chcon -t zabbix_script_exec_t /usr/local/bin/check_myapp.sh

UserParameter: Kendi Metriklerinizi Tanımlama

Bu özellik Zabbix’i gerçekten güçlü kılan şey. Standart template’lerin ötesine geçerek uygulamaya özel metrikler toplayabilirsiniz.

Örnek senaryo: Bir e-ticaret uygulamanız var ve sipariş kuyruğunun uzunluğunu izlemek istiyorsunuz.

# /etc/zabbix/zabbix_agent2.d/ecommerce.conf dosyası oluştur
cat > /etc/zabbix/zabbix_agent2.d/ecommerce.conf << 'EOF'
# Bekleyen sipariş sayısı
UserParameter=ecommerce.order.queue,/usr/local/bin/check_order_queue.sh

# Parametre kabul eden örnek - servis adını parametre olarak geç
UserParameter=app.service.count[*],/usr/local/bin/count_processes.sh $1
EOF
# check_order_queue.sh scripti
cat > /usr/local/bin/check_order_queue.sh << 'EOF'
#!/bin/bash
# Redis'ten bekleyen sipariş sayısını çek
redis-cli -h localhost -p 6379 LLEN "orders:pending" 2>/dev/null || echo "0"
EOF

chmod +x /usr/local/bin/check_order_queue.sh

# Script'in zabbix kullanıcısı tarafından çalışabilir olduğunu doğrula
sudo -u zabbix /usr/local/bin/check_order_queue.sh

UserParameter tanımladıktan sonra agent’ı yeniden başlatın ve Zabbix server’dan test edin:

# Zabbix server üzerinde
zabbix_get -s 192.168.1.100 -p 10050 -k "ecommerce.order.queue"

zabbix_get ile test yapmak çok değerli bir alışkanlık. Zabbix arayüzünde item’ı tanımlamadan önce agent’ın doğru değer döndürdüğünü doğrulayın.

Çoklu Sunucuda Otomatik Kurulum

Tek tek sunucuya gidip kurulum yapmak ölçeklenmiyor. 10 sunucu için bile Ansible kullanmaya değer.

# zabbix_agent.yml - Basit Ansible playbook
---
- name: Zabbix Agent 2 Kurulumu
  hosts: linux_servers
  become: yes
  vars:
    zabbix_version: "7.0"
    zabbix_server_ip: "192.168.1.10"

  tasks:
    - name: Ubuntu - Zabbix repository ekle
      apt:
        deb: "https://repo.zabbix.com/zabbix/{{ zabbix_version }}/ubuntu/pool/main/z/zabbix-release/zabbix-release_{{ zabbix_version }}-2+ubuntu22.04_all.deb"
      when: ansible_distribution == "Ubuntu"

    - name: Zabbix Agent 2 kur
      package:
        name:
          - zabbix-agent2
        state: present

    - name: Konfigürasyon dosyasını yönet
      template:
        src: zabbix_agent2.conf.j2
        dest: /etc/zabbix/zabbix_agent2.conf
        owner: root
        group: zabbix
        mode: '0640'
      notify: restart zabbix-agent2

    - name: Servisi başlat ve enable et
      systemd:
        name: zabbix-agent2
        state: started
        enabled: yes

  handlers:
    - name: restart zabbix-agent2
      systemd:
        name: zabbix-agent2
        state: restarted

Bu playbook’un template’i için zabbix_agent2.conf.j2 dosyasında {{ ansible_fqdn }} ile hostname’i otomatik doldurabilirsiniz. 50 sunucuya kurulum yaparken hostname hatası yapmanın önüne bu şekilde geçiyorsunuz.

Sorun Giderme: Sık Karşılaşılan Durumlar

Yıllarca Zabbix kurulumu yaptım, şu sorunlar her yerden çıkıyor:

Agent başlamıyor, “cannot open log file” hatası:

# Log dizininin varlığını ve izinlerini kontrol et
ls -la /var/log/zabbix/
# Yoksa oluştur
mkdir -p /var/log/zabbix
chown zabbix:zabbix /var/log/zabbix

Zabbix server’dan bağlantı gelmiyor:

# Agent'ın 10050 portunu dinlediğini doğrula
ss -tlnp | grep 10050

# Server IP'sinden test bağlantısı (server üzerinde)
telnet 192.168.1.100 10050

# Agent logunu canlı izle
tail -f /var/log/zabbix/zabbix_agent2.log

“Hostname” uyuşmazlığı:

Zabbix arayüzünde host oluştururken yazdığınız hostname ile zabbix_agent2.conf içindeki Hostname değeri birebir aynı olmalı. Büyük/küçük harf farkı bile sorun çıkarıyor. Bu en çok ihmal edilen detay.

# Mevcut hostname değerini kontrol et
grep "^Hostname=" /etc/zabbix/zabbix_agent2.conf

# Sistem hostname'i ile karşılaştır
hostname -f

UserParameter çalışmıyor:

# Script'in zabbix kullanıcısı tarafından çalışabilir olduğunu test et
sudo -u zabbix /usr/local/bin/check_script.sh

# Syntax hatası için
zabbix_agent2 -t "custom.item.key"

Agent 2’de TLS bağlantı sorunu:

Eğer PSK encryption kullanıyorsanız PSK identity ve PSK dosyasının izinleri kritik:

# PSK dosyası sadece zabbix tarafından okunabilmeli
chmod 400 /etc/zabbix/zabbix_agentd.psk
chown zabbix:zabbix /etc/zabbix/zabbix_agentd.psk

Agent Sağlık Kontrolü İçin Basit Script

Ortamda çok sayıda sunucu varken hangileri agent’a sahip, hangileri değil, hangileri eski versiyon, bunları takip etmek için küçük bir kontrol scripti işe yarıyor:

#!/bin/bash
# agent_health_check.sh
# Zabbix agent durumunu kontrol eder ve özetler

ZABBIX_SERVER="192.168.1.10"
HOSTS_FILE="/etc/zabbix/monitored_hosts.txt"

echo "=== Zabbix Agent Durum Kontrolü ==="
echo "Tarih: $(date)"
echo ""

while IFS= read -r host; do
    if timeout 3 bash -c "echo >/dev/tcp/$host/10050" 2>/dev/null; then
        VERSION=$(zabbix_get -s "$host" -p 10050 -k "agent.version" 2>/dev/null)
        echo "[$host] AKTIF - Versiyon: $VERSION"
    else
        echo "[$host] ULAŞILAMADI - Port 10050 kapalı veya agent çalışmıyor"
    fi
done < "$HOSTS_FILE"

Bu scripti cron’a ekleyip haftalık rapor alabilirsiniz. Özellikle otomatik provisioning yapılan ortamlarda yeni açılan sunucuların agent durumunu doğrulamak için kullanışlı.

TLS ile Güvenli Bağlantı

Hassas ortamlarda agent trafiğini şifrelemek gerekiyor. PSK (Pre-Shared Key) yöntemi sertifika yönetimine kıyasla çok daha pratik:

# PSK anahtarı oluştur
openssl rand -hex 32 > /etc/zabbix/zabbix_agent2.psk
chmod 400 /etc/zabbix/zabbix_agent2.psk
chown zabbix:zabbix /etc/zabbix/zabbix_agent2.psk

# Oluşturulan key değerini not al (Zabbix arayüzüne gireceksin)
cat /etc/zabbix/zabbix_agent2.psk

Konfigürasyona şunları ekleyin:

TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=MyServer001
TLSPSKFile=/etc/zabbix/zabbix_agent2.psk

Zabbix arayüzünde host ayarlarında Encryption sekmesinden aynı PSK Identity ve Key değerlerini girmeyi unutmayın.

Sonuç

Zabbix agent kurulumu teknik olarak basit, ama ince noktalara dikkat etmezseniz saatlerinizi harcayabilirsiniz. Hostname uyuşmazlığı, firewall atlanmışlığı, SELinux engeli… bunların hepsi “neden görünmüyor?” sorusunun arkasındaki olağan şüpheliler.

Önerim şu: kurulum sonrası her zaman zabbix_get ile server tarafından agent’ı test edin, agent log dosyasını aktif kurulum sırasında takip edin ve UserParameter’larınızı her zaman önce sudo -u zabbix ile manuel test edin. Bu üç alışkanlık sorun giderme sürenizi ciddi ölçüde azaltır.

Ansible veya benzeri bir konfigürasyon yönetim aracıyla agent dağıtımını otomatize etmek de uzun vadede büyük zaman kazandırıyor. 5 sunucuda elle yapılan bir şey, 50 sunucuda sistematik hale getirilmek zorunda.

Sonraki adım olarak Zabbix template yapılandırması ve özel dashboard oluşturma konularına geçebilirsiniz. Agent doğru kurulduktan sonra asıl değer o tarafta çıkıyor.

Bir yanıt yazın

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