Uptime Kuma ile Slack ve Discord Bildirim Kurulumu

Geçen ay bir müşterimin production ortamında tam gece yarısı kritik bir servis çöktü. Kimse farkında değil, sabaha kadar kullanıcılar hata alıyor. Neden? Çünkü monitoring vardı ama bildirim kurulu değildi. İşte tam bu yüzden Uptime Kuma’yı kurmak tek başına yeterli değil; bildirimleri doğru konfigure etmek en az izlemenin kendisi kadar kritik.

Bu yazıda Uptime Kuma’nın Slack ve Discord entegrasyonlarını gerçek prodüksiyon senaryolarıyla kuruyoruz. Webhook’lardan özel mesaj formatlarına, kanal yönlendirmesinden hata ayıklamaya kadar her şeyi ele alacağız.

Uptime Kuma’da Bildirim Sistemi Nasıl Çalışır

Uptime Kuma’nın bildirim sistemi merkezi bir yapıya sahip. Önce bir “Notification” tanımlıyorsunuz, sonra bu bildirimi bir veya birden fazla monitöre atıyorsunuz. Bu yaklaşımın güzelliği şu: Aynı Slack kanalına 20 farklı servisin bildirimini gönderebilirsiniz, ya da farklı servisleri farklı kanallara yönlendirebilirsiniz.

Bildirim tetiklenme koşulları:

  • Down: Servis erişilemez olduğunda
  • Up: Servis tekrar ayağa kalktığında (recovery bildirimi)
  • Degraded: Servis çalışıyor ama performans düşük olduğunda (bazı check tiplerinde)
  • Certificate Expiry: SSL sertifikası sona erme yaklaşırken

Önemli bir detay: Uptime Kuma varsayılan olarak her durum değişikliğinde bildirim gönderir, sürekli aynı durumda olmadıkça tekrar göndermez. Yani servis down kalırsa her dakika mesaj yağmur gibi gelmez, sadece ilk down anında ve tekrar up olduğunda gelir. Bu davranışı “Resend Notification if Down X times” ayarıyla değiştirebilirsiniz.

Slack Entegrasyonu: Webhook Oluşturma

Önce Slack tarafında bir Incoming Webhook oluşturmamız gerekiyor.

Slack Uygulaması Oluşturma

Slack’in API portaline gidin: https://api.slack.com/apps

Buradan “Create New App” diyip “From scratch” seçin. Uygulama adını istediğiniz gibi koyabilirsiniz, ben genellikle “Uptime Monitor” ya da “Infrastructure Alerts” gibi açıklayıcı isimler kullanıyorum.

Workspace’inizi seçtikten sonra sol menüden “Incoming Webhooks” kısmına gidin ve toggle’ı aktif edin. Sayfanın altına “Add New Webhook to Workspace” butonu çıkacak. Buna tıklayıp hangi kanala mesaj göndereceğinizi seçin.

Webhook URL’iniz şuna benzer bir format olacak:

https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX

Bu URL’yi bir yere not edin, Uptime Kuma’da kullanacağız.

Uptime Kuma’da Slack Bildirimi Ekleme

Settings > Notifications > Add Notification adımlarını takip edin.

Notification Type olarak “Slack” seçin. Karşınıza çıkan alanlar:

  • Notification Name: İç referans için bir isim. Örneğin “Slack-Production-Kritik”
  • Webhook URL: Az önce oluşturduğunuz URL
  • Channel, DM, or Workflow name: Hangi kanala gönderileceği. #monitoring gibi kanal adı yazabilirsiniz ya da boş bırakırsanız webhook’u oluştururken seçtiğiniz kanala gider
  • Username: Mesajın hangi kullanıcı adıyla görüneceği. Varsayılan “Uptime Kuma” kalabilir
  • Icon Emoji: Bot ikonunu emoji ile özelleştirebilirsiniz. :rotating_light: veya :warning: gibi

Ayarları girdikten sonra “Test” butonuna basın. Slack kanalınızda test mesajı görünmesi gerekiyor.

Slack’te Birden Fazla Kanal Stratejisi

Gerçek dünya senaryosunda tüm uyarıları tek bir kanala dökmek kaos yaratır. Şöyle bir yapı öneririm:

  • #monitoring-kritik: Production servisleri, ödeme sistemleri, authentication
  • #monitoring-uyari: Staging ortamı, yardımcı servisler
  • #monitoring-ssl: Sadece SSL sertifika uyarıları

Bunun için her kanal için ayrı bir webhook oluşturup Uptime Kuma’da ayrı notification tanımlamanız gerekiyor. Monitörü eklerken hangi notification’ı kullanacağınızı seçebiliyorsunuz.

Discord Entegrasyonu: Webhook Kurulumu

Discord entegrasyonu Slack’ten biraz daha kolay çünkü Discord sunucusu üzerinde direkt webhook oluşturabiliyorsunuz, ayrı bir uygulama kaydetmenize gerek yok.

Discord Webhook Oluşturma

Discord sunucunuzda bildirim almak istediğiniz kanalın ayarlarına girin (kanal adına sağ tıklayıp “Edit Channel” ya da dişli simgesi).

“Integrations” sekmesine geçin, oradan “Webhooks > New Webhook” deyin. Webhook’a bir isim verin, hangi kanala mesaj atacağını ayarlayın. Bot ikonunu da buradan özelleştirebilirsiniz.

“Copy Webhook URL” butonuna basın. URL formatı şöyle görünecek:

https://discord.com/api/webhooks/000000000000000000/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Uptime Kuma’da Discord Bildirimi Ekleme

Settings > Notifications > Add Notification

Notification Type olarak “Discord” seçin:

  • Notification Name: “Discord-DevOps-Kanal” gibi
  • Discord Webhook URL: Discord’dan kopyaladığınız URL
  • Username: Mesajda görünecek bot adı
  • Prefix Custom Message: Mesajların önüne eklenecek özel metin. Mesela @here ya da belirli bir rol mention’ı için kullanabilirsiniz

Burada Discord’a özel güzel bir özellik var: mention sistemi. Down uyarısı geldiğinde ilgili kişiye mention atmak istiyorsanız Prefix Custom Message alanına şunu yazabilirsiniz:

<@&123456789012345678>

Buradaki sayısal ID, mention etmek istediğiniz Discord rolünün ID’si. Rolün ID’sini almak için Discord’da Developer Mode’u açıp role sağ tıklayıp “Copy ID” diyebilirsiniz.

Discord Embed Renkleri

Uptime Kuma, Discord’a embed formatında mesaj gönderiyor ve durum renklerini otomatik ayarlıyor:

  • Kırmızı (16711680): Servis down olduğunda
  • Yeşil (65280): Servis tekrar up olduğunda

Bu renkler Uptime Kuma tarafından otomatik atanıyor, manuel müdahale gerektirmiyor.

Ortak Konfigürasyon: Gelişmiş Ayarlar

Bildirim Zamanlaması

Her iki entegrasyon için de geçerli olan kritik bir ayar var: “Apply on all existing monitors”. Bu seçeneği işaretlerseniz yeni oluşturduğunuz notification mevcut tüm monitörlere otomatik atanır. Dikkatli kullanın, beklenmedik mesaj yağmuruna neden olabilir.

“Default Enabled” seçeneği ise ileride ekleyeceğiniz yeni monitörlere bu bildirimin otomatik atanıp atanmayacağını belirliyor.

Tekrarlayan Bildirimler

Monitör ayarlarında “Resend Notification if Down X times” kısmı önemli. Şöyle düşünün:

Check interval’iniz 1 dakikaysa ve bu değeri 60 yaparsanız, servis down kaldığı sürece her saatte bir hatırlatma alırsınız. Bu özellikle gece mesai saatleri dışında kritik sistemler için hayat kurtarıcı.

# Örnek senaryo hesabı:
# Check interval: 1 dakika
# Resend after: 30 kez
# Sonuç: Her 30 dakikada bir tekrar bildirim

Heartbeat Sayısı ve Retry

Monitör oluştururken dikkat edilmesi gereken iki ayar:

  • Heartbeat Interval: Kaç saniyede bir kontrol yapılacak. Kritik servisler için 30-60 saniye, daha az kritik olanlar için 120-300 saniye uygun.
  • Retries: Kaç kez başarısız olursa “down” sayılacak. Bunu 1 yerine 3 yapmanızı öneririm. Geçici ağ hatalarında gereksiz alarm üretmez.

Gerçek Dünya Senaryosu: E-ticaret Sitesi İzleme

Diyelim ki bir e-ticaret platformunu yönetiyorsunuz. Şöyle bir yapı kurabilirsiniz:

Production kritik servisler (Slack #kritik kanalına):

# Ana site
URL: https://site.com
Interval: 30 saniye
Retries: 2
Notification: Slack-Kritik

# Ödeme API
URL: https://api.site.com/health
Interval: 30 saniye  
Retries: 1
Notification: Slack-Kritik + Discord-DevOps

# Sepet servisi
URL: https://api.site.com/cart/health
Interval: 60 saniye
Retries: 2
Notification: Slack-Kritik

Yardımcı servisler (Slack #uyari kanalına):

# Admin paneli
URL: https://admin.site.com
Interval: 120 saniye
Retries: 3
Notification: Slack-Uyari

# Staging ortamı
URL: https://staging.site.com
Interval: 300 saniye
Retries: 3
Notification: Slack-Uyari

Bu yapıda ödeme API’si hem Slack’e hem Discord’a bildirim gönderiyor. Maksimum kritik servis için çift kanal mantıklı.

Uptime Kuma’yı Docker ile Kuruyorsanız

Eğer Uptime Kuma’yı Docker container içinde çalıştırıyorsanız ve bildirimler gitmiyor olursa, container’ın internete erişimini kontrol edin:

# Container'ın Slack API'sine ulaşıp ulaşamadığını test et
docker exec -it uptime-kuma wget -q --spider https://hooks.slack.com && echo "Erişim OK" || echo "Erişim YOK"

# Discord için
docker exec -it uptime-kuma wget -q --spider https://discord.com/api && echo "Erişim OK" || echo "Erişim YOK"

DNS çözümleme sorunu yaşıyorsanız:

# docker-compose.yml içinde DNS ayarı
version: '3'
services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    volumes:
      - ./uptime-kuma-data:/app/data
    ports:
      - "3001:3001"
    dns:
      - 8.8.8.8
      - 1.1.1.1
    restart: always

Proxy Arkasında Bildirim Sorunu

Kurumsal ortamlarda Slack veya Discord’a direkt erişim bloklanmış olabilir. Uptime Kuma’nın proxy desteği var:

Settings > General > Proxy altında SOCKS5 veya HTTP proxy tanımlayabilirsiniz:

# Proxy formatı
http://proxy.sirket.local:8080

# Kimlik doğruma gerektiriyorsa
http://kullanici:[email protected]:8080

Proxy’yi tanımladıktan sonra her notification’ın ayarlarında bu proxy’yi aktif etmeniz gerekiyor.

Bildirim Test Etme ve Debug

Test Bildirimi Gönderme

Notification ayarlarında “Test” butonuna bastığınızda Uptime Kuma şuna benzer bir payload gönderiyor:

Slack için gönderilen JSON yapısı şöyle:

# Slack webhook'una gönderilen örnek payload
{
  "text": "Test notification from Uptime Kuma",
  "attachments": [{
    "color": "#00e096",
    "title": "Test",
    "text": "This is a test notification"
  }]
}

Eğer test başarısız olursa Uptime Kuma hata mesajı gösteriyor. En sık karşılaştığım hatalar:

  • “invalid_token”: Webhook URL yanlış kopyalanmış, genellikle sonunda veya ortada karakter eksik
  • “channel_not_found”: Kanal adını yanlış yazmışsınız, # işareti olmadan da olabilir
  • Connection timeout: Ağ erişimi sorunu, proxy gerekiyor olabilir

Notification Log Takibi

Uptime Kuma’nın arayüzünde Settings > Notifications altında her notification için son gönderim zamanını görebilirsiniz. Ama daha detaylı log için:

# Docker loglarına bakma
docker logs uptime-kuma --tail 100 | grep -i "notification|slack|discord|error"

# Canlı log takibi
docker logs -f uptime-kuma 2>&1 | grep -E "(notification|webhook|error|failed)"

Slack Block Kit ile Özelleştirilmiş Mesajlar

Uptime Kuma’nın Slack entegrasyonu temel format gönderiyor. Ama Slack’in Block Kit yapısını kullanarak çok daha zengin mesajlar göndermek mümkün. Bu için doğrudan Uptime Kuma’nın webhook entegrasyonu yerine notification ayarlarındaki “Custom Body” bölümünü kullanabilirsiniz (bu özellik bazı versiyonlarda mevcut):

{
  "blocks": [
    {
      "type": "header",
      "text": {
        "type": "plain_text",
        "text": "🚨 Servis Durumu Değişti"
      }
    },
    {
      "type": "section",
      "fields": [
        {
          "type": "mrkdwn",
          "text": "*Servis:*n{{name}}"
        },
        {
          "type": "mrkdwn",
          "text": "*Durum:*n{{status}}"
        }
      ]
    }
  ]
}

SSL Sertifika Bildirimleri

Uptime Kuma’nın SSL monitoring özelliği de Slack ve Discord’a bildirim gönderebiliyor. Bu için ayrı bir notification oluşturmanızı öneririm.

# HTTPS monitör tipi ile SSL takibi
# Monitör ayarlarında:
# - "Ignore TLS/SSL error": KAPALI tutun
# - SSL bildirimleri için "Notify Expiry": AÇIK
# - Kaç gün önce bildirim gelsin: 30, 14, 7 gün mantıklı

Sertifika yenileme alertlerini ayrı bir kanala yönlendirmek güzel bir pratik. #ssl-alerts gibi bir kanal açıp sadece bu bildirimleri oraya atarsanız ana monitoring kanalınız gereksiz mesajlardan arınmış olur.

Uptime Kuma API ile Programatik Bildirim Yönetimi

Eğer çok sayıda monitör yönetiyorsanız, UI üzerinden tek tek notification atamak yerine Uptime Kuma’nın HTTP API’sini kullanabilirsiniz:

# Önce oturum aç
curl -c cookies.txt -X POST http://localhost:3001/api/login 
  -H "Content-Type: application/json" 
  -d '{"username":"admin","password":"sifreniz"}'

# Notification listesini çek
curl -b cookies.txt http://localhost:3001/api/notifications

# Monitör listesini çek
curl -b cookies.txt http://localhost:3001/api/monitors

Büyük envanterlerde bu API üzerinden toplu işlemler yapabilirsiniz. Örneğin tüm monitörlere aynı anda yeni bir notification atamak için:

#!/bin/bash
# Tüm monitörlere notification ekle
MONITOR_IDS=$(curl -s -b cookies.txt http://localhost:3001/api/monitors | 
  python3 -c "import sys,json; data=json.load(sys.stdin); print(' '.join(str(m['id']) for m in data))")

for id in $MONITOR_IDS; do
  curl -b cookies.txt -X PATCH http://localhost:3001/api/monitor/$id 
    -H "Content-Type: application/json" 
    -d "{"notificationIDList":{"1":true}}"
  echo "Monitor $id guncellendi"
done

Karşılaştığım Tipik Sorunlar

Bildirim geliyor ama Türkçe karakterler bozuk: Bu genellikle container’ın locale ayarlarından kaynaklanıyor. Docker compose dosyanıza şunu ekleyin:

environment:
  - LANG=tr_TR.UTF-8
  - LC_ALL=tr_TR.UTF-8

Slack’te mesajlar geliyor ama mention çalışmıyor: ve Slack’in özel syntax’ı, @here değil. Notification mesajına eklerken buna dikkat edin.

Discord’da fazla mesaj geliyor, spam gibi: Monitör ayarlarındaki “Resend Notification” değerini kontrol edin. Ayrıca retry sayısını artırarak geçici kesintilerde false alarm azaltabilirsiniz.

Gece sessiz saatler için bildirim kapatma: Uptime Kuma’da native “maintenance window” özelliği var. Belirli saatler için monitoring’i duraklatabilirsiniz, bu sürede bildirim gönderilmez.

Sonuç

Uptime Kuma’nın Slack ve Discord entegrasyonu söz konusu olduğunda teknik kurulum aslında kolay kısım. Asıl mesele hangi servise hangi kanalda, hangi öncelikte bildirim gideceğini tasarlamak.

Ekibinizde birden fazla kişi varsa bildirimleri doğru kanallara yönlendirmek alert fatigue’i önlüyor. Her şeyi tek kanala yığarsanız insanlar mesajları ignore etmeye başlıyor ve kritik bir alarm gözden kaçıyor. Kademeli bir yapı kurun: kritik için ayrı, uyarı seviyesi için ayrı, bilgi amaçlı için ayrı.

Son olarak şunu söyleyeyim: Bildirim sistemini kurduktan sonra ayda bir “fire drill” yapın. Kasıtlı olarak bir test servisini down edin, bildirimin gerçekten gelip gelmediğini, doğru kişilere ulaşıp ulaşmadığını kontrol edin. Hiç bildirim gelmediğini siz kendiniz keşfetmek istemezsiniz, kullanıcıların şikayetiyle öğrenmek yerine.

Bir yanıt yazın

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