Bu yazıda, Debian sunucuda çalışan bir Docker container’ın up/down durumunu Zabbix üzerinden nasıl izleyeceğimizi adım adım açıklayacağım. Temel olarak docker inspect komutuyla container’ın durumunu kontrol edip, bunu SNMP aracılığıyla Zabbix’e taşıyacağız.
1. Docker Container Durumunu Kontrol Etme
Docker container’ın ayakta olup olmadığını tespit etmek için şu komutu kullanabilirsiniz:
docker inspect -f '{{.State.Running}}' ddx-webservice | grep -q 'true' && echo 1 || echo 0- Çıktı:
- Container çalışıyorsa:
1 - Container çalışmıyorsa:
0
Not:
ddx-webserviceyerine kendi container adınızı yazın.
2. SNMP’ye Komutu Eklemek
Bu kontrolü SNMP üzerinden erişilebilir hale getirmek için /etc/snmp/snmpd.conf dosyasına extend tanımı ekleyeceğiz.
Dosyanın en altına şu satırı ekleyin:
extend docker_web_service /bin/bash -c "docker inspect -f '{{.State.Running}}' ddx-webservice | grep -q 'true' && echo 1 || echo 0"Ardından SNMP servisini yeniden başlatın:
systemctl restart snmpd3. Gerekli OID’leri Görünür Hale Getirme
Net-SNMP, extend ile tanımlanan komutları özel bir OID altında tutar. Bu yüzden aşağıdaki view tanımlarını snmpd.conf dosyasına eklemelisiniz (genellikle dosyanın üst kısmında olur):
view systemonly included .1.3.6.1.4.1.2021.50
view systemonly included .1.3.6.1.2.1.1
view systemonly included .1.3.6.1.2.1.25.1
view systemonly included 1.3.6.1.4.1.2021Uyarı: Bu satırlar zaten varsa tekrar eklemeyin.
4. Extend Komutunun OID’sini Bulma
Net-SNMP, extend ile tanımlanan komutları şu temel OID altında tutar:
.1.3.6.1.4.1.8072.1.3.2.3.1.1Bu OID’nin sonuna komut isminin ASCII kodları eklenir.
Örnek: docker_web_service
- Karakter sayısı: 18
- ASCII kodları:
100.111.99.107.101.114.95.119.101.98.95.115.101.114.118.105.99.101
Son OID:
.1.3.6.1.4.1.8072.1.3.2.3.1.1.18.100.111.99.107.101.114.95.119.101.98.95.115.101.114.118.105.99.101Otomatik OID Üretme (Python)
Aşağıdaki Python scripti ile herhangi bir extend ismi için OID otomatik oluşturabilirsiniz:
name = "docker_web_service"
ascii_codes = '.'.join(str(ord(c)) for c in name)
oid = f".1.3.6.1.4.1.8072.1.3.2.3.1.1.{len(name)}.{ascii_codes}"
print(oid)Çıktı:
.1.3.6.1.4.1.8072.1.3.2.3.1.1.18.100.111.99.107.101.114.95.119.101.98.95.115.101.114.118.105.99.1015. SNMP ile Test Etme
Şimdi tanımladığımız OID’yi snmpget ile test edelim:
snmpget -v3 -u {{snmp_username}} -l authPriv -a SHA -A '{{PASS}}' -x AES -X '{{PASS}}' {{IP_ADDR}} {{OID}}Örnek (container kapalıyken):
snmpget -v3 -u ddxa -l authPriv -a SHA -A 'Password1.' -x AES -X 'Password1.' 192.168.17.113 .1.3.6.1.4.1.8072.1.3.2.3.1.1.18.100.111.99.107.101.114.95.119.101.98.95.115.101.114.118.105.99.101Çıktı:
iso.3.6.1.4.1.8072.1.3.2.3.1.1.18.100.111.99.107.101.114.95.119.101.98.95.115.101.114.118.105.99.101 = STRING: "0"Container çalışıyorsa
"1"döner.
6. Zabbix’te Template Oluşturma
Şimdi bu veriyi Zabbix’te görselleştirelim.
Adımlar:
- Zabbix Web Arayüzü →
Data Collection→Templates - Mevcut bir template seçin (örneğin: Linux by SNMP) veya yeni oluşturun.
- Template sayfasında Items →
Create Item
Item Ayarları:
| Alan | Değer |
|---|---|
| Name | Docker Web Service Status |
| Type | SNMP agent |
| Key | docker.webservice.status (herhangi bir key olabilir) |
| SNMP OID | .1.3.6.1.4.1.8072.1.3.2.3.1.1.18.100.111.99.107.101.114.95.119.101.98.95.115.101.114.118.105.99.101 |
| Type of information | Numeric (unsigned) |
| Update interval | 1m (veya tercihinize göre) |
Add butonuna basın ve kaydedin.
7. Test ve Görselleştirme
- Host’unuza template’i atayın.
- Latest Data sayfasında item’ın değerini kontrol edin.
- Grafik veya trigger ekleyerek 0 olduğunda uyarı alabilirsiniz.
Sonuç
Artık Docker container’ınızın durumu Zabbix üzerinden izlenebilir!
Bu yöntemle birden fazla container için de aynı yapıyı kurabilirsiniz. Sadece extend ismini ve container adını değiştirin.
İpucu: Birden fazla container için
extendtanımlarken isimleri anlamlı ve çakışmayacak şekilde seçin.
