-
Sadrazamv4
ig:sadrazam_v4 tg: Sadrazam.spy
🏆 BAŞTAN SONA BASH SCRIPTING BÖLÜM-10 (FİNAL): Uçtan Uca Sistem İzleme ve Bildirim Projesi 🐚
Selamlar dostlar!
10 bölümlük dev Bash Scripting serimizin muhteşem final bölümüne hoş geldiniz! 🎉
İlk bölümden bu yana Shebang yapısını, değişkenleri, koşul bloklarını, döngüleri, fonksiyonları, dizileri, `cut`/`awk`/`sed` ile metin işlemeyi, hata yönetimini (`trap`, `set -euo pipefail`) ve Cron Jobs ile zamanlanmış görevleri adım adım işledik.
Bu final bölümünde, öğrendiğimiz tüm teknikleri birleştirerek gerçek hayatta sunucularda çalışan **Uçtan Uca Sistem İzleme (System Monitoring) ve Telegram Bildirim Betiği** projesini geliştireceğiz! 🚀
---
📌 1. Projenin Amacı ve Özellikleri 🎯
Geliştireceğimiz betik aşağıdaki görevleri otomatik olarak yerine getirecek:
1. **Güvenlik & Bağımlılık Kontrolü:** Root yetkisi, gerekli araçlar (`curl`, `awk`, `df` vb.) ve konfigürasyon varlığını denetleyecek.
2. **Sistem Metriklerini Toplama:** CPU yükünü, RAM kullanımını, Disk doluluk oranını ve Sistem Uptime süresini anlık analiz edecek.
3. **Eşik Değer (Threshold) Kontrolü:** Belirlenen kritik sınırların (Örn: %80 Disk kullanımı, %85 RAM kullanımı) aşılıp aşılmadığını kontrol edecek.
4. **Loglama ve Raporlama:** Tüm çıktıları zaman damgasıyla bir log dosyasına kaydedecek.
5. **Anlık Telegram Bildirimi:** Kritik eşik aşıldığında veya günlük özet rapor anında Telegram Bot API üzerinden yöneticinin telefonuna mesaj atacak.
---
🏗️ 2. Uçtan Uca Sistem İzleme Betiği Kodu 📜
Aşağıdaki kodu `sistem_izleyici.sh` adıyla kaydedip çalıştırma izni (`chmod +x sistem_izleyici.sh`) verebilirsiniz:
#!/bin/bash
# ==============================================================================
# Başlık : sistem_izleyici.sh
# Açıklama : Otomatik Sistem Metrik İzleme ve Telegram Bildirim Betiği
# Yazar : Bash Scripting Serisi Final Projesi
# ==============================================================================
set -euo pipefail
# ------------------------------------------------------------------------------
# KONFİGÜRASYON VE EŞİK DEĞERLERİ
# ------------------------------------------------------------------------------
LOG_DOSYASI="/var/log/sistem_izleme.log"
CPU_ESIK=80
RAM_ESIK=85
DISK_ESIK=80
# Telegram Bot Bilgileri (Kendi Bot Token ve Chat ID değerlerinizi girin)
BOT_TOKEN="123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ"
CHAT_ID="987654321"
# ------------------------------------------------------------------------------
# YARDIMCI FONKSİYONLAR
# ------------------------------------------------------------------------------
# Zaman damgalı log yazma fonksiyonu
log_yaz() {
local SEVIYE=$1
local MESAJ=$2
local TARIH
TARIH=$(date "+%Y-%m-%d %H:%M:%S")
echo "[$TARIH] [$SEVIYE] $MESAJ" | tee -a "$LOG_DOSYASI"
}
# Temizlik fonksiyonu (trap ile yakalanır)
temizlik() {
log_yaz "INFO" "Sistem izleme görevi tamamlandı ve temizlik yapıldı."
}
trap temizlik EXIT
# Telegram Mesaj Gönderme Fonksiyonu
telegram_gonder() {
local MESAJ=$1
if [[ "$BOT_TOKEN" != "123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ" ]]; then
curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
-d "chat_id=${CHAT_ID}" \
-d "text=${MESAJ}" \
-d "parse_mode=Markdown" > /dev/null || log_yaz "ERROR" "Telegram mesajı gönderilemedi!"
else
log_yaz "WARN" "Telegram BOT_TOKEN yapılandırılmamış, bildirim atlanıyor."
fi
}
# ------------------------------------------------------------------------------
# METRİK TOPLAMA VE ANALİZ
# ------------------------------------------------------------------------------
sistem_kontrol_et() {
log_yaz "INFO" "--- Sistem Taraması Başlatıldı ---"
# 1. CPU Kullanımı Hesaplama (awk ile)
local CPU_KULLANIM
CPU_KULLANIM=$(top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8}' | cut -d. -f1)
# 2. RAM Kullanımı Hesaplama
local RAM_KULLANIM
RAM_KULLANIM=$(free | awk '/Mem:/ {printf("%.0f"), $3/$2 * 100}')
# 3. Disk Kullanımı Hesaplama (Kök dizin /)
local DISK_KULLANIM
DISK_KULLANIM=$(df -h / | awk 'NR==2 {print $5}' | tr -d '%')
# 4. Uptime Bilgisi
local UPTIME_BILGI
UPTIME_BILGI=$(uptime -p)
log_yaz "INFO" "Metrikler -> CPU: %${CPU_KULLANIM} | RAM: %${RAM_KULLANIM} | DISK: %${DISK_KULLANIM} | Uptime: $UPTIME_BILGI"
# Eşik Değer Kontrolleri ve Uyarı Mekanizması
local UYARI_VAR=0
local BILDIRIM_METNI="🚨 *SİSTEM UYARISI DETAYI* 🚨%0A%0A"
BILDIRIM_METNI+="🖥️ *Sunucu:* $(hostname)%0A"
BILDIRIM_METNI+="⏱️ *Uptime:* $UPTIME_BILGI%0A%0A"
if [ "$CPU_KULLANIM" -ge "$CPU_ESIK" ]; then
log_yaz "WARN" "KRİTİK: CPU kullanımı eşik değeri aştı! (%${CPU_KULLANIM})"
BILDIRIM_METNI+="⚠️ *Yüksek CPU:* %${CPU_KULLANIM} (Eşik: %${CPU_ESIK})%0A"
UYARI_VAR=1
fi
if [ "$RAM_KULLANIM" -ge "$RAM_ESIK" ]; then
log_yaz "WARN" "KRİTİK: RAM kullanımı eşik değeri aştı! (%${RAM_KULLANIM})"
BILDIRIM_METNI+="⚠️ *Yüksek RAM:* %${RAM_KULLANIM} (Eşik: %${RAM_ESIK})%0A"
UYARI_VAR=1
fi
if [ "$DISK_KULLANIM" -ge "$DISK_ESIK" ]; then
log_yaz "WARN" "KRİTİK: Disk kullanımı eşik değeri aştı! (%${DISK_KULLANIM})"
BILDIRIM_METNI+="⚠️ *Yüksek Disk:* %${DISK_KULLANIM} (Eşik: %${DISK_ESIK})%0A"
UYARI_VAR=1
fi
# Eğer herhangi bir eşik aşıldıysa Telegram'a anlık uyarı at
if [ "$UYARI_VAR" -eq 1 ]; then
telegram_gonder "$BILDIRIM_METNI"
else
log_yaz "INFO" "Tüm sistem metrikleri normal sınırlar içerisinde."
fi
}
# ------------------------------------------------------------------------------
# ANA ÇALIŞTIRMA MANTIĞI
# ------------------------------------------------------------------------------
main() {
# Log dosyasının dizinini doğrula
local LOG_DIZIN
LOG_DIZIN=$(dirname "$LOG_DOSYASI")
if [ ! -d "$LOG_DIZIN" ]; then
mkdir -p "$LOG_DIZIN"
fi
sistem_kontrol_et
}
main "$@"
---
⏰ 3. Otomatizasyon: Betiği Cron'a Bağlama 🔄
Oluşturduğumuz bu izleme betiğinin her 5 dakikada bir otomatik çalışıp sunucuyu denetlemesi için `crontab` dosyamıza ekliyoruz:
1. Crontab düzenleyiciyi açın:
crontab -e
2. Satırın en altına şu görevi ekleyin:
*/5 * * * * /bin/bash /root/scripts/sistem_izleyici.sh > /dev/null 2>&1
---
📊 4. Serinin Genel Özeti ve Kapanış 🏁
| Bölüm | Konu Başlığı |
| :--- | :--- |
| Bölüm 1 - 2 | Giriş, Shebang (`#!/bin/bash`), İzinler (`chmod`), Değişkenler, `read`, Çevre Değişkenleri |
| Bölüm 3 - 4 | Aritmetik İşlemler, `if/else`, Karşılaştırma Operatörleri, `for`, `while`, `until` Döngüleri |
| Bölüm 5 - 6 | Modüler Fonksiyonlar, `local` Kapsamı, `select` Menüleri, İndeksli ve İlişkisel Diziler |
| Bölüm 7 - 8 | Metin İşleme (`cut`, `awk`, `sed`), Exit Status (`$?`), `set -euo pipefail`, Debugging, `trap` |
| Bölüm 9 | Cron Jobs (`crontab`), `nohup`, Arka Plan Yönetimi, Otomatik Yedekleme |
| Bölüm 10 | **FİNAL:** Uçtan Uca Sistem İzleme ve Telegram Bildirim Projesi |
---
🎉 TEBRİKLER! 🎉
Baştan Sona Bash Scripting rehber serisini başarıyla tamamladınız!
Artık Linux/Unix sistemlerde rutin işleri otomatikleştirebilen, sunucu durumlarını izleyebilen, metin verilerini kolayca işleyebilen ve güvenli betikler yazabilen yetkin bir Shell Scripter
oldunuz! 🐚✨
Sorularınızı, görüşlerinizi ve serimizle ilgili yorumlarınızı paylaşmayı unutmayın.
Shell'iniz açık, betikleriniz hatasız çalışsın! Kodla kalın! 🐚🚀
Selamlar dostlar!
10 bölümlük dev Bash Scripting serimizin muhteşem final bölümüne hoş geldiniz! 🎉
İlk bölümden bu yana Shebang yapısını, değişkenleri, koşul bloklarını, döngüleri, fonksiyonları, dizileri, `cut`/`awk`/`sed` ile metin işlemeyi, hata yönetimini (`trap`, `set -euo pipefail`) ve Cron Jobs ile zamanlanmış görevleri adım adım işledik.
Bu final bölümünde, öğrendiğimiz tüm teknikleri birleştirerek gerçek hayatta sunucularda çalışan **Uçtan Uca Sistem İzleme (System Monitoring) ve Telegram Bildirim Betiği** projesini geliştireceğiz! 🚀
---
📌 1. Projenin Amacı ve Özellikleri 🎯
Geliştireceğimiz betik aşağıdaki görevleri otomatik olarak yerine getirecek:
1. **Güvenlik & Bağımlılık Kontrolü:** Root yetkisi, gerekli araçlar (`curl`, `awk`, `df` vb.) ve konfigürasyon varlığını denetleyecek.
2. **Sistem Metriklerini Toplama:** CPU yükünü, RAM kullanımını, Disk doluluk oranını ve Sistem Uptime süresini anlık analiz edecek.
3. **Eşik Değer (Threshold) Kontrolü:** Belirlenen kritik sınırların (Örn: %80 Disk kullanımı, %85 RAM kullanımı) aşılıp aşılmadığını kontrol edecek.
4. **Loglama ve Raporlama:** Tüm çıktıları zaman damgasıyla bir log dosyasına kaydedecek.
5. **Anlık Telegram Bildirimi:** Kritik eşik aşıldığında veya günlük özet rapor anında Telegram Bot API üzerinden yöneticinin telefonuna mesaj atacak.
---
🏗️ 2. Uçtan Uca Sistem İzleme Betiği Kodu 📜
Aşağıdaki kodu `sistem_izleyici.sh` adıyla kaydedip çalıştırma izni (`chmod +x sistem_izleyici.sh`) verebilirsiniz:
#!/bin/bash
# ==============================================================================
# Başlık : sistem_izleyici.sh
# Açıklama : Otomatik Sistem Metrik İzleme ve Telegram Bildirim Betiği
# Yazar : Bash Scripting Serisi Final Projesi
# ==============================================================================
set -euo pipefail
# ------------------------------------------------------------------------------
# KONFİGÜRASYON VE EŞİK DEĞERLERİ
# ------------------------------------------------------------------------------
LOG_DOSYASI="/var/log/sistem_izleme.log"
CPU_ESIK=80
RAM_ESIK=85
DISK_ESIK=80
# Telegram Bot Bilgileri (Kendi Bot Token ve Chat ID değerlerinizi girin)
BOT_TOKEN="123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ"
CHAT_ID="987654321"
# ------------------------------------------------------------------------------
# YARDIMCI FONKSİYONLAR
# ------------------------------------------------------------------------------
# Zaman damgalı log yazma fonksiyonu
log_yaz() {
local SEVIYE=$1
local MESAJ=$2
local TARIH
TARIH=$(date "+%Y-%m-%d %H:%M:%S")
echo "[$TARIH] [$SEVIYE] $MESAJ" | tee -a "$LOG_DOSYASI"
}
# Temizlik fonksiyonu (trap ile yakalanır)
temizlik() {
log_yaz "INFO" "Sistem izleme görevi tamamlandı ve temizlik yapıldı."
}
trap temizlik EXIT
# Telegram Mesaj Gönderme Fonksiyonu
telegram_gonder() {
local MESAJ=$1
if [[ "$BOT_TOKEN" != "123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ" ]]; then
curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
-d "chat_id=${CHAT_ID}" \
-d "text=${MESAJ}" \
-d "parse_mode=Markdown" > /dev/null || log_yaz "ERROR" "Telegram mesajı gönderilemedi!"
else
log_yaz "WARN" "Telegram BOT_TOKEN yapılandırılmamış, bildirim atlanıyor."
fi
}
# ------------------------------------------------------------------------------
# METRİK TOPLAMA VE ANALİZ
# ------------------------------------------------------------------------------
sistem_kontrol_et() {
log_yaz "INFO" "--- Sistem Taraması Başlatıldı ---"
# 1. CPU Kullanımı Hesaplama (awk ile)
local CPU_KULLANIM
CPU_KULLANIM=$(top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8}' | cut -d. -f1)
# 2. RAM Kullanımı Hesaplama
local RAM_KULLANIM
RAM_KULLANIM=$(free | awk '/Mem:/ {printf("%.0f"), $3/$2 * 100}')
# 3. Disk Kullanımı Hesaplama (Kök dizin /)
local DISK_KULLANIM
DISK_KULLANIM=$(df -h / | awk 'NR==2 {print $5}' | tr -d '%')
# 4. Uptime Bilgisi
local UPTIME_BILGI
UPTIME_BILGI=$(uptime -p)
log_yaz "INFO" "Metrikler -> CPU: %${CPU_KULLANIM} | RAM: %${RAM_KULLANIM} | DISK: %${DISK_KULLANIM} | Uptime: $UPTIME_BILGI"
# Eşik Değer Kontrolleri ve Uyarı Mekanizması
local UYARI_VAR=0
local BILDIRIM_METNI="🚨 *SİSTEM UYARISI DETAYI* 🚨%0A%0A"
BILDIRIM_METNI+="🖥️ *Sunucu:* $(hostname)%0A"
BILDIRIM_METNI+="⏱️ *Uptime:* $UPTIME_BILGI%0A%0A"
if [ "$CPU_KULLANIM" -ge "$CPU_ESIK" ]; then
log_yaz "WARN" "KRİTİK: CPU kullanımı eşik değeri aştı! (%${CPU_KULLANIM})"
BILDIRIM_METNI+="⚠️ *Yüksek CPU:* %${CPU_KULLANIM} (Eşik: %${CPU_ESIK})%0A"
UYARI_VAR=1
fi
if [ "$RAM_KULLANIM" -ge "$RAM_ESIK" ]; then
log_yaz "WARN" "KRİTİK: RAM kullanımı eşik değeri aştı! (%${RAM_KULLANIM})"
BILDIRIM_METNI+="⚠️ *Yüksek RAM:* %${RAM_KULLANIM} (Eşik: %${RAM_ESIK})%0A"
UYARI_VAR=1
fi
if [ "$DISK_KULLANIM" -ge "$DISK_ESIK" ]; then
log_yaz "WARN" "KRİTİK: Disk kullanımı eşik değeri aştı! (%${DISK_KULLANIM})"
BILDIRIM_METNI+="⚠️ *Yüksek Disk:* %${DISK_KULLANIM} (Eşik: %${DISK_ESIK})%0A"
UYARI_VAR=1
fi
# Eğer herhangi bir eşik aşıldıysa Telegram'a anlık uyarı at
if [ "$UYARI_VAR" -eq 1 ]; then
telegram_gonder "$BILDIRIM_METNI"
else
log_yaz "INFO" "Tüm sistem metrikleri normal sınırlar içerisinde."
fi
}
# ------------------------------------------------------------------------------
# ANA ÇALIŞTIRMA MANTIĞI
# ------------------------------------------------------------------------------
main() {
# Log dosyasının dizinini doğrula
local LOG_DIZIN
LOG_DIZIN=$(dirname "$LOG_DOSYASI")
if [ ! -d "$LOG_DIZIN" ]; then
mkdir -p "$LOG_DIZIN"
fi
sistem_kontrol_et
}
main "$@"
---
⏰ 3. Otomatizasyon: Betiği Cron'a Bağlama 🔄
Oluşturduğumuz bu izleme betiğinin her 5 dakikada bir otomatik çalışıp sunucuyu denetlemesi için `crontab` dosyamıza ekliyoruz:
1. Crontab düzenleyiciyi açın:
crontab -e
2. Satırın en altına şu görevi ekleyin:
*/5 * * * * /bin/bash /root/scripts/sistem_izleyici.sh > /dev/null 2>&1
---
📊 4. Serinin Genel Özeti ve Kapanış 🏁
| Bölüm | Konu Başlığı |
| :--- | :--- |
| Bölüm 1 - 2 | Giriş, Shebang (`#!/bin/bash`), İzinler (`chmod`), Değişkenler, `read`, Çevre Değişkenleri |
| Bölüm 3 - 4 | Aritmetik İşlemler, `if/else`, Karşılaştırma Operatörleri, `for`, `while`, `until` Döngüleri |
| Bölüm 5 - 6 | Modüler Fonksiyonlar, `local` Kapsamı, `select` Menüleri, İndeksli ve İlişkisel Diziler |
| Bölüm 7 - 8 | Metin İşleme (`cut`, `awk`, `sed`), Exit Status (`$?`), `set -euo pipefail`, Debugging, `trap` |
| Bölüm 9 | Cron Jobs (`crontab`), `nohup`, Arka Plan Yönetimi, Otomatik Yedekleme |
| Bölüm 10 | **FİNAL:** Uçtan Uca Sistem İzleme ve Telegram Bildirim Projesi |
---
🎉 TEBRİKLER! 🎉
Baştan Sona Bash Scripting rehber serisini başarıyla tamamladınız!
Artık Linux/Unix sistemlerde rutin işleri otomatikleştirebilen, sunucu durumlarını izleyebilen, metin verilerini kolayca işleyebilen ve güvenli betikler yazabilen yetkin bir Shell Scripter
oldunuz! 🐚✨
Sorularınızı, görüşlerinizi ve serimizle ilgili yorumlarınızı paylaşmayı unutmayın.
Shell'iniz açık, betikleriniz hatasız çalışsın! Kodla kalın! 🐚🚀
🔒 Bu içeriği görmek için giriş yapın