Einführung
In diesem Projekt erstellen Sie einen Linux-Systemmonitor mithilfe eines Shell-Skripts. Dieses Skript verfolgt kontinuierlich die CPU-, Speicher- und Datenträgerauslastung Ihres Systems und zeigt die Auslastungsprozente in Echtzeit an. Wenn die Auslastung einer beliebigen Ressource einen voreingestellten Schwellenwert überschreitet, wird eine Warnung angezeigt. Durch die Fertigstellung dieses Projekts lernen Sie grundlegende Linux-Skripting-Fähigkeiten, während Sie ein praktisches Tool erstellen.

🎯 Aufgaben
Durch die Fertigstellung dieses Projekts werden Sie:
- Lernen, wie Sie ein Shell-Skript erstellen, um Systemressourcen zu überwachen.
- Verstehen, wie Sie Schwellenwerte für die CPU-, Speicher- und Datenträgerauslastung festlegen und verwenden.
- Eine Funktion erstellen, um Warnungen zu senden, wenn Schwellenwerte überschritten werden.
🏆 Errungenschaften
Nach der Fertigstellung dieses Projekts werden Sie:
- In der Lage sein, einen Linux-Systemmonitor mithilfe eines Shell-Skripts zu erstellen und auszuführen.
- Verstehen, wie Sie mit Systemressourcenbefehlen wie
top,freeunddfarbeiten. - In der Lage sein, das Skript zu erweitern, indem Sie neue Funktionen hinzufügen, wie z. B. E-Mail-Benachrichtigungen.
Projekt einrichten
Beginnen Sie damit, einen sauberen Arbeitsbereich für Ihr Skript vorzubereiten. Wir empfehlen für dieses Projekt die Verwendung von WebIDE, da es sich gut für das Schreiben und Testen von Skripten eignet.
Navigieren Sie in dieses Verzeichnis und erstellen Sie eine Datei mit dem Namen system_monitor.sh:
cd ~/project
touch system_monitor.sh

Öffnen Sie die Datei in Ihrem bevorzugten Texteditor und fügen Sie die folgenden Zeilen hinzu:
#!/bin/bash
## Definieren Sie die Schwellenwerte für die CPU-, Speicher- und Datenträgerauslastung (in Prozent)
CPU_THRESHOLD=80
MEMORY_THRESHOLD=80
DISK_THRESHOLD=80
Hier ist, was jeder Teil des Codes macht:
#!/bin/bash: Diese Zeile gibt an, dass das Skript mit der Bash-Shell interpretiert werden soll.CPU_THRESHOLD=80: Setzt den Schwellenwert für die CPU-Auslastung auf 80%. Sie können diesen Wert später anpassen.MEMORY_THRESHOLD=80undDISK_THRESHOLD=80: Ähnlich definieren diese die Schwellenwerte für die Speicher- und Datenträgerauslastung.
Speichern Sie die Datei und machen Sie sie ausführbar:
chmod +x system_monitor.sh
Hinzufügen einer Warnfunktion
Jetzt fügen wir eine Funktion hinzu, die Warnungen sendet, wenn die Ressourcenauslastung die Schwellenwerte überschreitet. Öffnen Sie system_monitor.sh und fügen Sie den folgenden Code hinzu:
## Function to send an alert
send_alert() {
echo "$(tput setaf 1)ALERT: $1 usage exceeded threshold! Current value: $2%$(tput sgr0)"
}
Hier ist eine Aufschlüsselung dieser Funktion:
send_alert: Die Funktion nimmt zwei Argumente entgegen:$1repräsentiert den Ressourcentyp (z. B. CPU, Speicher, Datenträger).$2repräsentiert den aktuellen Auslastungsprozentsatz.
tput setaf 1: Ändert die Textfarbe auf rot, um die Warnungen visuell zu unterscheiden.tput sgr0: Setzt die Textformatierung nach der Warnmeldung auf normal zurück.
Fügen Sie einen Testaufruf der Funktion hinzu, um zu überprüfen, ob sie funktioniert:
send_alert "CPU" 85

Führen Sie das Skript aus:
./system_monitor.sh
Sie sollten eine rote Warnmeldung ähnlich der folgenden sehen:
ALERT: CPU usage exceeded threshold! Current value: 85%
Bevor Sie fortfahren, löschen Sie den Testaufruf von send_alert aus dem Skript.
Überwachung der CPU-Auslastung
Fügen wir nun die Logik hinzu, um die CPU-Auslastung zu überwachen. Öffnen Sie das Skript und fügen Sie den folgenden Code hinzu:
## Monitor CPU usage
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
cpu_usage=${cpu_usage%.*} ## Convert to integer
echo "Current CPU usage: $cpu_usage%"
if ((cpu_usage >= CPU_THRESHOLD)); then
send_alert "CPU" "$cpu_usage"
fi
Hier ist, was in diesem Code passiert:
top -bn1: Führt dentop-Befehl im Batch-Modus für eine Iteration aus, um Echtzeit-Statistiken zur CPU-Auslastung abzurufen.grep "Cpu(s)": Filtert die Ausgabe, um sich auf die Zeile mit der CPU-Auslastung zu konzentrieren.awk '{print $2 + $4}': Extrahiert und summiert die Prozentzahlen der Benutzer- und System-CPU-Auslastung.cpu_usage=${cpu_usage%.*}: Entfernt den Dezimalteil, um die Schwellenwertvergleiche zu vereinfachen.if ((cpu_usage >= CPU_THRESHOLD)): Vergleicht die CPU-Auslastung mit dem Schwellenwert und ruftsend_alertauf, wenn er überschritten wird.
Führen Sie das Skript aus, um die CPU-Überwachung zu testen:
./system_monitor.sh
Sie sollten die aktuelle CPU-Auslastung angezeigt sehen. Wenn sie über dem Schwellenwert liegt, wird eine Warnung angezeigt.
Überwachung der Speicherauslastung
Als Nächstes fügen Sie Code hinzu, um die Speicherauslastung zu überwachen. Fügen Sie die folgenden Zeilen unterhalb der Logik zur CPU-Überwachung ein:
## Monitor memory usage
memory_usage=$(free | awk '/Mem/ {printf("%3.1f", ($3/$2) * 100)}')
echo "Current memory usage: $memory_usage%"
memory_usage=${memory_usage%.*}
if ((memory_usage >= MEMORY_THRESHOLD)); then
send_alert "Memory" "$memory_usage"
fi
So funktioniert es:
free: Liefert Statistiken zur Speicherauslastung.awk '/Mem/ {printf("%3.1f", ($3/$2) * 100)}': Berechnet den Prozentsatz des verwendeten Speichers, indem der verwendete Speicher ($3) durch den gesamten Speicher ($2) geteilt wird.- Das Skript vergleicht
memory_usagemit dem Schwellenwert und sendet bei Bedarf eine Warnung.
Führen Sie das Skript aus:
./system_monitor.sh
Sie sollten den Prozentsatz der Speicherauslastung sehen, und Warnungen werden ausgelöst, wenn die Auslastung den Schwellenwert überschreitet.
Überwachung der Datenträgerauslastung
Jetzt überwachen wir die Datenträgerauslastung. Fügen Sie den folgenden Code unterhalb der Logik zur Speicherüberwachung hinzu:
## Monitor disk usage
disk_usage=$(df -h / | awk '/\// {print $(NF-1)}')
disk_usage=${disk_usage%?} ## Remove the % sign
echo "Current disk usage: $disk_usage%"
if ((disk_usage >= DISK_THRESHOLD)); then
send_alert "Disk" "$disk_usage"
fi
Erklärung:
df -h /: Ruft Statistiken zur Datenträgerauslastung für das Root-Verzeichnis ab.awk '/\// {print $(NF-1)}': Extrahiert die Spalte mit dem Auslastungsprozentsatz.disk_usage=${disk_usage%?}: Entfernt das%-Symbol für einfachere Vergleiche.- Warnungen werden ausgelöst, wenn die Datenträgerauslastung den Schwellenwert überschreitet.
Führen Sie das Skript aus:
./system_monitor.sh
Sie sollten Statistiken zur Datenträgerauslastung sehen, und Warnungen werden bei Bedarf ausgelöst.
Alles in eine Schleife integrieren
Schließlich kombinieren wir die Überwachung der CPU, des Speichers und des Datenträgers in eine Schleife für die kontinuierliche Überwachung. Ersetzen Sie den bestehenden Inhalt durch Folgendes:
while true; do
## Monitor CPU
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
cpu_usage=${cpu_usage%.*}
if ((cpu_usage >= CPU_THRESHOLD)); then
send_alert "CPU" "$cpu_usage"
fi
## Monitor memory
memory_usage=$(free | awk '/Mem/ {printf("%3.1f", ($3/$2) * 100)}')
memory_usage=${memory_usage%.*}
if ((memory_usage >= MEMORY_THRESHOLD)); then
send_alert "Memory" "$memory_usage"
fi
## Monitor disk
disk_usage=$(df -h / | awk '/\// {print $(NF-1)}')
disk_usage=${disk_usage%?}
if ((disk_usage >= DISK_THRESHOLD)); then
send_alert "Disk" "$disk_usage"
fi
## Display current stats
clear
echo "Resource Usage:"
echo "CPU: $cpu_usage%"
echo "Memory: $memory_usage%"
echo "Disk: $disk_usage%"
sleep 2
done
Diese Schleife überwacht kontinuierlich die Ressourcenauslastung, löscht den Bildschirm und zeigt in regelmäßigen Abständen die aktuellen Statistiken an.
Führen Sie das Skript aus, um es zu testen:
./system_monitor.sh
Zusammenfassung
Herzlichen Glückwunsch! Sie haben mit Bash einen voll funktionsfähigen Linux-Systemüberwacher erstellt. Dieses Tool verfolgt die CPU-, Speicher- und Datenträgerauslastung in Echtzeit und warnt Sie, wenn die Auslastung vordefinierte Schwellenwerte überschreitet. Fügen Sie gerne weitere Funktionen wie E-Mail-Benachrichtigungen hinzu oder erweitern Sie die Überwachung auf zusätzliche Ressourcen.




