Zabbix Proxy ile Uzak Ağları İzleme
Büyük bir e-ticaret firmasında çalışırken karşılaştığım en büyük sorunlardan biri, İstanbul’daki merkez veri merkezinden Ankara, İzmir ve yurt dışındaki şube ofislerini izlemeye çalışmaktı. Her şubenin kendi güvenlik duvarı, kısıtlı bant genişliği ve farklı ağ yapısı vardı. Zabbix Server doğrudan bu şubelere ulaşmaya çalıştığında ya timeout alıyorduk ya da güvenlik duvarları engelliyordu. İşte bu noktada Zabbix Proxy devreye girdi ve hayatımı kurtardı.
Zabbix Proxy Neden Gereklidir?
Zabbix Server, izlediği tüm host’lardan verileri doğrudan toplamak zorunda kalırsa, uzak ağlardaki her cihazla birebir iletişim kurması gerekir. Bu durumda birkaç ciddi problem ortaya çıkar.
Öncelikle ağ bant genişliği sorunu var. Merkez veri merkezinden Ankara’daki 50 sunucuya sürekli Zabbix agent sorgusu atmak, özellikle zayıf WAN bağlantılarında hem pahalı hem de güvenilmez olur. Paketler kaybolur, timeout’lar artar, izleme verileri düzensiz gelir.
Sonra güvenlik duvarı karmaşıklığı geliyor. Her remote ağda Zabbix Server IP adresine izin vermek zorunda kalırsınız. Birden fazla şubeniz varsa bu güvenlik duvarı kuralları zamanla yönetilemez hale gelir.
En önemlisi WAN kesintisi senaryosu: Zabbix Server ile şube arasındaki bağlantı kesilirse, o şubedeki tüm izleme verisi kaybolur. Proxy kullanıldığında ise proxy kendi local tamponunda verileri saklar, bağlantı gelince hepsini gönderir.
Zabbix Proxy’nin temel mimarisi şöyle çalışır: Proxy, uzak ağdaki host’lardan verileri kendisi toplar, kendi yerel veritabanında tamponlar ve belirli aralıklarla Zabbix Server’a gönderir. Server açısından bakıldığında proxy, sanki bir agent gibi davranır ama arkasında yüzlerce host barındırabilir.
Active vs Passive Proxy Farkı
Bu ayrımı doğru anlamak çok önemli çünkü yanlış mod seçimi tüm mimariyi etkiler.
Passive Proxy: Zabbix Server, proxy’ye bağlanır ve veri ister. Server’ın proxy’ye erişebildiği durumlarda kullanılır. Proxy’nin güvenlik duvarı arkasında olmadığı senaryolarda tercih edilir.
Active Proxy: Proxy, Server’a bağlanır ve verileri kendisi gönderir. Proxy güvenlik duvarı arkasındaysa ve dışarıdan erişilemiyorsa bu modu kullanırsınız. Şube ofisleri genellikle bu kategoriye girer.
Gerçek dünyada neredeyse her zaman Active Proxy kullanmanızı tavsiye ederim. Çünkü şubeler genellikle NAT arkasında, güvenlik duvarları kısıtlayıcı şekilde yapılandırılmış olur. Active proxy ile sadece proxy’nin Server’a outbound bağlantı açabilmesi yeterlidir.
Proxy Kurulum Adımları
Proxy’yi kuracağınız makine genellikle küçük bir sanal sunucu olabilir. 2 CPU, 4GB RAM ve 20GB disk çoğu küçük-orta şube için yeterlidir. Büyük ağlar için bu değerleri artırmanız gerekebilir.
Repository Kurulumu
# Zabbix repository ekle (Ubuntu 22.04 örneği)
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
# Proxy ve bağımlılıklarını kur
apt install zabbix-proxy-mysql mysql-server zabbix-sql-scripts -y
Veritabanı Hazırlama
# MySQL'e gir
mysql -u root -p
# Veritabanı ve kullanıcı oluştur
CREATE DATABASE zabbix_proxy CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'zabbix_proxy'@'localhost' IDENTIFIED BY 'G3rcekten_Guclu_Sifre!';
GRANT ALL PRIVILEGES ON zabbix_proxy.* TO 'zabbix_proxy'@'localhost';
FLUSH PRIVILEGES;
EXIT;
# Schema'yı içe aktar
zcat /usr/share/zabbix-sql-scripts/mysql/proxy.sql.gz | mysql --default-character-set=utf8mb4 -u zabbix_proxy -p zabbix_proxy
Proxy Konfigürasyonu
/etc/zabbix/zabbix_proxy.conf dosyasını düzenlemeniz gerekiyor. Bu dosyadaki kritik parametrelere dikkat edin:
# /etc/zabbix/zabbix_proxy.conf
# Server'ın IP veya hostname'i
Server=10.0.1.100
# Bu proxy'nin adı - Zabbix UI'da göründüğü isim
Hostname=proxy-ankara-01
# Active mod için bu satır yeterli
# Passive mod için: ProxyMode=1
# Veritabanı bağlantısı
DBHost=localhost
DBName=zabbix_proxy
DBUser=zabbix_proxy
DBPassword=G3rcekten_Guclu_Sifre!
# Proxy'nin verileri ne kadar süre tamponlayacağı (saniye)
# WAN kesintisi 1 saate kadar olabilecekse 3600 yap
ProxyLocalBuffer=0
ProxyOfflineBuffer=1
# Log ayarları
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=100
# Performans parametreleri
StartPollers=10
StartPollersUnreachable=2
StartTrappers=5
StartPingers=3
CacheSize=32M
Servisi başlatın:
systemctl enable zabbix-proxy
systemctl start zabbix-proxy
systemctl status zabbix-proxy
Zabbix Server Tarafında Proxy Tanımlama
Proxy’yi kurmak yeterli değil, Server’a da tanıtmanız gerekiyor.
Zabbix Web UI’dan: Administration > Proxies > Create Proxy
Burada dikkat edilecek noktalar:
- Proxy name:
zabbix_proxy.confdosyasındakiHostnameparametresiyle birebir aynı olmalı. Tek harf farkı bile bağlantıyı koparır. - Proxy mode: Active veya Passive seçin
- Encryption: Eğer proxy ile server arasında PSK şifreleme kullanacaksanız burada tanımlayın (kesinlikle öneriyorum)
PSK Şifreleme Kurulumu
WAN üzerinden gelen verileri şifrelemek için PSK kullanmak iyi bir pratiktir:
# Proxy sunucusunda PSK anahtarı oluştur
openssl rand -hex 32 > /etc/zabbix/zabbix_proxy.psk
chmod 640 /etc/zabbix/zabbix_proxy.psk
chown root:zabbix /etc/zabbix/zabbix_proxy.psk
# Oluşturulan anahtarı görüntüle (UI'ya gireceksiniz)
cat /etc/zabbix/zabbix_proxy.psk
# zabbix_proxy.conf'a şifreleme ayarları ekle
TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=ProxyAnkara01
TLSPSKFile=/etc/zabbix/zabbix_proxy.psk
UI’da proxy tanımlarken “Encryption” sekmesinde PSK Identity ve PSK değerlerini girmeniz gerekiyor.
Host’ları Proxy’ye Atama
Proxy kurulup çalışır hale geldikten sonra, izlemek istediğiniz host’ları bu proxy üzerinden izlenecek şekilde ayarlamanız gerekiyor.
Zabbix UI’da ilgili host’un konfigürasyonuna gidin: Configuration > Hosts > [Host Seç] > Host sekmesi
Burada “Monitored by proxy” alanında az önce oluşturduğunuz proxy’yi seçin.
Toplu olarak yapmak için CLI’dan da yapabilirsiniz. Çok sayıda host varsa bu hayat kurtarır:
# Zabbix API ile toplu proxy ataması
curl -s -X POST -H 'Content-Type: application/json'
-d '{
"jsonrpc": "2.0",
"method": "host.massupdate",
"params": {
"hosts": [
{"hostid": "10234"},
{"hostid": "10235"},
{"hostid": "10236"}
],
"proxy_hostid": "10300"
},
"auth": "API_TOKEN_BURAYA",
"id": 1
}'
http://zabbix-server/api_jsonrpc.php
Host ID’leri ve proxy ID’yi öğrenmek için önce API’dan listeleyebilirsiniz.
Gerçek Dünya Senaryosu: Çok Şubeli Firma Yapısı
Bir lojistik firmasında uyguladığım yapıyı paylaşayım. 7 farklı şehirde depo ve ofis vardı, toplam 300+ cihaz izleniyordu.
Mimari şöyleydi:
- İstanbul merkez: Zabbix Server + Zabbix DB (ayrı sunucularda)
- Her şehirde 1 adet Zabbix Proxy (küçük VM, 2 CPU / 4GB RAM)
- Proxy’ler Active modda, PSK şifreli
- Her proxy yerel veritabanını MySQL ile yönetiyor
- Proxy’ler arası hiçbir bağlantı yok, hepsi sadece merkeze rapor ediyor
Bu yapının en büyük avantajı şuydu: Ankara deposundaki internet bağlantısı saatlerce kesildiğinde, local proxy tüm verileri tamponladı. Bağlantı gelince 2 saatlik veri merkeze aktı ve hiçbir monitoring boşluğu oluşmadı. Eski yapıda (direkt Zabbix Server) bu sürede tüm veriler kaybolurdu.
Proxy Performans Takibi
Proxy’lerin kendisini de izlemeniz gerekiyor. Zabbix’in “Zabbix proxy health” template’i bunu yapıyor ama bazı özel metrikler eklemek istedim:
# Proxy tampon doluluk oranını kontrol et
# Bu scripti proxy üzerinde çalıştırın
zabbix_proxy -R diaginfo 2>/dev/null | grep -E "proxy buffer|performance"
# Proxy log dosyasında hata var mı?
grep -E "ERROR|WARNING" /var/log/zabbix/zabbix_proxy.log | tail -50
# Proxy'nin server ile iletişimini test et
zabbix_get -s zabbix-server-ip -p 10051 -k "zabbix[proxy,proxy-ankara-01,lastaccess]"
Sorun Giderme
Proxy kurulumunda en çok karşılaştığım sorunları ve çözümlerini yazmadan geçemezdim.
Proxy Server’a Bağlanamıyor
# Proxy sunucusundan server'a erişim testi
telnet 10.0.1.100 10051
# Veya nc ile
nc -zv 10.0.1.100 10051
# Güvenlik duvarı kuralı ekle (proxy sunucusunda)
ufw allow out to 10.0.1.100 port 10051
# Server tarafında da proxy IP'sine izin ver
ufw allow from PROXY_IP to any port 10051
Hostname Uyuşmazlığı
En sık yapılan hata bu. Proxy log dosyasında şöyle bir hata görürseniz:
proxy "proxy-ankara-01" attempted to connect with
unknown hostname "Proxy-Ankara-01"
Büyük/küçük harf dahil her karakterin zabbix_proxy.conf dosyasındaki Hostname parametresiyle UI’daki proxy ismi aynı olmalı.
# Mevcut hostname'i kontrol et
grep "^Hostname=" /etc/zabbix/zabbix_proxy.conf
# Proxy servisini yeniden başlat
systemctl restart zabbix-proxy
Veritabanı Bağlantı Sorunları
# Proxy'nin DB'ye bağlanıp bağlanamadığını test et
mysql -u zabbix_proxy -p zabbix_proxy -e "SELECT COUNT(*) FROM hosts;"
# Proxy log'unda DB hataları
tail -100 /var/log/zabbix/zabbix_proxy.log | grep -i "database|mysql|connect"
# Eğer "too many connections" hatası alıyorsanız
mysql -u root -p -e "SHOW VARIABLES LIKE 'max_connections';"
# Artırmak için my.cnf'e ekle: max_connections = 200
Proxy Konfigürasyonunu Otomatize Etmek
Birden fazla proxy yönetiyorsanız manuel konfigurasyon hata riskini artırır. Ansible ile bu süreci otomatize etmek çok mantıklı:
# zabbix_proxy_deploy.yml (basitleştirilmiş örnek)
---
- name: Zabbix Proxy Kurulum
hosts: zabbix_proxies
become: yes
vars:
zabbix_server_ip: "10.0.1.100"
db_password: "{{ vault_proxy_db_password }}"
tasks:
- name: Zabbix repo ekle
apt:
deb: "https://repo.zabbix.com/zabbix/6.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.4-1+ubuntu22.04_all.deb"
- name: Proxy paketini kur
apt:
name:
- zabbix-proxy-mysql
- mysql-server
- zabbix-sql-scripts
update_cache: yes
- name: Proxy konfigürasyonunu yükle
template:
src: zabbix_proxy.conf.j2
dest: /etc/zabbix/zabbix_proxy.conf
owner: root
group: zabbix
mode: '0640'
notify: restart zabbix-proxy
handlers:
- name: restart zabbix-proxy
systemd:
name: zabbix-proxy
state: restarted
Bu şekilde tüm proxy’lerinizi tek bir Ansible playbook ile tutarlı şekilde yönetebilirsiniz. Her proxy’ye özel Hostname ve IP gibi değerleri host_vars dizininden çekebilirsiniz.
Proxy Monitoring ve Kapasite Planlaması
Proxy’lerin ne kadar yük taşıdığını izlemek, kapasite planlaması açısından kritik. Zabbix’te yerleşik olarak gelen “Zabbix proxy health” şablonu şunları izler:
- Proxy buffer kullanım oranı
- Saniyede işlenen değer sayısı (NVPS – New Values Per Second)
- Proxy’nin son server teması zamanı
- İşlem süresi metrikleri
Eğer bir proxy üzerinde NVPS değeri sürekli artıyorsa ve CPU kullanımı da yükseliyorsa, o proxy’yi iki ayrı proxy’ye bölmeyi düşünebilirsiniz. Genellikle bir proxy için pratik üst sınır 500-1000 host civarında, ama bu değer host başına kaç item izlendiğine göre değişir.
# Proxy'deki item sayısını hızlıca öğrenmek için
mysql -u zabbix_proxy -p zabbix_proxy -e "
SELECT COUNT(*) as aktif_item_sayisi
FROM items
WHERE status = 0;"
# Saniyede kaç değer işlendiğini log'dan takip et
grep "processed" /var/log/zabbix/zabbix_proxy.log | tail -20
Proxy Güncellemesi
Bu konuya özellikle değinmek istiyorum çünkü yanlış yapılınca ciddi sorunlar çıkabiliyor.
Proxy sürümü, Server sürümüyle aynı major versiyon üzerinde olmalı. Zabbix 6.4 Server kullanıyorsanız, proxy’leriniz de 6.x serisinde olmalı. Farklı minor versiyonlar genellikle sorunsuz çalışır ama major versiyon farkı veri kaybına veya bağlantı sorunlarına yol açabilir.
Güncelleme sırasında proxy geçici olarak offline olacağından, offline buffer süresini geçici olarak artırın:
# Güncelleme öncesi offline buffer'ı artır
# zabbix_proxy.conf içinde
ProxyOfflineBuffer=4 # 4 saat tamponlama
systemctl restart zabbix-proxy
# Güncelleme yap
apt update && apt upgrade zabbix-proxy-mysql -y
# Güncelleme sonrası servisi başlat
systemctl start zabbix-proxy
# Her şey yolundaysa buffer'ı eski değerine döndür
Sonuç
Zabbix Proxy, sadece teknik bir bileşen değil; dağıtık altyapıların izlenmesinde mimarinin temel taşlarından biri. Doğru kurulup yapılandırıldığında WAN kesintileri, güvenlik duvarı kısıtlamaları ve bant genişliği sorunlarını bir anda çözüyor.
Uygulamada öğrendiğim en kritik dersler: Active proxy’yi neredeyse her zaman tercih edin, PSK şifrelemeyi ihmal etmeyin, hostname eşleşmesine özen gösterin ve proxy’lerin kendisini de mutlaka izleyin. Offline buffer süresini ağ güvenilirliğine göre ayarlayın; zayıf WAN bağlantılarında bu değeri yüksek tutmak veri kaybını önler.
Çok şubeli veya çok lokasyonlu herhangi bir yapıyı Zabbix ile izliyorsanız ve henüz proxy kullanmıyorsanız, bu geçişi bir hafta sonu planlamak için iyi bir neden var önünüzde. Geçtiğinizde ne kadar basit ve güvenilir olduğunu görünce eskiye dönmek istemeyeceksiniz.
