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.

Bir yanıt yazın

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