Ontwikkel een Bash of PowerShell Script voor Geautomatiseerde Server Resource Monitoring met Alerting
description
Met deze prompt kun je een script ontwikkelen dat je helpt serverresources proactief te bewaken en snel te reageren op problemen door automatische alerts. Dit voorkomt overbelasting, verbetert de stabiliteit van je servers en bespaart handmatig toezicht. Het is specifiek gericht op realtime monitoring met configureerbare drempels en alertmethoden, wat het veelzijdig en aanpasbaar maakt.
prompt
Help me een Bash of PowerShell script te maken dat continu server resources bewaakt, zoals CPU-, geheugen- en schijfgebruik, en automatisch waarschuwingen verstuurt wanneer drempelwaarden worden overschreden. Welke resources wil ik monitoren: <voer de te monitoren resources in zoals CPU, geheugen, schijfruimte> Drempelwaarden voor waarschuwingen: <bes ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een Bash-script dat continu serverresources bewaakt, waarschuwingen verstuurt via e-mail bij overschrijding van de drempelwaarden, en logs bijhoudt.
**Benodigdheden:**
- `mail` of `sendmail` voor het versturen van e-mails.
- Toegang tot `/proc` en `df` voor monitoring.
- Cron of een andere scheduler om het script periodiek uit te voeren.
**Script:**
```bash
#!/bin/bash
# Configuratie
LOGFILE="/var/log/server_monitor.log"
ADMIN_EMAIL="admin@example.com"
CPU_THRESHOLD=85
MEMORY_THRESHOLD=90
DISK_THRESHOLD=80
DISK_MOUNT="/"
# Functie voor het loggen
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOGFILE"
}
# CPU gebruik ophalen (percentage van CPU dat wordt gebruikt door gebruikers)
cpu_idle=$(grep 'cpu ' /proc/stat | awk '{print $5+$6}' )
cpu_total=$(grep 'cpu ' /proc/stat | awk '{sum=0; for(i=2;i<=10;i++) sum+=$i; print sum}')
cpu_usage=$(( ( (cpu_total - cpu_idle) * 100 ) / cpu_total ))
# Geheugen gebruik ophalen
mem_total=$(grep MemTotal /proc/meminfo | awk '{print $2}')
mem_available=$(grep MemAvailable /proc/meminfo | awk '{print $2}')
mem_used=$((mem_total - mem_available))
mem_usage=$(( (mem_used * 100) / mem_total ))
# Schijfgebruik ophalen
disk_usage=$(df -h "$DISK_MOUNT" | awk 'NR==2 {print $5}' | sed 's/%//')
# Boodschappen verzamelen
alerts=""
# CPU check
if [ "$cpu_usage" -gt "$CPU_THRESHOLD" ]; then
alerts+="CPU-gebruik is hoog: ${cpu_usage}%\n"
fi
# Geheugen check
if [ "$mem_usage" -gt "$MEMORY_THRESHOLD" ]; then
alerts+="Geheugengebruik is hoog: ${mem_usage}%\n"
fi
# Schijfgebruik check
if [ "$disk_usage" -gt "$DISK_THRESHOLD" ]; then
alerts+="Schijfgebruik op $DISK_MOUNT is hoog: ${disk_usage}%\n"
fi
# Verstuur e-mail als er waarschuwingen zijn
if [ -n "$alerts" ]; then
echo -e "Waarschuwingen op de server:\n$alerts" | mail -s "Server Resource Alert" "$ADMIN_EMAIL"
log "Waarschuwing verstuurd:\n$alerts"
else
log "Geen waarschuwingen. Resources binnen de drempelwaarden."
fi
```
**Gebruik:**
1. Sla dit script op als bijvoorbeeld `/usr/local/bin/server_monitor.sh`.
2. Maak het uitvoerbaar: `chmod +x /usr/local/bin/server_monitor.sh`.
3. Plan het in cron om bijvoorbeeld elke 5 minuten uit te voeren:
```bash
crontab -e
```
Voeg toe:
```bash
*/5 * * * * /usr/local/bin/server_monitor.sh
```
**Let op:**
- Zorg dat `mail` correct is geconfigureerd op je server.
- Pas de paden en drempelwaarden aan indien nodig.
- Controleer de logbestanden regelmatig voor verdere analyse.
Wil je dit script in PowerShell?
provider: deepseek
model: deepseek-chat
Hier is een Bash-script dat voldoet aan uw vereisten:
```bash
#!/bin/bash
# Configuratie
THRESHOLD_CPU=85
THRESHOLD_MEMORY=90
THRESHOLD_DISK=80
ALERT_EMAIL="admin@example.com"
LOG_FILE="/var/log/server_monitor.log"
# Functie om logboekvermeldingen te maken
log_message() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}
# Functie om e-mail waarschuwing te versturen
send_alert() {
local subject="Server Resource Waarschuwing: $1"
local message="Waarschuwing: $2 heeft drempelwaarde overschreden op $(date '+%Y-%m-%d %H:%M:%S').\nHuidige waarde: $3%\nDrempel: $4%"
echo -e "$message" | mail -s "$subject" "$ALERT_EMAIL"
log_message "ALERT: $subject - Waarde: $3%"
}
# Functie om CPU-gebruik te controleren
check_cpu() {
local cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
cpu_usage=${cpu_usage%.*}
if [ "$cpu_usage" -gt "$THRESHOLD_CPU" ]; then
send_alert "CPU" "CPU-gebruik" "$cpu_usage" "$THRESHOLD_CPU"
fi
}
# Functie om geheugengebruik te controleren
check_memory() {
local mem_total=$(free | grep Mem | awk '{print $2}')
local mem_used=$(free | grep Mem | awk '{print $3}')
local mem_usage=$((mem_used * 100 / mem_total))
if [ "$mem_usage" -gt "$THRESHOLD_MEMORY" ]; then
send_alert "Geheugen" "Geheugengebruik" "$mem_usage" "$THRESHOLD_MEMORY"
fi
}
# Functie om schijfgebruik te controleren
check_disk() {
local disk_usage=$(df / | awk 'NR==2 {print $5}' | cut -d'%' -f1)
if [ "$disk_usage" -gt "$THRESHOLD_DISK" ]; then
send_alert "Schijf" "Schijfgebruik" "$disk_usage" "$THRESHOLD_DISK"
fi
}
# Hoofd monitoring loop
log_message "Server monitoring gestart"
while true; do
check_cpu
check_memory
check_disk
sleep 60 # Wacht 60 seconden tussen checks
done
```
**Installatie-instructies:**
1. **Script opslaan:**
```bash
sudo nano /usr/local/bin/server_monitor.sh
```
2. **Script uitvoerbaar maken:**
```bash
sudo chmod +x /usr/local/bin/server_monitor.sh
```
3. **E-mail configureren (vereist postfix/mailutils):**
```bash
sudo apt-get install mailutils postfix
```
4. **Log directory aanmaken:**
```bash
sudo mkdir -p /var/log
sudo touch /var/log/server_monitor.log
```
5. **Script als service uitvoeren:**
```bash
# Voeg toe aan crontab voor automatische start
(crontab -l 2>/dev/null; echo "@reboot /usr/local/bin/server_monitor.sh") | crontab -
```
**Alternatieve PowerShell versie voor Windows:**
```powershell
# server_monitor.ps1
$ThresholdCPU = 85
$ThresholdMemory = 90
$ThresholdDisk = 80
$AlertEmail = "admin@example.com"
$LogFile = "C:\Logs\server_monitor.log"
while ($true) {
$Timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
# CPU check
$CPU = (Get-Counter "\Processor(_Total)\% Processor Time").CounterSamples.CookedValue
if ($CPU -gt $ThresholdCPU) {
"$Timestamp - ALERT: CPU usage $CPU% > $ThresholdCPU%" | Out-File $LogFile -Append
Send-MailMessage -To $AlertEmail -Subject "CPU Alert" -Body "CPU usage is $CPU%" -SmtpServer "localhost"
}
# Memory check
$Memory = (Get-Counter "\Memory\% Committed Bytes In Use").CounterSamples.CookedValue
if ($Memory -gt $ThresholdMemory) {
"$Timestamp - ALERT: Memory usage $Memory% > $ThresholdMemory%" | Out-File $LogFile -Append
Send-MailMessage -To $AlertEmail -Subject "Memory Alert" -Body "Memory usage is $Memory%" -SmtpServer "localhost"
}
# Disk check
$Disk = (Get-Counter "\LogicalDisk(C:)\% Free Space").CounterSamples.CookedValue
$DiskUsage = 100 - $Disk
if ($DiskUsage -gt $ThresholdDisk) {
"$Timestamp - ALERT: Disk usage $DiskUsage% > $ThresholdDisk%" | Out-File $LogFile -Append
Send-MailMessage -To $AlertEmail -Subject "Disk Alert" -Body "Disk usage is $DiskUsage%" -SmtpServer "localhost"
}
Start-Sleep -Seconds 60
}
```
**Belangrijke opmerkingen:**
- Zorg dat e-mail services correct zijn geconfigureerd
- Test de drempelwaarden in uw specifieke omgeving
- Overweeg het gebruik van monitoring tools zoals Nagios of Zabbix voor productie-omgevingen
- Pas de slaaptijd aan naar behoefte (huidig: 60 seconden)