Help me een Bash- of PowerShell-script maken voor geautomatiseerde servergezondheidsdiagnoses.
description
Door dit script te gebruiken, kunt u proactief de gezondheid van uw server monitoren, downtime verminderen en de prestaties verbeteren door tijdige diagnoses en bruikbare inzichten.
prompt
try_prompt
Ik wil een script ontwikkelen dat geautomatiseerde gezondheidsdiagnoses uitvoert op mijn server, waarbij belangrijke statistieken zoals CPU-belasting, geheugen gebruik, schijfruimte en netwerkconnectiviteit worden gecontroleerd. Geef het servertype op: {{server_type}}. Welke spec ... more
generate_helper
...
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een overzicht van de benodigde diagnostische controles en een schets voor een script dat deze uitvoert op een Linux-server, inclusief het genereren van een PDF-rapport met samenvatting en aanbevelingen.
**Specifieke diagnostische controles:**
1. **CPU-belasting controleren:**
- Gebruik `top`, `htop`, of `mpstat` om de CPU-belasting te meten.
- Meet de CPU-gebruikerspercentages over een korte periode.
- Controleer of de CPU-belasting boven een drempelwaarde (bijvoorbeeld 80%) ligt.
2. **Geheugengebruik controleren:**
- Gebruik `free -m` of `vmstat` om het geheugengebruik te meten.
- Controleer op overmatig gebruik, zoals meer dan 90% van het geheugen in gebruik.
3. **Schijfruimte controleren:**
- Gebruik `df -h` om de schijfruimte per partitie te bekijken.
- Identificeer partities die bijna vol zijn (bijvoorbeeld meer dan 90% gevuld).
4. **Netwerkconnectiviteit testen:**
- Ping belangrijke externe servers (bijvoorbeeld Google DNS 8.8.8.8).
- Controleer de netwerkstatus en latency.
- Test de bereikbaarheid van essentiële services.
---
**Voorbeeld van het script in Bash met rapportage in PDF:**
```bash
#!/bin/bash
# Bestandsnaam voor het rapport
rapport="server_diagnose_$(date +%Y%m%d).pdf"
# Functie om tekst te verzamelen
echo "Serverdiagnose Rapport" > temp_report.txt
echo "Datum: $(date)" >> temp_report.txt
echo "----------------------------------------" >> temp_report.txt
# CPU-belasting controleren
cpu_utilization=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
cpu_percentage=$(echo "$cpu_utilization * 100" | bc)
echo "CPU-belasting: ${cpu_percentage}% gebruikt." >> temp_report.txt
if (( $(echo "$cpu_percentage > 80" |bc -l) )); then
echo "Waarschuwing: Hoge CPU-belasting!" >> temp_report.txt
fi
# Geheugen gebruik controleren
mem_info=$(free -m | awk 'NR==2{print $3,$4,$2}')
used_mem=$(echo $mem_info | awk '{print $1}')
free_mem=$(echo $mem_info | awk '{print $2}')
total_mem=$(echo $mem_info | awk '{print $3}')
percent_used=$(( 100 * used_mem / total_mem ))
echo "Geheugen: $used_mem MB gebruikt van $total_mem MB ($percent_used%)." >> temp_report.txt
if [ "$percent_used" -gt 90 ]; then
echo "Waarschuwing: Hoog geheugengebruik!" >> temp_report.txt
fi
# Schijfruimte controleren
df -h --output=source,pcent | tail -n +2 | while read line; do
partition=$(echo $line | awk '{print $1}')
usage=$(echo $line | awk '{print $2}' | tr -d '%')
echo "Schijfruimte op $partition: $usage% gebruikt." >> temp_report.txt
if [ "$usage" -gt 90 ]; then
echo "Waarschuwing: Partitie $partition bijna vol." >> temp_report.txt
fi
done
# Netwerkconnectiviteit testen
ping -c 4 8.8.8.8 > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Netwerk: Verbinding met 8.8.8.8 succesvol." >> temp_report.txt
else
echo "Waarschuwing: Geen verbinding met 8.8.8.8." >> temp_report.txt
fi
# Converteer rapport naar PDF
# Vereist dat `pandoc` en `wkhtmltopdf` geïnstalleerd zijn
# Maak een eenvoudige Markdown of HTML versie
cat <<EOF > rapport.html
<html>
<head><title>Server Diagnostisch Rapport</title></head>
<body>
<h1>Server Diagnostisch Rapport</h1>
<pre>
$(cat temp_report.txt)
</pre>
</body>
</html>
EOF
# Converteer HTML naar PDF
wkhtmltopdf rapport.html "$rapport"
# Verwijder tijdelijke bestanden
rm temp_report.txt rapport.html
echo "Rapport gegenereerd: $rapport"
```
**Opmerkingen:**
- Installeer de benodigde tools: `bc`, `wkhtmltopdf`, `top` (standaard), `df`, `ping`.
- Pas drempelwaarden aan op basis van jouw eisen.
- Voor meer gedetailleerde analyses kun je de controles uitbreiden.
---
**Samenvatting:**
Je script voert de belangrijkste diagnostische controles uit (CPU, geheugen, schijfruimte, netwerk), verzamelt bevindingen, en genereert een PDF-rapport met waarschuwingen en aanbevelingen. Hierdoor krijg je snel inzicht in de gezondheid van je Linux-server en kun je tijdig actie ondernemen bij problemen.
provider: deepseek
model: deepseek-chat
Hier is een voorbeeld van een Linux-script voor geautomatiseerde gezondheidsdiagnoses van uw server, inclusief de gevraagde CPU-belastingcontrole en PDF-rapportage:
```bash
#!/bin/bash
# Server Health Diagnostic Script
# Auteur: [Uw Naam]
# Datum: $(date)
# Bestandsnamen definiëren
LOG_FILE="/var/log/server_health.log"
REPORT_FILE="/tmp/server_health_report.txt"
PDF_REPORT="/var/www/html/reports/server_health_$(date +%Y%m%d_%H%M%S).pdf"
# Functie om logboek bij te houden
log_message() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
}
# Rapportkop aanmaken
create_report_header() {
echo "SERVER GEZONDHEIDSRAPPORT" > $REPORT_FILE
echo "==========================" >> $REPORT_FILE
echo "Datum: $(date)" >> $REPORT_FILE
echo "Hostnaam: $(hostname)" >> $REPORT_FILE
echo "" >> $REPORT_FILE
}
# 1. CPU-BELASTING CONTROLE
check_cpu_usage() {
echo "=== CPU ANALYSE ===" >> $REPORT_FILE
local cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
local load_avg=$(cat /proc/loadavg | awk '{print $1", "$2", "$3}')
local cpu_cores=$(nproc)
echo "Huidig CPU-gebruik: $cpu_usage%" >> $REPORT_FILE
echo "Gemiddelde belasting (1, 5, 15 min): $load_avg" >> $REPORT_FILE
echo "Aantal CPU-cores: $cpu_cores" >> $REPORT_FILE
# Drempelwaarden en aanbevelingen
if (( $(echo "$cpu_usage > 90" | bc -l) )); then
echo "STATUS: KRITIEK" >> $REPORT_FILE
echo "AANBEVELING: Onderzoek processen met 'top' of 'htop', overweeg optimalisatie of schaling" >> $REPORT_FILE
elif (( $(echo "$cpu_usage > 80" | bc -l) )); then
echo "STATUS: WAARSCHUWING" >> $REPORT_FILE
echo "AANBEVELING: Monitor trends, overweeg prestatie-optimalisatie" >> $REPORT_FILE
else
echo "STATUS: NORMAAL" >> $REPORT_FILE
echo "AANBEVELING: Huidige prestaties zijn acceptabel" >> $REPORT_FILE
fi
echo "" >> $REPORT_FILE
}
# 2. GEHEUGENGEBRUIK CONTROLE
check_memory_usage() {
echo "=== GEHEUGEN ANALYSE ===" >> $REPORT_FILE
local mem_info=$(free -m | grep Mem)
local total_mem=$(echo $mem_info | awk '{print $2}')
local used_mem=$(echo $mem_info | awk '{print $3}')
local free_mem=$(echo $mem_info | awk '{print $4}')
local mem_percent=$((used_mem * 100 / total_mem))
echo "Totaal geheugen: ${total_mem}MB" >> $REPORT_FILE
echo "Gebruikt geheugen: ${used_mem}MB" >> $REPORT_FILE
echo "Beschikbaar geheugen: ${free_mem}MB" >> $REPORT_FILE
echo "Geheugengebruik: ${mem_percent}%" >> $REPORT_FILE
if [ $mem_percent -gt 90 ]; then
echo "STATUS: KRITIEK" >> $REPORT_FILE
echo "AANBEVELING: Onderzoek geheugengebruik, overweeg swap-optimalisatie of uitbreiding" >> $REPORT_FILE
elif [ $mem_percent -gt 80 ]; then
echo "STATUS: WAARSCHUWING" >> $REPORT_FILE
echo "AANBEVELING: Monitor geheugentrends, overweeg applicatie-optimalisatie" >> $REPORT_FILE
else
echo "STATUS: NORMAAL" >> $REPORT_FILE
echo "AANBEVELING: Geheugengebruik is binnen acceptabele limieten" >> $REPORT_FILE
fi
echo "" >> $REPORT_FILE
}
# 3. SCHIJFRUIMTE CONTROLE
check_disk_usage() {
echo "=== SCHIJFRUIMTE ANALYSE ===" >> $REPORT_FILE
echo "Partitie-informatie:" >> $REPORT_FILE
df -h | grep -v tmpfs >> $REPORT_FILE
echo "" >> $REPORT_FILE
# Controleer kritieke partities
local critical_usage=$(df / /home /var | awk 'NR>1 {print $5 " " $6}' | sed 's/%//')
echo "Kritieke partitie-controle:" >> $REPORT_FILE
echo "$critical_usage" | while read usage mount; do
if [ $usage -gt 90 ]; then
echo "KRITIEK: $mount is ${usage}% vol - Ruim schijf op" >> $REPORT_FILE
elif [ $usage -gt 80 ]; then
echo "WAARSCHUWING: $mount is ${usage}% vol - Monitor ruimtegebruik" >> $REPORT_FILE
else
echo "NORMAAL: $mount is ${usage}% vol" >> $REPORT_FILE
fi
done
echo "" >> $REPORT_FILE
}
# 4. NETWERKCONNECTIVITEIT CONTROLE
check_network_connectivity() {
echo "=== NETWERK ANALYSE ===" >> $REPORT_FILE
# Controleer basisconnectiviteit
if ping -c 3 8.8.8.8 &> /dev/null; then
echo "Internetconnectiviteit: BESCHIKBAAR" >> $REPORT_FILE
else
echo "Internetconnectiviteit: NIET BESCHIKBAAR" >> $REPORT_FILE
fi
# Controleer poorten
echo "Poortcontrole:" >> $REPORT_FILE
local ports=("22" "80" "443")
for port in "${ports[@]}"; do
if netstat -tuln | grep ":$port " > /dev/null; then
echo "Poort $port: LUISTERT" >> $REPORT_FILE
else
echo "Poort $port: NIET BESCHIKBAAR" >> $REPORT_FILE
fi
done
echo "" >> $REPORT_FILE
}
# 5. PDF RAPPORT GENEREREN
generate_pdf_report() {
# Installeer eerst text2pdf indien nodig: sudo apt-get install enscript
if command -v enscript &> /dev/null && command -v ps2pdf &> /dev/null; then
enscript -p /tmp/report.ps $REPORT_FILE
ps2pdf /tmp/report.ps $PDF_REPORT
rm /tmp/report.ps
echo "PDF-rapport gegenereerd: $PDF_REPORT" >> $REPORT_FILE
else
echo "OPMERKING: enscript/ps2pdf niet geïnstalleerd. PDF-rapportage niet beschikbaar." >> $REPORT_FILE
echo "Installeer met: sudo apt-get install enscript ps2pdf"
fi
}
# HOOFDFUNCTIE
main() {
log_message "Server health check gestart"
# Maak rapport directory aan
mkdir -p /var/www/html/reports
# Voer alle controles uit
create_report_header
check_cpu_usage
check_memory_usage
check_disk_usage
check_network_connectivity
# Genereer PDF
generate_pdf_report
log_message "Server health check voltooid"
# Toon rapport locatie
echo "Rapport gegenereerd: $REPORT_FILE"
if [ -f "$PDF_REPORT" ]; then
echo "PDF rapport: $PDF_REPORT"
fi
}
# Script uitvoeren
main
```
**Installatie- en gebruiksinstructies:**
1. **Opslaan als script:**
```bash
sudo nano /usr/local/bin/server_health.sh
```
2. **Uitvoerbaar maken:**
```bash
sudo chmod +x /usr/local/bin/server_health.sh
```
3. **PDF-ondersteuning installeren:**
```bash
sudo apt-get update
sudo apt-get install enscript ps2pdf
```
4. **Uitvoeren:**
```bash
sudo /usr/local/bin/server_health.sh
```
5. **Cron-job voor automatische uitvoering (optioneel):**
```bash
# Elke dag om 02:00 uitvoeren
sudo crontab -e
# Voeg toe: 0 2 * * * /usr/local/bin/server_health.sh
```
**Aanvullende aanbevelingen:**
- Voeg e-mailmeldingen toe voor kritieke problemen
- Bewaar historische rapporten voor trendanalyse
- Pas drempelwaarden aan op basis van uw specifieke workload
- Overweeg monitoringtools zoals Nagios of Zabbix voor uitgebreidere monitoring
Het script controleert alle gevraagde componenten en genereert zowel een tekst- als PDF-rapport met duidelijke statusindicatoren en actie-aanbevelingen.

