Zabbix Map ile Ağ Topoloji Görselleştirme
Ağ topolojisini izlemek, özellikle onlarca ya da yüzlerce cihazın olduğu ortamlarda, dashboard’a bakıp “şu an ne durumda?” sorusuna saniyeler içinde yanıt verebilmek demek. Zabbix’in Map özelliği bu ihtiyacı karşılayan, ama çoğu zaman yüzeysel kullanılan bir araç. Ben yıllardır Zabbix kullanıyorum ve dürüst olmak gerekirse Map’i uzun süre sadece “göze hitap eden bir şey” olarak gördüm. Sonra bir gün NOC ekibinin shift değişiminde yaşadığımız bir olayda fark ettim ki, düzgün yapılandırılmış bir topoloji haritası, bir sorunu tespit etme süresini ciddi ölçüde kısaltıyor. O günden bu yana Map özelliğine çok daha fazla emek harcıyorum.
Zabbix Map Nedir ve Neden Önemlidir
Zabbix Map, ağınızdaki cihazları, bağlantılarını ve bu bağlantılar üzerindeki trafik bilgilerini görsel olarak sunan bir araçtır. Ama bu tanım biraz kuru kaçtı, daha somut konuşalım.
Bir veri merkezinde çalışıyorsunuz. Core switch’ten distribution switch’lere, oradan access switch’lere uzanan bir katmanlı ağ yapınız var. Bir link düştüğünde ya da bir cihaz erişilemez hale geldiğinde, Zabbix triggerları ateşlenir ve alert gönderir. Bu güzel, ama o alert’ı alan kişinin kafasında “bu cihaz tam olarak nerede, hangi cihazlar bundan etkileniyor?” sorusu oluşur. Map tam bu noktada devreye girer. Cihazların durumu renk koduyla (yeşil/sarı/kırmızı) anlık olarak güncellenir ve bağlantı koptuğunda o link görsel olarak da bozuk görünür.
Bunun ötesinde Map, MRTG’den alışkın olduğumuz “link üzerinde kaç Mbps akıyor?” bilgisini de gösterebilir. Bir linkin tıkandığını tablo verilerinden değil, haritadan görsel olarak fark edebilirsiniz.
Map Oluşturmadan Önce Yapılması Gerekenler
Map oluşturmak için önce sağlam bir Zabbix altyapısının olması gerekir. Şu unsurların yerinde olduğundan emin olun:
- Host tanımları: Haritaya koyacağınız tüm cihazların Zabbix’te host olarak tanımlı olması şart
- SNMP ya da agent ile izleme: Link status ve trafik verisi için cihazlardan veri çekiliyor olmalı
- Trigger konfigürasyonu: Cihaz durumunu haritaya yansıtabilmek için ilgili triggerların aktif olması gerekiyor
- Ağ arayüzü item’ları: Bant genişliği bilgisini link üzerinde göstermek istiyorsanız interface item’larının çalışıyor olması lazım
SNMP üzerinden network cihazlarından arayüz bilgilerini çekiyorsanız, şu komutu kullanarak önce cihazın SNMP erişimine açık olduğunu doğrulayın:
snmpwalk -v2c -c public 192.168.1.1 1.3.6.1.2.1.2.2.1.2
Bu komut size cihazın tüm arayüz isimlerini döner. Eğer çıktı geliyorsa SNMP erişimi çalışıyor demektir. Gelmiyorsa community string’i ya da SNMP versiyonunu kontrol edin.
Zabbix tarafında interface discovery’nin çalışıp çalışmadığını kontrol etmek için Zabbix agent log’larına bakabilirsiniz:
tail -f /var/log/zabbix/zabbix_agentd.log | grep -i "interface"
Harita Oluşturma: Adım Adım
Zabbix arayüzünde Monitoring > Maps yolunu izleyerek harita yönetim ekranına ulaşırsınız. Create map butonuna tıkladığınızda karşınıza gelen ayar ekranı ilk bakışta basit görünür, ama her seçeneğin bir önemi var.
Temel ayarlar için dikkat etmeniz gerekenler:
- Name: Anlamlı bir isim verin. “Network Map 1” değil, “DC-Istanbul-Core-Topology” gibi
- Width / Height: Haritanın piksel boyutu. Büyük topolojiler için en az 1800×1200 öneririm
- Background image: Gerçek ofis ya da veri merkezi planı koyabilirsiniz. Bu özellikle fiziksel lokasyon bazlı izlemede çok işe yarıyor
- Icon highlighting: Aktif olsun. Problem olan host’ların ikonları renkleniyor
- Mark elements on trigger status change: Bu da açık olsun, önemli
- Expand macros: Açık tutun, label’larda macro kullanacaksınız
Element Tipleri ve Kullanımları
Haritaya eklediğiniz her nesne bir “element”tir. Dört tip element var:
- Host: Tek bir Zabbix host’u temsil eder. En sık kullandığınız tip bu olacak
- Host group: Bir host grubunu tek bir ikon olarak gösterir. Küçük ölçekli haritaları büyük haritaya gömmek için idealdir
- Trigger: Belirli bir trigger’ı izlemek için kullanılır
- Image: Sadece görsel amaçlı. Firewall çizimi, cloud ikonu gibi dekoratif ya da açıklayıcı görseller eklemek için
Host element eklerken Label alanına macro’lar yazabilirsiniz. Ben genellikle şu format’ı kullanırım:
{HOST.NAME}
{HOST.IP}
Bu sayede her host’un altında hem adı hem IP adresi görünür. Yönetici olmayan birine haritayı gösterirken bu bilgi çok işe yarıyor.
Link Konfigürasyonu
Elementleri birbirine bağlayan “link”ler, haritanın en kritik kısmı. Sadece bağlantıyı göstermekle kalmaz, o bağlantı üzerindeki durumu da yansıtır.
İki element arasında link oluştururken şu ayarlara dikkat edin:
- Label: Link üzerinde göstermek istediğiniz bilgi. Mesela bant genişliği bilgisi için item macro’su yazabilirsiniz
- Connected to: Linkin bağlandığı element
- Link indicators: Hangi trigger durumunda bu linkin rengi değişsin? Bunu ayarlarsanız bir link düştüğünde harita üzerinde kırmızı renkte görebilirsiniz
Link label’ına dinamik veri koymak için Zabbix’in item value macro’sunu kullanın. Örneğin bir switch’in uplink portunu gösteriyorsanız ve o port için net.if.out[eth0] item’ınız varsa, label’a şunu yazabilirsiniz:
{hostname:net.if.out[eth0].last(0)}
Tabii bu macro yazımı Zabbix 5.x ve öncesi içindi. Zabbix 6.0 ile birlikte expression syntax değişti. Yeni yazım şu şekilde:
{{hostname}:net.if.out[eth0].last()}
Hangi versiyonu kullandığınıza göre doğru syntax’ı kullandığınızdan emin olun.
API ile Otomatik Harita Oluşturma
Haritaları tek tek elle oluşturmak küçük ortamlar için makul ama 50-100 cihazlık bir ağda bu yaklaşım pratik değil. Zabbix API’si üzerinden haritaları programatik olarak oluşturabilirsiniz.
Önce Zabbix API’sine authenticate olalım:
curl -s -X POST
-H "Content-Type: application/json"
-d '{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1
}'
http://zabbix.sirket.local/api_jsonrpc.php
Bu isteğe dönen result değeri sizin auth token’ınız. Bunu bir değişkene atayıp sonraki isteklerde kullanacaksınız.
Şimdi bir map oluşturalım. Aşağıdaki örnek, iki host içeren basit bir harita oluşturur:
curl -s -X POST
-H "Content-Type: application/json"
-d '{
"jsonrpc": "2.0",
"method": "map.create",
"params": {
"name": "Core Network Topology",
"width": 1800,
"height": 1200,
"selements": [
{
"selementid": "1",
"elementtype": 0,
"elements": [{"hostid": "10084"}],
"x": 300,
"y": 200,
"label": "{HOST.NAME}n{HOST.IP}",
"iconid_off": "151"
},
{
"selementid": "2",
"elementtype": 0,
"elements": [{"hostid": "10085"}],
"x": 700,
"y": 200,
"label": "{HOST.NAME}n{HOST.IP}",
"iconid_off": "151"
}
],
"links": [
{
"selementid1": "1",
"selementid2": "2",
"label": "Uplink 1Gbps"
}
]
},
"auth": "TOKEN_BURAYA",
"id": 2
}'
http://zabbix.sirket.local/api_jsonrpc.php
Daha büyük topolojiler için Python ile bir script yazmak daha mantıklı. Bir YAML dosyasından topoloji bilgilerini okuyup API’ye gönderen basit bir örnek:
#!/usr/bin/env python3
# topology_importer.py kullanimi:
# python3 topology_importer.py --config topoloji.yaml --zabbix-url http://zabbix.sirket.local
import sys
import json
import requests
import yaml
import argparse
def zabbix_login(url, user, password):
payload = {
"jsonrpc": "2.0",
"method": "user.login",
"params": {"user": user, "password": password},
"id": 1
}
response = requests.post(f"{url}/api_jsonrpc.php", json=payload)
return response.json()["result"]
def get_host_id(url, token, hostname):
payload = {
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"filter": {"host": hostname},
"output": ["hostid"]
},
"auth": token,
"id": 2
}
response = requests.post(f"{url}/api_jsonrpc.php", json=payload)
result = response.json().get("result", [])
return result[0]["hostid"] if result else None
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--config", required=True)
parser.add_argument("--zabbix-url", required=True)
args = parser.parse_args()
with open(args.config) as f:
config = yaml.safe_load(f)
token = zabbix_login(args.zabbix_url, config["user"], config["password"])
print(f"[+] Login basarili, token: {token[:8]}...")
Haritaları Dashboard’a Entegre Etmek
Haritayı oluşturduktan sonra onu bir dashboard widget’ı olarak ekleyebilirsiniz. Monitoring > Dashboard ekranında bir dashboard oluşturun veya mevcut birine widget ekleyin. Widget tipinden Map seçin ve oluşturduğunuz haritayı seçin.
NOC ekipleri için önerdiğim yaklaşım: Ana dashboard’da genel topoloji haritasını tam ekran göster, ayrıntılı haritalar için drill-down bağlantıları kullan. Zabbix’te bir harita elemanına tıklandığında başka bir haritaya ya da host detay sayfasına yönlendirme yapabilirsiniz. Büyük haritalardan küçük, detaylı haritalara geçiş için bu özelliği mutlaka kullanın.
Bunu yapılandırmak için element düzenleme ekranında Actions sekmesinde Open URL seçeneğine tıkladığınızda o elemente yönlendirme ekleyebilirsiniz.
Trigger-Based Görsel Uyarılar
Haritanın gerçek gücü, trigger’larla entegre çalışmasından geliyor. Bir host’a trigger bağladığınızda problem oluştuğunda o ikonun arka planı kırmızıya döner. Ama link’ler için de aynı şeyi yapabilirsiniz.
Örneğin bir switch’in uplink portunu takip eden bir trigger varsa ve bu trigger’ı link indicator olarak tanımladıysanız, link fiziksel olarak düştüğünde haritadaki çizgi rengi değişir. Bunu trigger expression ile birleştirip daha anlamlı hale getirebilirsiniz:
last(/switch-core01/net.if.oper[ifOperStatus.5])=2
Bu expression, switch-core01 üzerindeki 5. portun operasyonel durumunu kontrol eder. Değer 2 olduğunda (down) trigger ateşlenir.
Bir link için birden fazla indicator tanımlayabilirsiniz:
- Yeşil: Normal trafik
- Sarı: Yüksek kullanım (örneğin %80 üzeri)
- Kırmızı: Link down ya da erişilemiyor
Bu yapı, haritaya bakan kişinin saniyeler içinde neyin yanlış gittiğini görmesini sağlar.
Gerçek Dünya Senaryosu: Çok Lokasyonlu Yapı
Birden fazla ofisi olan bir şirketin ağ topolojisini Zabbix’te nasıl görselleştirirsiniz?
Tavsiyem şu hiyerarşiyi kullanmak:
- Ana harita: Türkiye geneli, şehirler arası WAN bağlantıları. Her şehir bir “host group” element olarak gösterilir
- Şehir bazlı haritalar: İstanbul, Ankara, İzmir gibi. Her ofisteki core cihazlar gösterilir
- Veri merkezi haritaları: Detaylı rack düzeyinde ya da VLAN bazlı görünüm
Ana haritaya tıkladığınızda şehir bazlı haritaya, oradan veri merkezi haritasına inebilirsiniz. Bu drill-down yaklaşımı hem genel durumu hem de detayları yönetilebilir hale getirir.
Şehirler arası WAN linklerini göstermek için arka plan olarak Türkiye haritasının SVG ya da PNG formatındaki görselini kullanabilirsiniz. Bunu harita arka planı olarak yükleyin, ardından şehirlerin konumlarına karşılık gelen noktalara element yerleştirin.
Harita Performansı ve Bakımı
Çok sayıda element ve link içeren haritalar Zabbix frontend’ini yavaşlatabilir. Bazı pratik öneriler:
- Tek bir haritaya 80-100’den fazla element koymaktan kaçının
- Gereksiz icon image boyutlarını küçük tutun, 32×32 ya da 64×64 piksel yeterli
- Background image’leri optimize edilmiş PNG olarak yükleyin
- Haritaları düzenli olarak gözden geçirin, artık olmayan host’ları kaldırın
Hangi haritaların var olduğunu ve son güncellenme zamanlarını API üzerinden kontrol edebilirsiniz:
curl -s -X POST
-H "Content-Type: application/json"
-d '{
"jsonrpc": "2.0",
"method": "map.get",
"params": {
"output": ["sysmapid", "name", "width", "height"],
"sortfield": "name"
},
"auth": "TOKEN_BURAYA",
"id": 3
}'
http://zabbix.sirket.local/api_jsonrpc.php | python3 -m json.tool
Eski ya da kullanılmayan haritaları silmek için map.delete methodunu kullanabilirsiniz. Harita ID’lerini biliyorsanız:
curl -s -X POST
-H "Content-Type: application/json"
-d '{
"jsonrpc": "2.0",
"method": "map.delete",
"params": ["42", "43"],
"auth": "TOKEN_BURAYA",
"id": 4
}'
http://zabbix.sirket.local/api_jsonrpc.php
Sık Yapılan Hatalar
Birkaç yılda edindiğim izlenimlerden konuşacak olursam, en sık karşılaştığım sorunlar şunlar:
- Label macro’ları çalışmıyor: Host adını kontrol edin, macro Zabbix’teki host adıyla birebir eşleşmeli
- Trigger renklendirmesi gelmiyor: Trigger’ın host’a doğru bağlandığından emin olun, shared trigger değil host-specific trigger kullanın
- Harita çok kalabalık görünüyor: Tüm ağı tek haritaya sıkıştırmaya çalışmayın, hiyerarşik yapıyı kullanın
- API ile oluşturulan haritada element konumları çakışıyor: x/y koordinatlarını programatik olarak hesaplayın, elle deneme yanılma yapmayın
Sonuç
Zabbix Map, doğru kullanıldığında NOC ekibinin en değerli aracına dönüşebilir. Yanlış kullanıldığında ise güncel tutulması zor, anlaşılması güç ve pratik değer üretmeyen süslü bir dashboard widget’ından ibaret kalır. Farkı yaratan şey, haritaları gerçek operasyonel ihtiyaçlarla tasarlamak: Hangi soruyu saniyeler içinde yanıtlaması gerekiyor? Kimler kullanacak? Drill-down hiyerarşisi nasıl olmalı?
API entegrasyonunu mutlaka değerlendirin. Özellikle ağ ekibi yeni cihaz eklediğinde haritanın otomatik güncellenmesi büyük fark yaratıyor. Elle yönetilen haritalar er ya da geç güncelliğini yitirir ve güvenilmez hale gelir. Bir CI/CD pipeline’ına ya da network automation sürecinize harita güncelleme adımı ekleyebilirseniz, topoloji haritanız her zaman gerçeği yansıtır.
Son olarak: Haritalarınızı kullanıcılarınıza gösterin ve geri bildirim alın. Teknik personel ve NOC operatörlerinin ihtiyaçları farklıdır. İkisini de karşılayan haritalar oluşturmak için zaman harcamanız, uzun vadede çok daha az “bu alarm neden geldi, hangi cihaz bu?” sorusunu yanıtlamak zorunda kalmanız demektir.
