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

Etiketler

health check monitoring sunucu izleme sistem kontrolü