Ontwikkel een Bash of PowerShell Script voor Geautomatiseerde Server Incidentmelding en Alerting
description
Met deze prompt kan de gebruiker een script ontwikkelen dat proactief serverproblemen detecteert en direct meldingen verstuurt, waardoor reactietijden verbeteren en downtime wordt beperkt. Het script is volledig aanpasbaar aan specifieke incidenttypen en meldingskanalen, wat het effectiever maakt dan generieke oplossingen.
prompt
Help me een Bash of PowerShell script te maken dat serverincidenten automatisch detecteert en realtime meldingen verstuurt via <meldingsmethode> naar <ontvangers>. Incidenttypen ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een Bash-script dat serverincidenten automatisch detecteert en realtime meldingen verstuurt via e-mail. Het script houdt ook logboeken bij en bevat configuratie-opties voor meldingsdrempels en frequentie.
```bash
#!/bin/bash
# Configuratie
CPU_THRESHOLD=90 # CPU-belasting in procenten
DISK_THRESHOLD=10 # Beschikbare diskruimte in procenten
CHECK_INTERVAL=300 # Controle-interval in seconden (bijv. 5 minuten)
LAST_ALERT_FILE="/tmp/server_alerts_last_sent"
LOG_FILE="/var/log/server_alerts.log"
EMAIL="it-team@voorbeeld.com"
# Functie om logs bij te werken
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}
# Functie om e-mail te versturen
send_email() {
local subject="$1"
local body="$2"
echo "$body" | mail -s "$subject" "$EMAIL"
log "E-mail verzonden: $subject"
}
# Controle CPU-belasting
check_cpu() {
# Gemiddelde CPU-belasting over 1 minuut
CPU_LOAD=$(top -bn1 | grep "load average:" | awk '{print $10}' | sed 's/,//')
CPU_PERCENT=$(echo "$CPU_LOAD * 100 / $(nproc)" | bc -l | awk '{printf "%.0f", $1}')
if [ "$CPU_PERCENT" -gt "$CPU_THRESHOLD" ]; then
echo "$CPU_PERCENT" > /tmp/cpu_alert
if [ ! -f "$LAST_ALERT_FILE" ] || [ "$(cat "$LAST_ALERT_FILE")" != "cpu" ] || [ $(( $(date +%s) - $(stat -c %Y "$LAST_ALERT_FILE") )) -ge "$CHECK_INTERVAL" ]; then
send_email "CPU Alert" "CPU-belasting is hoog: ${CPU_PERCENT}%."
echo "cpu" > "$LAST_ALERT_FILE"
fi
fi
}
# Controle schijfruimte
check_disk() {
# Controle op alle gemonteerde disks
for mount_point in $(df --output=target | tail -n +2); do
AVAILABLE=$(df "$mount_point" | awk 'NR==2 {print $4}')
TOTAL=$(df -k "$mount_point" | awk 'NR==2 {print $2}')
PERCENT_FREE=$(df "$mount_point" | awk 'NR==2 {print $5}' | sed 's/%//')
PERCENT_USED=100-$PERCENT_FREE
if [ "$PERCENT_FREE" -lt "$DISK_THRESHOLD" ]; then
# Check of recent alert al is verstuurd
ALERT_KEY="disk_${mount_point}"
if [ ! -f "$LAST_ALERT_FILE" ] || [ "$(cat "$LAST_ALERT_FILE")" != "$ALERT_KEY" ] || [ $(( $(date +%s) - $(stat -c %Y "$LAST_ALERT_FILE") )) -ge "$CHECK_INTERVAL" ]; then
send_email "Disk Space Alert" "Weinig beschikbare schijfruimte (${PERCENT_FREE}%) op mount point: $mount_point."
echo "$ALERT_KEY" > "$LAST_ALERT_FILE"
fi
fi
done
}
# Main loop
while true; do
check_cpu
check_disk
sleep "$CHECK_INTERVAL"
done
```
**Gebruik:**
- Pas de variabelen aan naar jouw wensen (drempels, interval, e-mail).
- Zorg dat het script uitvoerbaar is: `chmod +x /path/naar/script.sh`.
- Voer het script uit als root of met voldoende rechten.
- Voor continue monitoring, kun je het script starten bij het opstarten of als een systemd-service.
**Let op:**
- Installeer `mail` of een andere mailcli (bijvoorbeeld `mailutils`) op je server.
- Controleer of je server e-mail kan versturen.
Wil je een PowerShell-versie of verdere aanpassingen?
provider: deepseek
model: deepseek-chat
Hier is een PowerShell script voor Windows servers dat aan uw vereisten voldoet:
```powershell
# Server Incident Monitor Script
# Configuratie-instellingen
$Config = @{
EmailOntvanger = "it-team@voorbeeld.com"
EmailAfzender = "server-monitor@voorbeeld.com"
SMTPServer = "smtp.voorbeeld.com"
LogBestand = "C:\Logs\server_alerts.log"
# Monitor drempels
CPU_Drempel = 90
SchijfRuimte_Drempel = 10
# Controle-interval in seconden
ControleInterval = 300
}
# E-mail functie
function VerstuurAlert {
param(
[string]$Onderwerp,
[string]$Bericht
)
try {
Send-MailMessage -From $Config.EmailAfzender `
-To $Config.EmailOntvanger `
-Subject $Onderwerp `
-Body $Bericht `
-SmtpServer $Config.SMTPServer
LogBericht "ALERT_VERZONDEN: $Onderwerp"
}
catch {
LogBericht "FOUT: Kon e-mail niet verzenden - $($_.Exception.Message)"
}
}
# Logboek functie
function LogBericht {
param([string]$Bericht)
$Tijdstempel = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$LogEntry = "[$Tijdstempel] $Bericht"
Write-Host $LogEntry
Add-Content -Path $Config.LogBestand -Value $LogEntry
}
# CPU monitoring functie
function ControleerCPU {
$CPUUsage = (Get-Counter "\Processor(_Total)\% Processor Time" -SampleInterval 1 -MaxSamples 1).CounterSamples.CookedValue
if ($CPUUsage -gt $Config.CPU_Drempel) {
$Bericht = "HOGE CPU BELASTING: $([math]::Round($CPUUsage,2))% op server $env:COMPUTERNAME"
VerstuurAlert -Onderwerp "CPU Alert - $env:COMPUTERNAME" -Bericht $Bericht
LogBericht "INCIDENT: $Bericht"
return $true
}
return $false
}
# Schijfruimte monitoring functie
function ControleerSchijfruimte {
$Schijven = Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3"
foreach ($Schijf in $Schijven) {
$VrijPercentage = ($Schijf.FreeSpace / $Schijf.Size) * 100
if ($VrijPercentage -lt $Config.SchijfRuimte_Drempel) {
$Bericht = "WEINIG SCHIJFRUIMTE: Schijf $($Schijf.DeviceID) heeft $([math]::Round($VrijPercentage,2))% vrij ruimte over"
VerstuurAlert -Onderwerp "Schijfruimte Alert - $env:COMPUTERNAME" -Bericht $Bericht
LogBericht "INCIDENT: $Bericht"
return $true
}
}
return $false
}
# Hoofd monitoring loop
function Start-Monitoring {
LogBericht "Monitoring gestart op server $env:COMPUTERNAME"
while ($true) {
try {
$CPUIncident = ControleerCPU
$SchijfIncident = ControleerSchijfruimte
if (-not ($CPUIncident -or $SchijfIncident)) {
LogBericht "STATUS: Alle systemen normaal"
}
}
catch {
LogBericht "FOUT: Monitoring fout - $($_.Exception.Message)"
}
Start-Sleep -Seconds $Config.ControleInterval
}
}
# Script uitvoering
try {
# Controleer of log directory bestaat
$LogDir = Split-Path -Path $Config.LogBestand -Parent
if (-not (Test-Path $LogDir)) {
New-Item -ItemType Directory -Path $LogDir -Force
}
Start-Monitoring
}
catch {
Write-Host "Kritieke fout: $($_.Exception.Message)"
exit 1
}
```
**Configuratie aanpassingen:**
- Pas `$Config` variabelen aan naar uw omgeving
- Zorg dat de SMTP-server correct is geconfigureerd
- Wijzig het controle-interval indien nodig
**Gebruik:**
1. Sla het script op als `ServerMonitor.ps1`
2. Voer uit als administrator: `powershell -File ServerMonitor.ps1`
3. Voor permanente monitoring: installeer als Windows Service
**Logboek voorbeeld:**
```
[2024-01-15 14:30:45] Monitoring gestart op server SRV01
[2024-01-15 14:35:45] STATUS: Alle systemen normaal
[2024-01-15 14:40:45] INCIDENT: HOGE CPU BELASTING: 95.5% op server SRV01
```
Het script bevat alle gevraagde functionaliteit en is eenvoudig aan te passen voor extra monitoringscenario's.