Discord Webhook’ları ile Ubuntu 18.04 Sunucunuzun Durumunu İzleme
Web sitenizin veya uygulamanızın kesintisiz çalışması, kullanıcı deneyimi ve iş sürekliliği açısından hayati önem taşır. Sunucunuzda meydana gelen beklenmedik bir kesinti, hem itibarınıza zarar verebilir hem de potansiyel gelir kaybına yol açabilir. Bu sorunu proaktif bir şekilde ele almak ve olası kesintileri hızla tespit etmek için otomatik bildirim sistemleri kurmak şarttır. Bu makalede, popüler iletişim platformu Discord’un sunduğu webhook özelliğini kullanarak, Ubuntu 18.04 üzerinde çalışan sunucunuzun durumunu izleyebileceğiniz ve herhangi bir sorun olduğunda anında bildirim alabileceğiniz bir sistemin nasıl kurulacağını adım adım inceleyeceğiz.
Discord Webhook Nedir?
Discord webhook’ları, harici uygulamaların Discord sunucularına otomatik olarak mesaj göndermesini sağlayan basit bir API’dir. Bir webhook URL’si oluşturarak, bu URL’ye HTTP POST istekleri göndererek istediğiniz metinleri, embed’leri (gömülü mesajlar) ve hatta resimleri Discord kanalınıza iletebilirsiniz. Bu özellik, sunucu durumu izleme, bot çıktıları, hata bildirimleri ve daha birçok otomasyon senaryosu için idealdir.
Neden Discord Webhook Kullanmalısınız?
* Gerçek Zamanlı Bildirimler: Sunucunuzda bir sorun oluştuğunda anında haberdar olursunuz, bu da müdahale sürenizi kısaltır.
* Kolay Kurulum: Karmaşık entegrasyonlara gerek kalmadan hızlıca yapılandırılabilir.
* Esneklik: Farklı izleme araçları ve komut dosyalarıyla entegre edilebilir.
* Merkezi İletişim: Ekip üyelerinizle veya kendinizle iletişim kurmak için tek bir merkezi nokta sağlar.
* Ücretsiz: Discord ve webhook özelliği ücretsizdir.
Ubuntu 18.04’te Gerekli Ön Hazırlıklar
Bu rehberi takip etmeden önce, Ubuntu 18.04 sunucunuzda aşağıdaki araçların kurulu olduğundan emin olmanız gerekir:
* curl: HTTP istekleri göndermek için kullanılan komut satırı aracı. Genellikle varsayılan olarak yüklüdür.
* jq: JSON verilerini işlemek için kullanılan bir komut satırı JSON işlemcisidir. Bildirim mesajlarını daha yapılandırılmış hale getirmek için kullanacağız.
* Temel Linux Komut Satırı Bilgisi: Komutları çalıştırmak, dosyaları düzenlemek ve servisleri yönetmek için temel seviyede Linux bilgisi gereklidir.
Eğer jq kurulu değilse, aşağıdaki komutla yükleyebilirsiniz:
sudo apt update
sudo apt install jq -y
Adım 1: Discord’da Bir Webhook Oluşturma
İlk adım, bildirimlerin gönderileceği Discord sunucusunda bir webhook oluşturmaktır.
1. Discord Sunucunuza Gidin: Bildirimleri almak istediğiniz Discord sunucusunu açın.
2. Kanal Ayarlarına Erişin: Bildirimlerin gönderileceği metin kanalını sağ tıklayın ve “Kanal Ayarları”nı seçin.
3. Webhook Sekmesine Gidin: Sol menüden “Webhook’lar” seçeneğini tıklayın.
4. Yeni Webhook Oluşturun: “Webhook Oluştur” düğmesine tıklayın.
5. Webhook’u Yapılandırın:
* Webhook Adı: Bildiriminizi tanımlayan bir isim verin (örn. “Sunucu Durum Bildirimi”).
* Kanal: Bildirimin hangi kanala gönderileceğini seçtiğinizden emin olun.
* Webhook URL’sini Kopyalayın: Bu adımda “Webhook URL’sini Kopyala” düğmesine tıklayarak webhook URL’nizi alın. Bu URL’yi güvenli bir yerde saklayın, çünkü bu URL’ye sahip olan herkes sunucunuza mesaj gönderebilir.
6. Kaydedin: Değişiklikleri kaydetmek için “Değişiklikleri Kaydet” düğmesine tıklayın.
Webhook URL’niz artık hazırdır. Bu URL’yi bir sonraki adımda kullanacağız.
Adım 2: Basit Bir Durum Kontrol Komut Dosyası Oluşturma
Şimdi, sunucumuzun temel bir durumunu kontrol edecek ve sorun algılandığında Discord webhook’una bildirim gönderecek bir bash komut dosyası oluşturacağız. Bu örnekte, sunucunun ping’e yanıt verip vermediğini basitçe kontrol edeceğiz. Daha gelişmiş senaryolar için ping yerine farklı komutlar veya araçlar kullanabilirsiniz (örn. curl ile web sitesine istek atmak, servislerin çalışıp çalışmadığını kontrol etmek vb.).
Bir metin editörü kullanarak yeni bir dosya oluşturun (örn. check_status.sh):
nano check_status.sh
Aşağıdaki içeriği dosyaya yapıştırın ve YOUR_DISCORD_WEBHOOK_URL kısmını kendi Discord webhook URL’niz ile değiştirin:
#!/bin/bash
Discord webhook URL'nizi buraya yapıştırın
WEBHOOK_URL="YOUR_DISCORD_WEBHOOK_URL"
Sunucunuzun adresi veya IP'si (kontrol edilecek hedef)
TARGET_HOST="localhost" # Veya sunucunuzun harici IP'si/alan adı
Ping komutunu çalıştır ve çıktıyı yakala
if ping -c 3 "$TARGET_HOST" &> /dev/null; then
# Ping başarılıysa
STATUS="✅ Başarılı"
COLOR=306699 # Yeşil
MESSAGE="Sunucu '$TARGET_HOST' ping'e yanıt veriyor."
else
# Ping başarısızsa
STATUS="❌ Başarısız"
COLOR=16711680 # Kırmızı
MESSAGE="Sunucu '$TARGET_HOST' ping'e yanıt vermiyor! Lütfen kontrol edin."
fi
Discord için JSON payload oluşturma
JSON_PAYLOAD=$(jq -n \
--arg content "$MESSAGE" \
--arg status "$STATUS" \
--argjson color "$COLOR" \
'{
embeds: [
{
title: "Sunucu Durum Kontrolü",
description: $content,
color: $color,
fields: [
{
name: "Durum",
value: $status,
inline: true
},
{
name: "Hedef",
value: "'$TARGET_HOST'",
inline: true
}
],
footer: {
text: "Otomatik Bildirim - Ubuntu 18.04"
}
}
]
}')
Discord webhook'una POST isteği gönderme
curl -H "Content-Type: application/json" -X POST -d "$JSON_PAYLOAD" "$WEBHOOK_URL"
echo "Durum kontrolü tamamlandı ve bildirim gönderildi."
Dosyayı Kaydetme ve Çıkma:
nano editöründe Ctrl + X, ardından Y ve Enter tuşlarına basarak dosyayı kaydedip çıkın.
Komut Dosyasını Çalıştırılabilir Hale Getirme:
Oluşturduğunuz komut dosyasını çalıştırmak için izin verin:
chmod +x check_status.sh
Test Etme:
Komut dosyasını manuel olarak çalıştırarak test edin:
./check_status.sh
Eğer her şey doğru yapılandırıldıysa, Discord kanalınızda bir bildirim görmelisiniz. Eğer TARGET_HOST olarak localhost belirttiyseniz ve sunucunuzda ağ sorunu yoksa, “Başarılı” bildirimini almalısınız. Farklı bir host adresi veya IP girerek de test edebilirsiniz.
Adım 3: Otomatik Zamanlama (Cron Jobs)
Sunucunuzun durumunu sürekli izlemek için bu komut dosyasını düzenli aralıklarla çalıştırmamız gerekiyor. Bunun için Linux’un cron zamanlayıcısını kullanacağız.
1. Crontab’ı Açma: Kullanıcınız için crontab düzenleyicisini açın:
crontab -e
Eğer ilk kez crontab -e komutunu çalıştırıyorsanız, hangi editörü kullanmak istediğinizi sorabilir. Nano genellikle en kullanıcı dostu olanıdır.
2. Yeni Cron Görevi Ekleme: Dosyanın sonuna aşağıdaki satırı ekleyin. Bu örnek, komut dosyasını her 5 dakikada bir çalıştıracaktır:
/5 * /path/to/your/check_status.sh
Önemli: /path/to/your/check_status.sh kısmını, check_status.sh dosyanızın tam yolu ile değiştirin. Dosyanızın tam yolunu öğrenmek için pwd komutunu kullanabilirsiniz. Örneğin, dosyanız /home/ubuntu/scripts/check_status.sh konumundaysa, satır şöyle görünür:
/5 * /home/ubuntu/scripts/check_status.sh
Cron Zamanlama Anlamları:
/5: Her 5 dakikada bir
: Her saat
: Her gün
: Her ay
: Her hafta
Daha sık veya seyrek kontrol etmek isterseniz, bu zamanlamayı ayarlayabilirsiniz. Örneğin, her saat başı çalıştırmak için:
0 /path/to/your/check_status.sh
Her gün saat 08:00’de çalıştırmak için:
0 8 * /path/to/your/check_status.sh
3. Crontab’ı Kaydetme ve Çıkma: Dosyayı kaydedip çıktığınızda, crontab: installing new crontab gibi bir mesaj görmelisiniz. Bu, cron görevinizin başarıyla eklendiği anlamına gelir.
Artık sunucunuzun durumu, belirlediğiniz aralıklarla kontrol edilecek ve bir sorun olduğunda Discord kanalınıza bildirim gönderilecektir.
Adım 4: Gelişmiş Durum Kontrol Senaryoları
Yukarıdaki ping tabanlı kontrol, temel bir örnektir. Gerçek dünya senaryolarında daha kapsamlı kontroller yapmanız gerekebilir. İşte birkaç örnek:
4.1. Web Sunucusu Durum Kontrolü (curl)
Web sitenizin veya API’nizin çalışıp çalışmadığını kontrol etmek için curl komutunu kullanabilirsiniz.
check_web_status.sh adında yeni bir dosya oluşturun:
nano check_web_status.sh
Aşağıdaki içeriği ekleyin ve YOUR_DISCORD_WEBHOOK_URL ile YOUR_WEBSITE_URL kısımlarını güncelleyin:
#!/bin/bash
WEBHOOK_URL="YOUR_DISCORD_WEBHOOK_URL"
WEBSITE_URL="YOUR_WEBSITE_URL" # Örn: "https://www.example.com"
Curl ile web sitesine istek at ve HTTP durum kodunu al
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "$WEBSITE_URL")
if [ "$HTTP_CODE" == "200" ]; then
STATUS="✅ Başarılı"
COLOR=306699 # Yeşil
MESSAGE="Web siteniz '$WEBSITE_URL' erişilebilir (HTTP 200 OK)."
else
STATUS="❌ Başarısız"
COLOR=16711680 # Kırmızı
MESSAGE="Web siteniz '$WEBSITE_URL' erişilemiyor! HTTP Durum Kodu: $HTTP_CODE."
fi
JSON_PAYLOAD=$(jq -n \
--arg content "$MESSAGE" \
--arg status "$STATUS" \
--argjson color "$COLOR" \
'{
embeds: [
{
title: "Web Sitesi Durum Kontrolü",
description: $content,
color: $color,
fields: [
{
name: "Durum",
value: $status,
inline: true
},
{
name: "URL",
value: "'$WEBSITE_URL'",
inline: true
}
],
footer: {
text: "Otomatik Bildirim - Ubuntu 18.04"
}
}
]
}')
curl -H "Content-Type: application/json" -X POST -d "$JSON_PAYLOAD" "$WEBHOOK_URL"
echo "Web sitesi durum kontrolü tamamlandı."
Bu komut dosyasını da çalıştırılabilir hale getirin (chmod +x check_web_status.sh) ve crontab -e ile zamanlayın.
4.2. Servis Durum Kontrolü (systemctl)
Bir uygulamanızın veya servisinizin (örn. Nginx, Apache, Docker) çalışıp çalışmadığını kontrol etmek için systemctl komutunu kullanabilirsiniz.
check_service_status.sh adında yeni bir dosya oluşturun:
nano check_service_status.sh
Aşağıdaki içeriği ekleyin ve YOUR_DISCORD_WEBHOOK_URL ile YOUR_SERVICE_NAME kısımlarını güncelleyin:
#!/bin/bash
WEBHOOK_URL="YOUR_DISCORD_WEBHOOK_URL"
SERVICE_NAME="nginx" # Kontrol edilecek servis adı (örn. nginx, apache2, docker)
Servisin durumunu kontrol et
if systemctl is-active --quiet "$SERVICE_NAME"; then
STATUS="✅ Çalışıyor"
COLOR=306699 # Yeşil
MESSAGE="Servis '$SERVICE_NAME' aktif durumda."
else
STATUS="❌ Durdu"
COLOR=16711680 # Kırmızı
MESSAGE="Servis '$SERVICE_NAME' durmuş! Lütfen başlatın veya kontrol edin."
fi
JSON_PAYLOAD=$(jq -n \
--arg content "$MESSAGE" \
--arg status "$STATUS" \
--argjson color "$COLOR" \
'{
embeds: [
{
title: "Servis Durum Kontrolü",
description: $content,
color: $color,
fields: [
{
name: "Durum",
value: $status,
inline: true
},
{
name: "Servis Adı",
value: "'$SERVICE_NAME'",
inline: true
}
],
footer: {
text: "Otomatik Bildirim - Ubuntu 18.04"
}
}
]
}')
curl -H "Content-Type: application/json" -X POST -d "$JSON_PAYLOAD" "$WEBHOOK_URL"
echo "Servis durum kontrolü tamamlandı."
Bu komut dosyasını da çalıştırılabilir hale getirin (chmod +x check_service_status.sh) ve crontab -e ile zamanlayın.
Gelişmiş Konfigürasyonlar ve İpuçları
* Hata Yönetimi: Komut dosyalarınızda hata yönetimi ekleyerek, beklenmedik durumları da loglayabilir veya bildirebilirsiniz.
* Çoklu Webhook’lar: Farklı türdeki bildirimler için farklı Discord kanallarına veya webhook’lara gönderebilirsiniz.
* Embed Özellikleri: Discord webhook’ları, daha zengin ve görsel olarak çekici mesajlar oluşturmak için “embeds” özelliğini destekler. Yukarıdaki örneklerde bu özellik kullanılmıştır. Başlık, açıklama, alanlar, renk, resim ve alt bilgi gibi birçok alanı özelleştirebilirsiniz.
* Güvenlik: Webhook URL’nizi asla herkese açık bir şekilde paylaşmayın. Komut dosyalarınızda URL’yi doğrudan yazmak yerine ortam değişkenleri veya güvenli bir yapılandırma dosyası kullanmayı düşünebilirsiniz.
* Daha Karmaşık Kontroller: nagios, zabbix gibi daha gelişmiş izleme araçlarıyla entegre ederek veya python gibi dillerde özel scriptler yazarak daha detaylı kontroller (CPU kullanımı, disk alanı, bellek kullanımı vb.) yapabilirsiniz. Bu scriptler, izleme aracının ürettiği çıktıları işleyip Discord’a bildirim gönderebilir.
* Bildirim Yoğunluğunu Yönetme: Çok sık hata bildirimi almak can sıkıcı olabilir. Hata durumunda ilk bildirimden sonra, sorunun devam ettiği sürece bildirim göndermeyi geciktirecek veya belirli bir süre içinde tekrar eden hataları gruplandıracak mantıklar ekleyebilirsiniz.
* Ubuntu 18.04 Desteği: Ubuntu 18.04 (Bionic Beaver) artık ana akım destekten çıkmış olsa da, bu makalede anlatılan araçlar (bash, curl, jq, cron) hala geçerlidir. Daha güncel bir Ubuntu sürümü kullanıyorsanız, adımlar benzer olacaktır.
Sonuç
Discord webhook’ları, sunucu durumunu izlemek ve olası sorunlar hakkında anında bildirim almak için güçlü ve esnek bir araçtır. Bu makalede, Ubuntu 18.04 üzerinde basit bir ping kontrolünden başlayarak, web sitesi ve servis durum kontrollerini içeren daha gelişmiş senaryolara kadar adım adım bir kurulum rehberi sunduk. cron zamanlayıcısı ile bu kontrolleri otomatikleştirerek, sunucunuzun sağlığı hakkında proaktif bir şekilde bilgi sahibi olabilir ve kesintileri en aza indirebilirsiniz. Kendi ihtiyaçlarınıza göre bu temel yapıyı genişleterek daha karmaşık izleme çözümleri oluşturabilirsiniz. Unutmayın, proaktif izleme, kesintisiz hizmetin anahtarıdır.