Sunucu Sağlık Kontrolü
Sunucu kaynaklarını, servisleri ve kritik metrikleri kontrol ederek kapsamlı bir sağlık raporu oluşturan script.
Yayınlanma: 10.03.2024
Detaylı Bilgi
Bu script, sunucunuzun genel sağlık durumunu kontrol ederek kapsamlı bir HTML raporu oluşturur. CPU, bellek, disk kullanımı, servis durumları ve ağ bağlantısını kontrol eder.
Script Ne İşe Yarar?
Bu script, sunucu sağlık kontrolü yaparak:
- CPU kullanımını kontrol eder ve durum gösterir
- Bellek (RAM) kullanımını analiz eder
- Disk kullanımını kontrol eder
- Kritik servislerin durumunu kontrol eder (nginx, apache2, mysql, vb.)
- İnternet bağlantısını test eder
- DNS çözümlemesini kontrol eder
- Son sistem hatalarını listeler
- HTML formatında görsel rapor oluşturur
Neden Kullanmalısınız?
Sunucu sağlık kontrolü, proaktif sistem yönetimi için kritiktir:
- Erken Uyarı: Sorunları oluşmadan önce tespit edin
- Görsel Rapor: HTML formatında kolay okunabilir rapor
- Otomasyon: Cron job ile düzenli kontrol
- Dokümantasyon: Zaman içindeki değişiklikleri takip edin
Nasıl Kullanılır?
Adım Adım Kullanım Kılavuzu
1. Script Dosyasını Oluşturun
nano health_check.sh
2. Çalıştırılabilir Yapın
chmod +x health_check.sh
3. Scripti Çalıştırın
./health_check.sh
4. HTML Raporunu Açın
firefox health_report_*.html
# veya
xdg-open health_report_*.html
Otomatikleştirme
# Crontab ile her 6 saatte bir çalıştır
crontab -e
# Ekle: 0 */6 * * * /path/to/health_check.sh Gereksinimler
Gereksinimler
- systemctl: Servis kontrolü için (systemd sistemleri)
- bc: Matematiksel hesaplamalar için
- journalctl: Sistem logları için
- ping, nslookup: Ağ testleri için
Kullanım Senaryoları
Kullanım Senaryoları
1. Düzenli Sağlık Kontrolü
Sunucunuzun sağlık durumunu düzenli olarak kontrol edin.
2. Sorun Giderme
Sistem sorunları yaşadığınızda hızlıca durum raporu alın.
3. Performans İzleme
Zaman içindeki performans değişikliklerini takip edin.
Örnekler
Kullanım Örnekleri
Örnek 1: Temel Kullanım
./health_check.sh
Örnek 2: Otomatik Raporlama
# Her gün saat 02:00'de çalıştır
0 2 * * * /path/to/health_check.sh Kod
#!/bin/bash
# Server Health Check Script
REPORT_FILE="health_report_$(date +%Y%m%d_%H%M%S).html"
generate_report() {
cat > "$REPORT_FILE" << EOF
<!DOCTYPE html>
<html>
<head>
<title>Server Health Report</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
.ok { color: green; }
.warning { color: orange; }
.critical { color: red; }
table { border-collapse: collapse; width: 100%; margin: 20px 0; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #4CAF50; color: white; }
</style>
</head>
<body>
<h1>Server Health Report</h1>
<p><strong>Server:</strong> $(hostname)</p>
<p><strong>Date:</strong> $(date)</p>
<h2>System Resources</h2>
<table>
<tr><th>Metric</th><th>Value</th><th>Status</th></tr>
EOF
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk "{print 100 - \$1}")
CPU_STATUS="ok"
[ $(echo "$CPU_USAGE > 80" | bc) -eq 1 ] && CPU_STATUS="warning"
[ $(echo "$CPU_USAGE > 90" | bc) -eq 1 ] && CPU_STATUS="critical"
cat >> "$REPORT_FILE" << EOF
<tr>
<td>CPU Usage</td>
<td>${CPU_USAGE}%</td>
<td class="$CPU_STATUS">$CPU_STATUS</td>
</tr>
EOF
MEM_USAGE=$(free | grep Mem | awk "{print (\$3/\$2) * 100.0}")
MEM_STATUS="ok"
[ $(echo "$MEM_USAGE > 80" | bc) -eq 1 ] && MEM_STATUS="warning"
[ $(echo "$MEM_USAGE > 90" | bc) -eq 1 ] && MEM_STATUS="critical"
cat >> "$REPORT_FILE" << EOF
<tr>
<td>Memory Usage</td>
<td>$(printf "%.2f" $MEM_USAGE)%</td>
<td class="$MEM_STATUS">$MEM_STATUS</td>
</tr>
EOF
DISK_USAGE=$(df -h / | awk "NR==2 {print \$5}" | sed "s/%//")
DISK_STATUS="ok"
[ $DISK_USAGE -gt 80 ] && DISK_STATUS="warning"
[ $DISK_USAGE -gt 90 ] && DISK_STATUS="critical"
cat >> "$REPORT_FILE" << EOF
<tr>
<td>Disk Usage (/)</td>
<td>${DISK_USAGE}%</td>
<td class="$DISK_STATUS">$DISK_STATUS</td>
</tr>
</table>
<h2>Services Status</h2>
<table>
<tr><th>Service</th><th>Status</th></tr>
EOF
SERVICES=("nginx" "apache2" "mysql" "postgresql" "docker" "ssh")
for service in "${SERVICES[@]}"; do
if systemctl list-units --all | grep -q "$service.service"; then
if systemctl is-active --quiet "$service"; then
STATUS="<span class=\"ok\">Running</span>"
else
STATUS="<span class=\"critical\">Stopped</span>"
fi
echo " <tr><td>$service</td><td>$STATUS</td></tr>" >> "$REPORT_FILE"
fi
done
cat >> "$REPORT_FILE" << EOF
</table>
<h2>Network Connectivity</h2>
<table>
<tr><th>Test</th><th>Result</th></tr>
EOF
if ping -c 1 8.8.8.8 &> /dev/null; then
echo " <tr><td>Internet</td><td class=\"ok\">Connected</td></tr>" >> "$REPORT_FILE"
else
echo " <tr><td>Internet</td><td class=\"critical\">Disconnected</td></tr>" >> "$REPORT_FILE"
fi
if nslookup google.com &> /dev/null; then
echo " <tr><td>DNS Resolution</td><td class=\"ok\">Working</td></tr>" >> "$REPORT_FILE"
else
echo " <tr><td>DNS Resolution</td><td class=\"critical\">Failed</td></tr>" >> "$REPORT_FILE"
fi
cat >> "$REPORT_FILE" << EOF
</table>
<h2>Last System Errors</h2>
<pre>
$(journalctl -p 3 -n 20 --no-pager 2>/dev/null || echo "No recent errors")
</pre>
</body>
</html>
EOF
}
echo "Running server health check..."
generate_report
echo "✓ Health report generated: $REPORT_FILE"
echo ""
echo "Open with: firefox $REPORT_FILE"
Kullanım
chmod +x health_check.sh
./health_check.sh
# HTML raporunu aç
firefox health_report_*.html
# Crontab ile otomatikleştir
crontab -e
# Ekle: 0 */6 * * * /path/to/health_check.sh
Sorun Giderme
Sorun Giderme
Problem: "bc: command not found"
Çözüm: bc paketini kurun:
sudo apt-get install bc