Zabbix’te E-posta Alarm Bildirimi Kurulumu

Zabbix kurulumu tamamlandı, host’lar eklendi, trigger’lar tanımlandı… ve sonra ne oluyor? Sunucu gece 3’te çöküyor, disk dolup taşıyor, servis ayağa kalkmıyor ama sen sabah 9’da gelip durumu görüyorsun. İşte tam bu noktada e-posta bildirim sistemi devreye girmesi gerekiyor. Yıllardır Zabbix kullanan biri olarak şunu söyleyeyim: izleme sistemini kurmak işin sadece yüzde otuzudur, gerisi doğru alarm konfigürasyonudur.

Bu yazıda Zabbix’te e-posta alarm bildirimini sıfırdan, production ortamında çalışacak şekilde nasıl kurduğumu anlatacağım. Hem SMTP ayarlarını hem de media type, user media, action zincirini adım adım geçeceğiz.

Genel Mimariyi Anlamak

Zabbix’te alarm bildirimi tek bir ayarla olmuyor. Bir zincir var ve bu zincirin her halkasını doğru bağlamak gerekiyor:

  • Media Type: E-posta göndermek için kullanılacak SMTP sunucusu ve bağlantı ayarları
  • User Media: Hangi kullanıcının hangi media type üzerinden bildirim alacağı
  • Action: Hangi koşulda, kime, ne zaman, hangi mesajla bildirim gönderileceği

Bunu kafaya yerleştirmeden yapılan konfigürasyonlar genellikle “neden alarm gelmiyor?” sorusuna dönüşüyor. Sırayla gidelim.

SMTP Sunucusu Seçimi ve Hazırlığı

Üç farklı senaryoyla karşılaşıyorum genellikle:

  • Şirket içi Exchange veya Postfix sunucusu
  • Gmail SMTP relay
  • SendGrid, Mailgun gibi transactional e-posta servisleri

Production ortamı için Gmail’i önermiyorum. Rate limit’leri var, uygulama şifresi meselesi var, zaman zaman Google güvenlik politikaları değişince ayarlar bozuluyor. Eğer ciddi bir ortam kuruyorsanız ya kendi Postfix relay’inizi kurun ya da SendGrid/Mailgun gibi bir servis kullanın.

Ama anlatım için Gmail üzerinden gideceğim çünkü test ortamlarında en çok kullanılan yöntem bu. Üstelik adımlar diğer SMTP sunucuları için de birebir geçerli, sadece host ve port değişiyor.

Gmail için önce Google hesabınızda “Uygulama Şifresi” oluşturmanız gerekiyor. Bunun için:

  • Google hesabınıza girin, Güvenlik bölümüne gidin
  • 2 adımlı doğrulama açık olmalı
  • “Uygulama şifreleri” kısmından yeni bir şifre oluşturun
  • “Uygulama” olarak “Posta”, “Cihaz” olarak “Diğer (Özel ad)” seçin, bir isim verin

Bu şifreyi kopyalayın ve bir yere not edin, bir daha göremiyorsunuz.

Zabbix Arayüzünde Media Type Tanımlamak

Zabbix web arayüzüne admin kullanıcısıyla girin. Administration > Media types yolunu izleyin.

Sağ üstte Create media type butonuna tıklayın.

Temel Ayarlar

Name alanına anlamlı bir isim yazın: “Email-SMTP-Gmail” ya da “Alarm-Email” gibi. Sonradan ne olduğunu anlayacaksınız.

Type olarak Email seçin.

SMTP ayarları:

  • SMTP server: smtp.gmail.com
  • SMTP server port: 587
  • SMTP helo: smtp.gmail.com
  • SMTP email: [email protected] (veya gmail adresiniz)
  • Connection security: STARTTLS
  • Authentication: Username and password
  • Username: gmail adresiniz
  • Password: az önce oluşturduğunuz uygulama şifresi

Şirket içi Postfix relay kullanıyorsanız genellikle authentication kapalı olur ve port 25 kullanılır. Connection security da None seçilir.

Message Template Ayarları

Media type içinde Message templates sekmesine geçin. Burada farklı mesaj tipleri için şablon tanımlayabilirsiniz. Add butonuna tıklayın.

Message type: Problem

Subject:

[{EVENT.STATUS}] {HOST.NAME}: {EVENT.NAME}

Message:

Alarm Durumu: {EVENT.STATUS}
Sunucu: {HOST.NAME} ({HOST.IP})
Sorun: {EVENT.NAME}
Önem Seviyesi: {EVENT.SEVERITY}
Zaman: {EVENT.DATE} {EVENT.TIME}
Tetikleyen Değer: {ITEM.VALUE}

Trigger: {TRIGGER.NAME}
Trigger URL: {TRIGGER.URL}

Zabbix URL: http://zabbix.sirketiniz.com/tr/zabbix/tr_events.php?triggerid={TRIGGER.ID}

Problem Recovery için de ayrı bir şablon ekleyin. Add diyerek ikinci şablonu açın:

Message type: Problem recovery

Subject:

[ÇÖZÜLDÜ] {HOST.NAME}: {EVENT.NAME}

Message:

Sorun Çözüldü!
Sunucu: {HOST.NAME} ({HOST.IP})
Sorun: {EVENT.NAME}
Çözülme Zamanı: {EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
Toplam Süre: {EVENT.DURATION}

Kaydedin. Şimdi test edelim.

Media Type Testi

Kaydettiğiniz media type’ın yanındaki Test linkine tıklayın. Açılan pencerede Send to alanına kendi e-posta adresinizi girin ve Test butonuna basın.

Eğer her şey doğruysa “Media type test successful” mesajı görürsünüz. Gelen kutunuzu kontrol edin.

Hata alıyorsanız genellikle şu nedenlerden biri:

  • SMTP port veya sunucu adresi yanlış
  • Uygulama şifresi hatalı girilmiş
  • Gmail hesabında 2FA açık değil
  • Şirket güvenlik duvarı 587 portunu blokluyor

Firewall tarafından bloklanma durumunu şöyle test edebilirsiniz:

telnet smtp.gmail.com 587

Bağlantı kurulabiliyorsa zaten sorun değil, kurulumda bir yerlerde yanlışlık var demektir.

Komut Satırından SMTP Testi

Bazen web arayüzü üzerinden hata ayıklamak yetersiz kalıyor. Zabbix sunucusundan doğrudan e-posta göndermeyi test etmek için:

# swaks kurulu değilse önce kurun
apt-get install swaks  # Debian/Ubuntu
yum install swaks      # RHEL/CentOS

# Gmail SMTP üzerinden test
swaks --auth LOGIN 
      --server smtp.gmail.com 
      --tls 
      --from [email protected] 
      --to [email protected] 
      --auth-user [email protected] 
      --auth-password "uygulamasisresi" 
      --h-Subject "Zabbix SMTP Test" 
      --body "Bu bir test mesajidir"

Bu komut başarılı olursa SMTP ayarlarınız doğrudur. Zabbix arayüzünde hala sorun yaşıyorsanız sorun Zabbix konfigürasyonundadır.

Python ile de test edebilirsiniz, özellikle TLS sertifika sorunlarını debug etmek için:

#!/usr/bin/env python3
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

smtp_server = "smtp.gmail.com"
port = 587
username = "[email protected]"
password = "uygulama_sifresi"
receiver = "[email protected]"

msg = MIMEMultipart()
msg['From'] = username
msg['To'] = receiver
msg['Subject'] = "Zabbix Python SMTP Test"
msg.attach(MIMEText("Test mesaji", 'plain'))

try:
    server = smtplib.SMTP(smtp_server, port)
    server.ehlo()
    server.starttls()
    server.login(username, password)
    server.sendmail(username, receiver, msg.as_string())
    print("Mail gonderildi!")
    server.quit()
except Exception as e:
    print(f"Hata: {e}")

Kullanıcıya Media Tanımlamak

Media type’ı tanımladık ama henüz kimse bu kanaldan bildirim almayacak. Administration > Users menüsüne gidin.

Bildirim almasını istediğiniz kullanıcıya tıklayın (genellikle Admin kullanıcısıyla başlıyoruz). Media sekmesine geçin ve Add butonuna tıklayın.

  • Type: Az önce oluşturduğunuz media type’ı seçin
  • Send to: E-posta adresini girin
  • When active: Varsayılan olarak 1-7,00:00-24:00 (haftanın 7 günü, 24 saat aktif)
  • Use if severity: Hangi önem seviyelerinde bildirim alacağınızı seçin

Severity seçimi önemli. Başlangıçta hepsini açık bırakırsanız çok fazla alarm gelir ve alarm yorgunluğu oluşur. Ben genellikle şu şekilde ayarlıyorum:

  • Not classified: Kapalı
  • Information: Kapalı (opsiyonel açılabilir)
  • Warning: Açık
  • Average: Açık
  • High: Açık
  • Disaster: Açık

Kaydedin.

Action Oluşturmak

Bu en kritik adım. Configuration > Actions menüsüne gidin. Sol üstte Event source: Triggers seçili olmalı. Create action butonuna tıklayın.

Action Genel Ayarları

Name: “Send Email Notifications” veya daha açıklayıcı bir şey yazabilirsiniz.

Conditions sekmesinde varsayılan olarak “Trigger severity >= Not classified” gelir. Bunu değiştirin:

  • Mevcut condition’ı silin
  • Add ile yeni ekleyin: Trigger severity >= Warning

Eğer sadece belirli host group’lardan alarm almak istiyorsanız buraya host group condition’ı da ekleyebilirsiniz:

  • Type: Host group
  • Operator: equals
  • Value: Alarmını izlemek istediğiniz grup

Operations Sekmesi

Operations sekmesine geçin. Add butonuna tıklayın.

  • Operation type: Send message
  • Send to users: Bildirim alacak kullanıcıları ekleyin
  • Send only to: Oluşturduğunuz media type’ı seçin (veya All şeklinde bırakabilirsiniz)

İlk alarm mesajının 0. dakikada gitmesi için Steps alanını 1-1 olarak bırakın.

Eşkalasyon istiyorsanız, yani sorun çözülmezse 30 dakika sonra farklı birine de gitsin istiyorsanız, ikinci bir operation ekleyip Steps alanını 2-2 yapabilir ve farklı bir kullanıcı seçebilirsiniz. Step duration olarak 1800 (saniye cinsinden 30 dakika) girin.

Recovery Operations

Recovery operations sekmesine geçin. Sorun çözüldüğünde de bildirim gitmesini istiyorsak buraya da operation eklemeliyiz. Aynı şekilde Add diyerek kullanıcıyı ve media type’ı seçin.

Kaydedin. Action artık aktif durumda.

Zabbix Server Log’larını İzlemek

Alarm gitmiyor mu? İlk bakılacak yer Zabbix server log’ları:

tail -f /var/log/zabbix/zabbix_server.log | grep -i "mail|email|alert"

Başarılı bir gönderim şöyle görünür:

grep "alert" /var/log/zabbix/zabbix_server.log | tail -20

Hata durumunda şöyle bir şey görebilirsiniz:

cannot send email: Connection refused
cannot send email: Authentication failed

“Authentication failed” hatası alıyorsanız şifrenizi kontrol edin. “Connection refused” alıyorsanız firewall veya SMTP sunucu ayarlarına bakın.

Zabbix’in alert gönderme kuyruğunu web arayüzünden de görebilirsiniz: Reports > Action log menüsünden gönderim geçmişini ve hataları inceleyebilirsiniz.

Test Alarmı Tetiklemek

Konfigürasyonu doğrulamak için gerçek bir alarm tetiklemek gerekiyor. Bunun için birkaç yöntem:

Basit bir yol: Zabbix agent kurulu olan bir sunucuda CPU yükünü yapay olarak artırmak:

# CPU'yu strese sokacak komut
stress --cpu 8 --timeout 60
# stress kurulu değilse:
apt-get install stress

# Ya da basitçe:
yes > /dev/null &
yes > /dev/null &
yes > /dev/null &
# birkaç saniye bekleyin, sonra:
killall yes

Ya da daha kontrollü bir yol: Geçici bir trigger oluşturmak. Configuration > Hosts altında test sunucunuzu seçin, Triggers sekmesinde yeni trigger oluşturun:

{TEST_SUNUCU:system.uptime.last(0)}>0

Bu trigger her zaman true döneceğinden hemen alarm yaratır. Testi tamamladıktan sonra bu trigger’ı silin veya disable edin.

Zabbix Server Yapılandırmasında Dikkat Edilecekler

/etc/zabbix/zabbix_server.conf dosyasında e-posta ile ilgili özel bir parametre yok ama genel alert worker ayarları önemli:

# AlertScriptsPath - custom alert scriptleri için
AlertScriptsPath=/usr/lib/zabbix/alertscripts

# StartAlerters - aynı anda çalışacak alerter sayısı
# Çok fazla alarm geliyorsa artırabilirsiniz
StartAlerters=3

Değişiklik yaptıysanız Zabbix server’ı yeniden başlatmayı unutmayın:

systemctl restart zabbix-server
systemctl status zabbix-server

Birden Fazla E-posta Grubu için Yapılandırma

Gerçek production ortamlarında tek bir e-posta adresi yetmiyor. Database alarmları DBA ekibine, network alarmları network ekibine, disk alarmları sistem ekibine gidecek şekilde yapılandırmak gerekiyor.

Bu senaryoda yaklaşım şöyle olabilir:

Her ekip için bir Zabbix kullanıcısı veya kullanıcı grubu oluşturun. Her kullanıcıya ilgili e-posta adresini media olarak tanımlayın.

Action’larda condition’lara host group filtreleri ekleyin:

  • “DB-Servers” grubundaki alarmlar için DBA kullanıcısına bildirim
  • “Network-Devices” grubundaki alarmlar için Network kullanıcısına bildirim

Her birini ayrı action olarak tanımlamak çok daha yönetilebilir bir yapı sağlar. Tek büyük bir action içinde her şeyi yapmaya çalışmak bakımı zorlaştırır.

Dağıtım listesi (distribution list) kullanmak da yaygın bir yöntem. Zabbix’e tek bir “[email protected]” adresi tanımlarsınız, arkasında kimin olduğunu e-posta sunucusu yönetir. Bu yaklaşım Zabbix tarafında yönetimi kolaylaştırır.

Alarm Yorgunluğunu Önlemek

Bu konuyu atlamak olmaz. Yanlış yapılandırılmış Zabbix sistemleri saatte yüzlerce alarm üretebilir. Bir süre sonra ekip bu alarmlara bakmaz olur ve kritik bir olay gözden kaçar.

Öneriler:

  • Maintenance periods kullanın: Bilinen bakım pencerelerinde alarm üretilmesini engelleyin
  • Problem acknowledgment özelliğini aktif kullanın
  • Action’larda Repeat message özelliğini dikkatli kullanın, çok sık tekrar eden mesajlar rahatsız edici
  • Trigger threshold’larını gerçekçi tutun, çok hassas trigger’lar çok fazla false positive üretir
  • Information ve Warning seviyesindeki alarmlar için ayrı bir e-posta listesi belirleyin, kritik alarmlar için ayrı

Sonuç

Zabbix’te e-posta bildirimi kurulumu tek başına bir adımdan ibaret değil. Media type, user media ve action zincirinin her halkasının doğru yapılandırılması gerekiyor. Birçok kez şunu gördüm: biri “Zabbix alarmları çalışmıyor” diye gelir, bakarsın media type güzel tanımlanmış ama action’da recovery operation eksik. Ya da action tanımlanmış ama kullanıcıya media atanmamış.

Test aşamasını atlamayın. Kurulumu tamamlar tamamlamaz gerçek ya da yapay bir alarm tetikleyerek sistemin baştan sona doğru çalıştığını doğrulayın. Action log’larını alışkanlık haline getirin, haftada bir bakmanız bile sistemde potansiyel sorunları erken yakalamanızı sağlar.

Son olarak: e-posta bildirimi güzel bir başlangıçtır ama tek seçenek değil. Aynı altyapıyı kullanarak Telegram, Slack veya SMS bildirimleri de ekleyebilirsiniz. Zabbix’in media type sistemi bu konuda oldukça esnek. Kritik alarmlar için e-posta yetmez dediğinizde, gece 3’te telefona bildirim gelmesi için Telegram entegrasyonunu bir sonraki adım olarak düşünebilirsiniz.

Bir yanıt yazın

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