Ontwikkel een Bash of PowerShell Script voor Server Resource Anomaly Detectie en Rapportage
description
Met deze prompt kan de gebruiker een script ontwikkelen dat automatisch onverwachte afwijkingen in serverresources detecteert en hierover rapporteert, waardoor problemen sneller opgespoord en opgelost kunnen worden dan met handmatige monitoring. Dit helpt serverprestaties te optimaliseren en downtime te verminderen door vroegtijdige waarschuwingen.
prompt
try_prompt
Help me een Bash of PowerShell script te maken dat automatisch afwijkingen in server resources detecteert, zoals plotselinge pieken of dalingen in CPU-, geheugen- of schijfgebruik, en hierover een gedetailleerd rapport genereert. Welke resources w ... more
generate_helper
...
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een Bash-script dat CPU- en geheugenverbruik monitort, afwijkingen detecteert op basis van een verandering van 10% binnen 2 minuten, en een rapport genereert op de locatie /var/logs/anomalie_rapport.txt. Het script gebruikt `top` en `free` voor het verzamelen van gegevens, en slaat de gegevens op in tijdelijke bestanden om veranderingen te vergelijken.
```bash
#!/bin/bash
# Configuratie
LOG_DIR="/var/logs"
RAPPORT="$LOG_DIR/anomalie_rapport.txt"
TEMP_DIR="/tmp/server_monitor"
CPU_LOG="$TEMP_DIR/cpu_usage.log"
MEM_LOG="$TEMP_DIR/mem_usage.log"
# Zorg dat de log directory bestaat
mkdir -p "$LOG_DIR"
mkdir -p "$TEMP_DIR"
# Functie om CPU gebruik te meten
get_cpu_usage() {
# Gebruik top voor 1s sample
top -b -n 1 | grep "Cpu(s)" | awk '{print 100 - $8}' | awk '{print $1}'
}
# Functie om geheugen gebruik te meten
get_mem_usage() {
free -m | awk '/Mem:/ {used=$3; total=$2} END {print (used/total)*100}'
}
# Initiele metingen
if [ ! -f "$CPU_LOG" ]; then
get_cpu_usage > "$CPU_LOG"
fi
if [ ! -f "$MEM_LOG" ]; then
get_mem_usage > "$MEM_LOG"
fi
# Slaap 2 minuten
sleep 120
# Nieuwe metingen
CPU_NIEUW=$(get_cpu_usage)
MEM_NIEUW=$(get_mem_usage)
# Oude metingen lezen
CPU_OUD=$(cat "$CPU_LOG")
MEM_OUD=$(cat "$MEM_LOG")
# Update logs
echo "$CPU_NIEUW" > "$CPU_LOG"
echo "$MEM_NIEUW" > "$MEM_LOG"
# Detectie van afwijkingen (meer dan 10% verandering)
CPU_veranderingspercentage=$(awk -v oud="$CPU_OUD" -v nieuw="$CPU_NIEUW" 'BEGIN {print (nieuw - oud) < 0 ? -(nieuw - oud) : (nieuw - oud)}')
MEM_veranderingspercentage=$(awk -v oud="$MEM_OUD" -v nieuw="$MEM_NIEUW" 'BEGIN {print (nieuw - oud) < 0 ? -(nieuw - oud) : (nieuw - oud)}')
# Berekenen percentage verandering
CPU_percentage=$(awk -v oud="$CPU_OUD" -v nieuw="$CPU_NIEUW" 'BEGIN {print ((nieuw - oud)/oud)*100}')
MEM_percentage=$(awk -v oud="$MEM_OUD" -v nieuw="$MEM_NIEUW" 'BEGIN {print ((nieuw - oud)/oud)*100}')
# Start rapport
echo "Aanwezigheid van afwijkingen op $(date)" > "$RAPPORT"
echo "----------------------------------------" >> "$RAPPORT"
# CPU afwijking rapportage
if (( $(echo "$CPU_percentage > 10" |bc -l) )) || (( $(echo "$CPU_percentage < -10" |bc -l) )); then
echo "CPU gebruik verandering van $(printf '%.2f' "$CPU_percentage")% gedetecteerd." >> "$RAPPORT"
else
echo "Geen significante CPU verandering gedetecteerd." >> "$RAPPORT"
fi
# Geheugen afwijking rapportage
if (( $(echo "$MEM_percentage > 10" |bc -l) )) || (( $(echo "$MEM_percentage < -10" |bc -l) )); then
echo "Geheugen gebruik verandering van $(printf '%.2f' "$MEM_percentage")% gedetecteerd." >> "$RAPPORT"
else
echo "Geen significante geheugen verandering gedetecteerd." >> "$RAPPORT"
fi
```
**Hoe te gebruiken:**
1. Sla dit script op als bijvoorbeeld `monitor_server.sh`.
2. Maak het uitvoerbaar met `chmod +x monitor_server.sh`.
3. Voer het script uit: `./monitor_server.sh`.
**Let op:**
- Voor continue monitoring kun je dit script in een cron-job zetten die elke 2 minuten draait.
- Dit script is een basisvoorbeeld. Voor meer nauwkeurigheid en uitgebreide monitoring kun je tools zoals Nagios, Zabbix of Prometheus overwegen.
- Zorg dat je voldoende rechten hebt om in `/var/logs` te schrijven.
Wil je ook schijfgebruik toevoegen of andere resources monitoren?
provider: deepseek
model: deepseek-chat
Ik zal een Bash-script voor je maken dat CPU- en geheugengebruik monitort met een gevoeligheid van 10% verandering binnen 2 minuten. Het script zal afwijkingen detecteren en rapporteren naar het opgegeven bestand.
```bash
#!/bin/bash
# Configuratie
RAPPORT_BESTAND="/var/logs/anomalie_rapport.txt"
DREMPEL_PERCENTAGE=10
MONITOR_INTERVAL=60 # 60 seconden = 1 minuut
AANTAL_METINGEN=2 # 2 metingen = 2 minuten
# Functie om huidige timestamp te krijgen
get_timestamp() {
date '+%Y-%m-%d %H:%M:%S'
}
# Functie om rapport te schrijven
schrijf_rapport() {
local bericht="$1"
echo "[$(get_timestamp)] $bericht" >> "$RAPPORT_BESTAND"
}
# Functie om CPU-gebruik te meten (percentage)
meet_cpu_gebruik() {
local cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
echo "scale=2; 100 - $cpu_usage" | bc
}
# Functie om geheugengebruik te meten (percentage)
meet_geheugen_gebruik() {
free | grep Mem | awk '{printf "%.2f", $3/$2 * 100.0}'
}
# Functie om afwijkingen te detecteren
detecteer_afwijkingen() {
local huidige_waarde="$1"
local vorige_waarde="$2"
local resource_naam="$3"
if [[ -z "$vorige_waarde" ]]; then
return 1
fi
local verschil=$(echo "scale=2; $huidige_waarde - $vorige_waarde" | bc)
local absoluut_verschil=$(echo "scale=2; sqrt($verschil * $verschil)" | bc)
if (( $(echo "$absoluut_verschil >= $DREMPEL_PERCENTAGE" | bc -l) )); then
local richting="stijging"
if (( $(echo "$verschil < 0" | bc -l) )); then
richting="daling"
verschil=$(echo "scale=2; $verschil * -1" | bc)
fi
schrijf_rapport "AFWIJKING: $resource_naam - $richting van ${verschil}% (van $vorige_waarde% naar $huidige_waarde%)"
return 0
fi
return 1
}
# Hoofdscript
echo "=== Server Resource Anomalie Detector ===" > "$RAPPORT_BESTAND"
schrijf_rapport "Monitoring gestart - CPU en Geheugen"
schrijf_rapport "Drempel: ${DREMPEL_PERCENTAGE}% verandering binnen 2 minuten"
declare -a cpu_metingen
declare -a geheugen_metingen
telling=0
echo "Monitoring gestart... Druk op Ctrl+C om te stoppen"
while true; do
# Meet huidige resources
cpu_huidig=$(meet_cpu_gebruik)
geheugen_huidig=$(meet_geheugen_gebruik)
# Sla metingen op in arrays
cpu_metingen[$((telling % AANTAL_METINGEN))]=$cpu_huidig
geheugen_metingen[$((telling % AANTAL_METINGEN))]=$geheugen_huidig
# Verhoog telling
telling=$((telling + 1))
# Controleer of we genoeg metingen hebben voor vergelijking
if [[ $telling -ge $AANTAL_METINGEN ]]; then
# Vergelijk met meting van 2 minuten geleden
oud_index=$(( (telling - AANTAL_METINGEN) % AANTAL_METINGEN ))
cpu_vorig=${cpu_metingen[$oud_index]}
geheugen_vorig=${geheugen_metingen[$oud_index]}
# Detecteer afwijkingen
detecteer_afwijkingen "$cpu_huidig" "$cpu_vorig" "CPU"
detecteer_afwijkingen "$geheugen_huidig" "$geheugen_vorig" "Geheugen"
# Schrijf normale meting naar log (alleen voor debugging)
if [[ $((telling % 5)) -eq 0 ]]; then
schrijf_rapport "INFO: CPU: ${cpu_huidig}%, Geheugen: ${geheugen_huidig}%"
fi
else
schrijf_rapport "INFO: Initialisatie meting $telling - CPU: ${cpu_huidig}%, Geheugen: ${geheugen_huidig}%"
fi
# Wacht tot volgende meting
sleep $MONITOR_INTERVAL
done
```
**Installatie en gebruik:**
1. **Sla het script op** als `anomalie_detector.sh`
2. **Maak het uitvoerbaar:**
```bash
chmod +x anomalie_detector.sh
```
3. **Maak de log directory aan:**
```bash
sudo mkdir -p /var/logs
sudo chown $USER:$USER /var/logs
```
4. **Voer het script uit:**
```bash
./anomalie_detector.sh
```
5. **Voor achtergrond uitvoering:**
```bash
nohup ./anomalie_detector.sh > /dev/null 2>&1 &
```
**Belangrijke kenmerken:**
- Monitor CPU en geheugen elke minuut
- Detecteert veranderingen van ≥10% binnen 2 minuten
- Rapporteert zowel stijgingen als dalingen
- Schrijft gedetailleerde rapporten naar `/var/logs/anomalie_rapport.txt`
- Toont richting en grootte van de verandering
**Voorbeeld rapport uitvoer:**
```
[2024-01-15 14:30:01] AFWIJKING: CPU - stijging van 15.50% (van 25.00% naar 40.50%)
[2024-01-15 14:35:01] AFWIJKING: Geheugen - daling van 12.30% (van 85.20% naar 72.90%)
```
Het script blijft continu draaien tot je het handmatig stopt met Ctrl+C.

