Debian Sunucuda Docker Container Durumunu Zabbix Üzerinde İzleme

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-webservice yerine 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 snmpd

3. 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.2021

Uyarı: 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.1

Bu 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.101

Otomatik 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.101

5. 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:

  1. Zabbix Web ArayüzüData CollectionTemplates
  2. Mevcut bir template seçin (örneğin: Linux by SNMP) veya yeni oluşturun.
  3. Template sayfasında ItemsCreate Item

Item Ayarları:

AlanDeğer
NameDocker Web Service Status
TypeSNMP agent
Keydocker.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 informationNumeric (unsigned)
Update interval1m (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 extend tanımlarken isimleri anlamlı ve çakışmayacak şekilde seçin.


Leave a Reply

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