Zabbix SNMP ile Ağ Cihazlarını İzleme
Ağ cihazlarını izlemek, sistem yöneticiliğinin en can sıkıcı ama bir o kadar da kritik parçalarından biri. Switch’in bir portu silently drop yapmaya başladığında, router’ın CPU’su sessizce %95’e çıktığında ya da o güzel firewall’un belleği dolmaya başladığında, bunu öğrenmek için genellikle ya bir kullanıcı şikayeti beklersiniz ya da şans eseri dashboard’a bakarsınız. SNMP ile Zabbix entegrasyonu bu sorunu sistematik olarak çözer ve bu yazıda gerçek ortamlarda kullandığım yapılandırmaları paylaşacağım.
SNMP Nedir, Neden Zabbix ile Kullanırız
SNMP (Simple Network Management Protocol), ağ cihazlarının yönetim verilerini standart bir şekilde sunması için tasarlanmış bir protokol. 1988’den beri hayatımızda ve “simple” kelimesi biraz yanıltıcı olsa da, doğru kurulunca inanılmaz güçlü bir izleme altyapısı oluşturabilirsiniz.
Zabbix, SNMP’yi birkaç farklı şekilde kullanır:
- SNMP polling: Zabbix, belirli aralıklarla cihaza gidip veri çeker
- SNMP traps: Cihaz, bir olay olduğunda Zabbix’e bildirim gönderir
- SNMP walk: Cihazın tüm MIB ağacını taramak için kullanılır
Ben genellikle polling ve traps’i birlikte kullanıyorum. Polling size sürekli veri akışı sağlar, traps ise kritik anlarda anında uyarı verir.
Ortam Hazırlığı
Önce Zabbix sunucusunda gerekli paketleri kuralım. Ubuntu/Debian üzerinde çalışıyorsanız:
apt-get install snmp snmp-mibs-downloader snmpd
CentOS/RHEL için:
yum install net-snmp net-snmp-utils
MIB dosyalarını indirin ve yapılandırın:
download-mibs
# /etc/snmp/snmp.conf dosyasını düzenleyin
sed -i 's/^mibs :$/# mibs :/' /etc/snmp/snmp.conf
echo "mibs +ALL" >> /etc/snmp/snmp.conf
Şimdi ağ cihazına bağlantıyı test edelim. Bir Cisco switch’e karşı temel bir SNMP walk:
snmpwalk -v2c -c public 192.168.1.1 system
snmpwalk -v2c -c public 192.168.1.1 interfaces
# Interface listesini görmek için:
snmpwalk -v2c -c public 192.168.1.1 ifDescr
Bu komut size cihazın tüm interface isimlerini döner. ifDescr OID’si .1.3.6.1.2.1.2.2.1.2 adresine karşılık gelir. Interface’lerin traffic verisini almak için ise ifInOctets ve ifOutOctets kullanılır.
SNMP v3 Yapılandırması
Üretim ortamında asla SNMPv2c kullanmayın. Community string düz metin gider ve bu ciddi bir güvenlik açığıdır. SNMPv3 ile authentication ve privacy sağlayabilirsiniz.
Cisco switch üzerinde SNMPv3 kullanıcısı tanımlamak:
snmp-server group MONITORING v3 priv
snmp-server user zabbix MONITORING v3 auth sha SifrenizBuraya priv aes 128 GizliSifreniniz
snmp-server view READALL iso included
snmp-server group MONITORING v3 priv read READALL
Juniper üzerinde benzer yapılandırma:
set snmp v3 usm local-engine user zabbix authentication-sha authentication-password "SifrenizBuraya"
set snmp v3 usm local-engine user zabbix privacy-aes128 privacy-password "GizliSifreniniz"
set snmp v3 vacm security-to-group security-model usm security-name zabbix group MONITORING
set snmp v3 vacm access group MONITORING default-context-prefix security-model any security-level authentication read-view all
SNMPv3 bağlantısını test edelim:
snmpwalk -v3 -l authPriv -u zabbix -a SHA -A "SifrenizBuraya"
-x AES -X "GizliSifreniniz" 192.168.1.1 system
# Daha detaylı test için:
snmpget -v3 -l authPriv -u zabbix -a SHA -A "SifrenizBuraya"
-x AES -X "GizliSifreniniz" 192.168.1.1 sysDescr.0
Zabbix’te SNMP Host Tanımlama
Zabbix web arayüzünden host eklerken dikkat etmeniz gereken noktalar var. Configuration > Hosts > Create Host yolunu izleyin.
Host oluştururken SNMP interfaces bölümünde cihazın IP adresini ve portu (genellikle 161/UDP) girin. Interface type olarak SNMP seçin.
Ardından Macros sekmesinde SNMPv3 için şu macro’ları tanımlayın:
- {$SNMP_COMMUNITY}: read-only community string (v2c için)
- {$SNMPV3_USER}: zabbix
- {$SNMPV3_AUTHPASSPHRASE}: Authentication şifreniz
- {$SNMPV3_PRIVPASSPHRASE}: Privacy şifreniz
Bu macro’ları host düzeyinde tanımlamak, template’lerden gelen item’ların doğru çalışmasını sağlar. Zabbix’in built-in template’leri bu macro isimlerini kullanır, bu yüzden isimlendirmeye dikkat edin.
Hazır Template Kullanmak
Zabbix’in Templates > Network devices kategorisinde Cisco, Juniper, HP, Huawei gibi üreticilere özel template’ler bulunur. Ancak bu template’ler bazen fazla geniş kapsamlı olabiliyor, her ortama uymayabiliyor.
Ben genellikle hazır template’i import ettikten sonra ihtiyaç duymadığım item’ları disable ediyorum. Örneğin 48 portlu bir access switch’te her portun traffic’ini izlemek yerine sadece uplink portları ve trunk portlarına odaklanmak daha mantıklı.
Resmi Zabbix template’lerini GitHub’dan çekerek import edebilirsiniz:
# Zabbix 6.x template'lerini indirin
wget https://raw.githubusercontent.com/zabbix/zabbix/6.0/templates/net/cisco/cisco_catalyst_snmpv2/template_net_cisco_catalyst_snmpv2.yaml
# Zabbix web arayüzünden:
# Configuration > Templates > Import > Dosyayı seçin
Özel SNMP Item Oluşturmak
Hazır template’lerde olmayan bir veriyi izlemek istediğinizde kendi item’ınızı yazmanız gerekiyor. Bu noktada MIB browser veya snmpwalk çıktısı işe yarıyor.
Bir Cisco router’ın CPU kullanımını çekelim:
# Cisco IOS CPU OID
snmpget -v2c -c public 192.168.1.1 .1.3.6.1.4.1.9.9.109.1.1.1.1.3.1
# Ya da isimle:
snmpget -v2c -c public 192.168.1.1 CISCO-PROCESS-MIB::cpmCPUTotal5minRev.1
Zabbix’te bu item’ı tanımlamak için:
- Type: SNMP agent
- OID:
.1.3.6.1.4.1.9.9.109.1.1.1.1.3.1 - Key:
cisco.cpu.5min - Type of information: Numeric (float)
- Units:
% - Update interval:
1m
Firewall’lar için özellikle bağlantı tablosu doluluk oranını izlemek kritik. Bir Fortinet FortiGate için:
# FortiGate bağlantı sayısı
snmpwalk -v2c -c public 192.168.100.1 enterprises.12356.101.4.1
# Current session count:
snmpget -v2c -c public 192.168.100.1 .1.3.6.1.4.1.12356.101.4.1.8.0
SNMP Trap Alma Yapılandırması
SNMP polling harika ama bazı olaylar için trap’ler çok daha anlık uyarı sağlar. Örneğin bir switch’te port up/down olduğunda, o 1 dakikalık polling aralığını beklemek yerine anında bilgi almak istersiniz.
Zabbix’te SNMP trap alabilmek için zabbix_trap_receiver.pl veya snmptrapd kombinasyonu kullanılır. Modern kurulumda snmptrapd üzerinden çalışalım:
# snmptrapd yapılandırması
cat > /etc/snmp/snmptrapd.conf << 'EOF'
authCommunity log,execute,net public
traphandle default /usr/lib/zabbix/externalscripts/zabbix_trap_receiver.pl
disableAuthorization yes
EOF
Zabbix trap receiver script’ini yapılandırın:
# /etc/zabbix/zabbix_server.conf içinde trap dosyasını tanımlayın
grep -n "SNMPTrapperFile" /etc/zabbix/zabbix_server.conf
# Şu satır aktif olmalı:
# SNMPTrapperFile=/tmp/zabbix_traps.tmp
# StartSNMPTrapper=1 satırını da aktif edin
sed -i 's/# StartSNMPTrapper=0/StartSNMPTrapper=1/' /etc/zabbix/zabbix_server.conf
snmptrapd servisini başlatın:
systemctl enable snmptrapd
systemctl start snmptrapd
# Test için bir trap gönderin:
snmptrap -v2c -c public 127.0.0.1 '' coldStart
# Zabbix loglarında görünüp görünmediğini kontrol edin:
tail -f /var/log/zabbix/zabbix_server.log | grep -i trap
Büyük Ağlarda Performans İpuçları
100’den fazla ağ cihazını SNMP ile izlemeye başladığınızda bazı performans sorunlarıyla karşılaşabilirsiniz. Deneyimlediğim birkaç kritik ayar:
zabbix_server.conf içinde SNMP poller sayısını artırın:
# Varsayılan genellikle 1'dir, büyük ortamlar için artırın
StartSNMPPollers=10
# Unreachable host timeout'unu düzenleyin
UnreachableDelay=15
UnreachablePeriod=45
# Cache boyutlarını artırın
ValueCacheSize=32M
HistoryCacheSize=64M
SNMP bulk request kullanmak da önemli. Interface tablosunu çekerken tek tek OID sorgulamak yerine SNMP bulk walk çok daha verimli. Zabbix bunu otomatik yapsa da bazı eski cihazlar bulk request’e düzgün cevap vermiyor. Bu cihazlar için item yapılandırmasında SNMP OID olarak şu syntax’ı kullanın:
# Normal OID yerine walk syntaxı:
walk[ifOperStatus]
# Ya da spesifik bir subtree için:
walk[.1.3.6.1.2.1.2.2.1]
Discovery ile Interface Otomatik Keşfi
48 portlu bir switch’in her interface’ini elle eklemek kimsenin işi değil. Zabbix’in Low-level Discovery (LLD) özelliği bu sorunu otomatik çözer.
SNMP discovery rule için OID yapılandırması:
# Interface discovery OID
{#IFDESCR} -> ifDescr -> .1.3.6.1.2.1.2.2.1.2
{#IFINDEX} -> ifIndex -> .1.3.6.1.2.1.2.2.1.1
{#IFALIAS} -> ifAlias -> .1.3.6.1.2.1.31.1.1.1.18
{#IFTYPE} -> ifType -> .1.3.6.1.2.1.2.2.1.3
Discovery rule’da bu OID’yi kullanın: discovery[{#IFDESCR},ifDescr,{#IFINDEX},ifIndex]
Ardından item prototype olarak şunları ekleyin:
# Interface operational status
Key: net.if.status[{#IFDESCR}]
OID: ifOperStatus.{#SNMPINDEX}
# Interface traffic in
Key: net.if.in[{#IFDESCR}]
OID: ifInOctets.{#SNMPINDEX}
# Interface traffic out
Key: net.if.out[{#IFDESCR}]
OID: ifOutOctets.{#SNMPINDEX}
Filter ekleyerek sadece ilgilendiğiniz interface’leri discover ettirebilirsiniz. Örneğin sadece GigabitEthernet ile başlayanlar:
- {#IFDESCR} matches
^GigabitEthernet
Ya da sadece ethernetCsmacd (tip 6) olan interface’ler için:
- {#IFTYPE} matches
^6$
Trigger Örnekleri
Item’ları topladıktan sonra anlamlı trigger’lar yazmak kritik. Birkaç pratik örnek:
Interface down trigger’ı:
# Son 3 kontrol boyunca interface down ise uyar
{HOSTNAME:net.if.status[{#IFDESCR}].max(#3)}=2 and
{HOSTNAME:net.if.status[{#IFDESCR}].last()}=2
Yüksek error rate trigger’ı:
# 5 dakikada gelen error'ların artış oranı
{HOSTNAME:net.if.errors.in[{#IFDESCR}].timeleft(#5,0)}<300
CPU yüksek kullanım:
{HOSTNAME:cisco.cpu.5min.avg(5m)}>80
BGP peer down için trap tabanlı trigger:
{HOSTNAME:snmptrap[bgpBackwardTransition].nodata(2m)}=0
Gerçek Dünya Senaryosu: Core Switch İzleme
Bir müşteri ortamında 3 katlı bir kampüs ağı vardı. Core’da iki Cisco Catalyst 9300, distribution’da HP Aruba’lar, access’te karışık vendor’lar. Bu ortamda izleme yapılandırmasını nasıl oluşturduk:
Önce her cihaz için SNMPv3 kullanıcısı oluşturduk. Sonra Zabbix’te vendor’a göre host group’lar oluşturduk: Network/Cisco, Network/HP, Network/Mikrotik gibi.
Core switch’lere Cisco IOS SNMP template’i uyguladık ancak access layer interface’lerini discovery’den çıkardık. Sadece inter-switch link’ler ve server uplink’ler izlendi. Bu sayede 1000 gereksiz item yerine 150 anlamlı item toplandı.
# Bu test scriptiyle periyodik olarak SNMP erişimini doğrulayabiliriz
#!/bin/bash
HOSTS=("192.168.1.1" "192.168.1.2" "192.168.2.1")
for HOST in "${HOSTS[@]}"; do
RESULT=$(snmpget -v3 -l authPriv -u zabbix
-a SHA -A "AuthPass123"
-x AES -X "PrivPass123"
-t 3 -r 1 "$HOST" sysUpTime.0 2>&1)
if echo "$RESULT" | grep -q "Timeout"; then
echo "SNMP UNREACHABLE: $HOST"
else
echo "OK: $HOST - $RESULT"
fi
done
Traps için ayrı bir kuralımız vardı: Link down trap geldiğinde ve 2 dakika sonra hala down ise, otomatik olarak ilgili kişiye SMS gönderiliyordu. Zabbix’in media type yapılandırmasıyla bu entegrasyon oldukça temizdir.
MIB Yönetimi
SNMP izlemede en çok zaman kaybedilen yer MIB dosyaları. Vendor’ın web sitesinden indirdiğiniz MIB dosyasını doğru yere koymadan OID isimleri çözümlenemez.
# MIB dosyalarını doğru dizine koyun
cp CISCO-PROCESS-MIB.my /usr/share/snmp/mibs/
cp FORTINET-CORE-MIB.mib /usr/share/snmp/mibs/
# MIB'i test edin
snmptranslate -m +CISCO-PROCESS-MIB -IR cpmCPUTotal5minRev
# Tüm yüklü MIB'leri listeleyin
ls /usr/share/snmp/mibs/ | wc -l
# Belirli bir OID'nin hangi MIB'e ait olduğunu bulun
snmptranslate -m ALL .1.3.6.1.4.1.9.9.109.1.1.1.1.3
Zabbix sunucusundaki /etc/zabbix/zabbix_server.conf içinde SNMPMIBFiles parametresini ayarlayarak ek MIB dizinleri tanımlayabilirsiniz. Bu özellikle vendor-specific MIB’lerle çalışırken önemli.
Sonuç
SNMP ile ağ izleme, doğru kurulunca yönetim hayatınızı ciddi ölçüde kolaylaştırır. Şunu net söyleyelim: İlk kurulum zaman alır. MIB sorunları, SNMPv3 auth hataları, yanlış OID’ler, cihazın bulk request’e cevap vermemesi gibi onlarca ufak engelle karşılaşırsınız. Ama bir kez oturunca, ay sonunda ağ ekibine verdiğiniz raporlar, kapasitesi dolan switch portlarını önceden tespit etmek, bir router’ın CPU’sunun neden zirva yaptığını gösteren grafikler, bunların değeri her türlü kurulum zahmetini karşılar.
Benim tavsiyem: Önce 3-5 kritik cihazla başlayın, SNMPv3’ü doğru kurun, hazır template’leri kullanıp üzerine özel item’lar ekleyin. Discovery’yi sonra hayata geçirin. Ve mutlaka trap alımını da konfigüre edin, çünkü polling tek başına yeterli değil. İlerleyen dönemde Zabbix’in dashboard özelliklerini kullanarak NOC ekibinize görsel bir ağ izleme paneli de sunabilirsiniz, ama bu ayrı bir yazı konusu.
