Erstellen eines Linux-Systemüberwachers mit Bash

LinuxBeginner
Jetzt üben

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.

Linux System Monitor

🎯 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, free und df arbeiten.
  • In der Lage sein, das Skript zu erweitern, indem Sie neue Funktionen hinzufügen, wie z. B. E-Mail-Benachrichtigungen.
Dies ist ein Guided Lab, das schrittweise Anweisungen bietet, um Ihnen beim Lernen und Üben zu helfen. Befolgen Sie die Anweisungen sorgfältig, um jeden Schritt abzuschließen und praktische Erfahrungen zu sammeln. Historische Daten zeigen, dass dies ein Labor der Stufe Fortgeschrittener mit einer Abschlussquote von 63% ist. Es hat eine positive Bewertungsrate von 99% von den Lernenden erhalten.

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
Erstellung des System-Monitor-Skripts

Ö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=80 und DISK_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:
    • $1 repräsentiert den Ressourcentyp (z. B. CPU, Speicher, Datenträger).
    • $2 reprä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
Codeausschnitt der Warnfunktion

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:

  1. top -bn1: Führt den top-Befehl im Batch-Modus für eine Iteration aus, um Echtzeit-Statistiken zur CPU-Auslastung abzurufen.
  2. grep "Cpu(s)": Filtert die Ausgabe, um sich auf die Zeile mit der CPU-Auslastung zu konzentrieren.
  3. awk '{print $2 + $4}': Extrahiert und summiert die Prozentzahlen der Benutzer- und System-CPU-Auslastung.
  4. cpu_usage=${cpu_usage%.*}: Entfernt den Dezimalteil, um die Schwellenwertvergleiche zu vereinfachen.
  5. if ((cpu_usage >= CPU_THRESHOLD)): Vergleicht die CPU-Auslastung mit dem Schwellenwert und ruft send_alert auf, 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:

  1. free: Liefert Statistiken zur Speicherauslastung.
  2. 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.
  3. Das Skript vergleicht memory_usage mit 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:

  1. df -h /: Ruft Statistiken zur Datenträgerauslastung für das Root-Verzeichnis ab.
  2. awk '/\// {print $(NF-1)}': Extrahiert die Spalte mit dem Auslastungsprozentsatz.
  3. disk_usage=${disk_usage%?}: Entfernt das %-Symbol für einfachere Vergleiche.
  4. 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.

Linux System Monitor