Linux / Bash
curl ile Alertalk webhook entegrasyonu. Systemd servis izleme, cron job kontrolü, disk/CPU/RAM izleme, log dosyası izleme, SSL sertifika ve website uptime kontrolü için hazır bash scriptleri.
curl gerekli. Ubuntu, Debian, RHEL, CentOS ve türevleri desteklenir.
Temel Fonksiyon
Tüm senaryolarda kullanılan temel fonksiyon. Kendi scriptlerinizin başına kopyalayın.
#!/bin/bash ALERTALK_KEY="YOUR_WEBHOOK_KEY" ALERTALK_URL="https://tr.alertalk.net/webhook/receive" send_alert() { local phone="$1" local message="$2" curl -s -X POST "${ALERTALK_URL}" \ -H "Content-Type: application/json" \ -H "X-Webhook-Key: ${ALERTALK_KEY}" \ -d "{\"phone_number\":\"${phone}\",\"error_message\":\"${message}\"}" \ --max-time 10 \ --silent } # Kullanim send_alert "5XXXXXXXXX" "Test alarmi: entegrasyon basarili"
Hata Yönetimi
send_alert() { local phone="$1" local message="$2" local retries=3 local attempt=0 while [ $attempt -lt $retries ]; do http_code=$(curl -s -o /dev/null -w "%{http_code}" \ -X POST "${ALERTALK_URL}" \ -H "Content-Type: application/json" \ -H "X-Webhook-Key: ${ALERTALK_KEY}" \ -d "{\"phone_number\":\"${phone}\",\"error_message\":\"${message}\"}" \ --max-time 10) if [ "${http_code}" = "200" ]; then return 0 fi attempt=$((attempt + 1)) sleep 5 done # 3 deneme basarisiz — loga yaz echo "$(date): Alertalk webhook basarisiz (HTTP ${http_code})" >> /var/log/alertalk.log }
Gerçek Senaryolar
Systemd Servis İzleme
Servis durduğunda otomatik sesli alarm — ExecStopPost ile
Systemd'nin ExecStopPost direktifi servisi durduğunda çalışacak komutu belirtir. Cron gerekmez — servis düşer düşmez alarm tetiklenir.
[Unit] Description=My Application After=network.target [Service] Type=simple User=www-data ExecStart=/usr/bin/python3 /opt/myapp/app.py Restart=on-failure RestartSec=5 # Servis durduğunda Alertalk'a webhook gönder ExecStopPost=/bin/bash -c \ 'curl -s -X POST "https://tr.alertalk.net/webhook/receive" \ -H "Content-Type: application/json" \ -H "X-Webhook-Key: YOUR_WEBHOOK_KEY" \ -d "{\"phone_number\":\"5XXXXXXXXX\",\"error_message\":\"$(hostname) - myapp servisi durdu\"}" \ --max-time 10' [Install] WantedBy=multi-user.target
systemctl daemon-reload systemctl restart myapp
Restart=on-failure ile systemd servisi otomatik yeniden başlatır. ExecStopPost her durumda çalışır.
Cron Job Başarısız Kontrol
Exit code kontrolü ile cron job başarısız olunca ara
#!/bin/bash # /opt/scripts/backup.sh — cron'dan cagrilir ALERTALK_KEY="YOUR_WEBHOOK_KEY" PHONE="5XXXXXXXXX" HOSTNAME=$(hostname) # Asil islemi calistir /usr/bin/rsync -az /data/ [email protected]:/backup/ EXIT_CODE=$? if [ $EXIT_CODE -ne 0 ]; then curl -s -X POST "https://tr.alertalk.net/webhook/receive" \ -H "Content-Type: application/json" \ -H "X-Webhook-Key: ${ALERTALK_KEY}" \ -d "{\"phone_number\":\"${PHONE}\",\"error_message\":\"${HOSTNAME} - Yedekleme basarisiz oldu (hata kodu: ${EXIT_CODE})\"}" \ --max-time 10 fi exit $EXIT_CODE
# Her gece 02:00'da calistir 0 2 * * * /opt/scripts/backup.sh >> /var/log/backup.log 2>&1
Disk / CPU / RAM İzleme
Sistem kaynakları eşik değerini aşınca sesli alarm
#!/bin/bash # /opt/scripts/resource_check.sh ALERTALK_KEY="YOUR_WEBHOOK_KEY" PHONE="5XXXXXXXXX" HOSTNAME=$(hostname) # Esik degerleri (%) DISK_THRESHOLD=85 CPU_THRESHOLD=90 RAM_THRESHOLD=90 send_alert() { curl -s -X POST "https://tr.alertalk.net/webhook/receive" \ -H "Content-Type: application/json" \ -H "X-Webhook-Key: ${ALERTALK_KEY}" \ -d "{\"phone_number\":\"${PHONE}\",\"error_message\":\"$1\"}" \ --max-time 10 --silent } # --- DİSK KONTROLU --- while IFS= read -r line; do usage=$(echo "$line" | awk '{print $5}' | tr -d '%') mount=$(echo "$line" | awk '{print $6}') if [ "$usage" -ge $DISK_THRESHOLD ] 2>/dev/null; then send_alert "${HOSTNAME} - Disk dolu: ${mount} %${usage} kullanimda" fi done < <(df -h | tail -n +2) # --- CPU KONTROLU --- cpu_idle=$(top -bn1 | grep "Cpu(s)" | awk '{print $8}' | tr -d '%id,') cpu_usage=$(echo "100 - ${cpu_idle}" | bc | cut -d'.' -f1) if [ "${cpu_usage}" -ge $CPU_THRESHOLD ] 2>/dev/null; then send_alert "${HOSTNAME} - CPU kullanimi kritik: %${cpu_usage}" fi # --- RAM KONTROLU --- ram_total=$(free | grep Mem | awk '{print $2}') ram_used=$(free | grep Mem | awk '{print $3}') ram_usage=$(( ram_used * 100 / ram_total )) if [ "${ram_usage}" -ge $RAM_THRESHOLD ]; then ram_free_mb=$(( (ram_total - ram_used) / 1024 )) send_alert "${HOSTNAME} - RAM kullanimi kritik: %${ram_usage}, kalan: ${ram_free_mb}MB" fi
*/5 * * * * /bin/bash /opt/scripts/resource_check.shLog Dosyası İzleme
tail + grep ile log dosyasında belirli pattern gelince ara
#!/bin/bash # /opt/scripts/logwatch.sh — systemd service olarak calistir ALERTALK_KEY="YOUR_WEBHOOK_KEY" PHONE="5XXXXXXXXX" HOSTNAME=$(hostname) LOG_FILE="/var/log/myapp/app.log" # Izlenecek kritik patternlar PATTERNS=("CRITICAL" "FATAL" "OutOfMemoryError" "Connection refused") # Log dosyasini gercek zamanli izle tail -F "${LOG_FILE}" | while IFS= read -r line; do for pattern in "${PATTERNS[@]}"; do if echo "${line}" | grep -q "${pattern}"; then msg="${HOSTNAME} - Log alarmı [${pattern}]: $(echo ${line} | cut -c1-120)" curl -s -X POST "https://tr.alertalk.net/webhook/receive" \ -H "Content-Type: application/json" \ -H "X-Webhook-Key: ${ALERTALK_KEY}" \ -d "{\"phone_number\":\"${PHONE}\",\"error_message\":\"${msg}\"}" \ --max-time 10 --silent sleep 60 # 60 sn cooldown — spam onleme break fi done done
[Unit] Description=Alertalk Log Watcher After=network.target [Service] Type=simple ExecStart=/bin/bash /opt/scripts/logwatch.sh Restart=always RestartSec=10 [Install] WantedBy=multi-user.target
systemctl daemon-reload systemctl enable --now alertalk-logwatch
SSL Sertifika Bitiş Kontrolü
Sertifika sona ermeden 30/14/7 gün önce sesli uyarı
#!/bin/bash # /opt/scripts/ssl_check.sh ALERTALK_KEY="YOUR_WEBHOOK_KEY" PHONE="5XXXXXXXXX" HOSTNAME=$(hostname) WARNING_DAYS=30 # kac gun kala uyari verilsin # Kontrol edilecek domainler DOMAINS=("alertalk.net" "example.com" "api.myapp.com") for domain in "${DOMAINS[@]}"; do # SSL sertifika bitis tarihini al expiry=$(echo | openssl s_client -servername "${domain}" \ -connect "${domain}:443" 2>/dev/null \ | openssl x509 -noout -enddate 2>/dev/null \ | cut -d= -f2) if [ -z "${expiry}" ]; then # Sertifikaya ulasilamiyor curl -s -X POST "https://tr.alertalk.net/webhook/receive" \ -H "Content-Type: application/json" \ -H "X-Webhook-Key: ${ALERTALK_KEY}" \ -d "{\"phone_number\":\"${PHONE}\",\"error_message\":\"${domain} SSL sertifikasina ulasilamiyor\"}" \ --max-time 10 --silent continue fi # Kalan gun hesapla expiry_epoch=$(date -d "${expiry}" +%s 2>/dev/null || date -j -f "%b %d %T %Y %Z" "${expiry}" +%s) now_epoch=$(date +%s) days_left=$(( (expiry_epoch - now_epoch) / 86400 )) if [ "${days_left}" -le $WARNING_DAYS ]; then curl -s -X POST "https://tr.alertalk.net/webhook/receive" \ -H "Content-Type: application/json" \ -H "X-Webhook-Key: ${ALERTALK_KEY}" \ -d "{\"phone_number\":\"${PHONE}\",\"error_message\":\"${domain} SSL sertifikasi ${days_left} gun icinde sona eriyor\"}" \ --max-time 10 --silent fi done
0 9 * * * /bin/bash /opt/scripts/ssl_check.shWebsite Uptime İzleme
curl ile HTTP durum kodu kontrolü, erişilemeyen sitede sesli alarm
#!/bin/bash # /opt/scripts/uptime_check.sh ALERTALK_KEY="YOUR_WEBHOOK_KEY" PHONE="5XXXXXXXXX" HOSTNAME=$(hostname) # Izlenecek siteler SITES=("https://alertalk.net" "https://api.myapp.com/health") for site in "${SITES[@]}"; do http_code=$(curl -s -o /dev/null -w "%{http_code}" \ --max-time 10 \ --retry 2 \ "${site}") if [ "${http_code}" != "200" ]; then # 200 degil — alarm msg="${site} erisemiyor (HTTP ${http_code}) - ${HOSTNAME}" curl -s -X POST "https://tr.alertalk.net/webhook/receive" \ -H "Content-Type: application/json" \ -H "X-Webhook-Key: ${ALERTALK_KEY}" \ -d "{\"phone_number\":\"${PHONE}\",\"error_message\":\"${msg}\"}" \ --max-time 10 --silent fi done
*/3 * * * * /bin/bash /opt/scripts/uptime_check.sh