slogan3

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
disclaimerOnPageApi image_legal_disclaimer...

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.