Ontwikkel een Bash of PowerShell Script voor Geautomatiseerde Server Log Correlatie en Incidentanalyse
description
Met deze prompt kan de gebruiker geavanceerde serverlogcorrelatie en incidentanalyse automatiseren, wat helpt bij het sneller identificeren van complexe problemen die verspreid zijn over meerdere logbronnen. Dit verbetert het serverbeheer en versnelt de probleemoplossing, beter dan losse loganalyse of handmatige inspectie.
prompt
Help me een Bash of PowerShell script te maken dat serverlogbestanden van verschillende bronnen combineert en correleert om complexe incidenten te analyseren. Logbestanden die ik wil combineren: <voer de paden van logbestanden in> Analyseperiode ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een Bash-script dat de genoemde logbestanden combineert, filtert op de opgegeven incidentpatronen, en een rapport genereert:
```bash
#!/bin/bash
# Definieer logbestanden
LOGFILES=("/var/log/syslog" "/var/log/auth.log")
# Defineer de zoekpatronen
PATTERNS=("ERR123" "WARNING42")
# Uitvoerbestand
OUTPUT="/home/user/incident_rapport.txt"
# Maak of leeg het rapportbestand
> "$OUTPUT"
# Voeg een kop toe met datum en tijd
echo "Incident Rapport - $(date)" >> "$OUTPUT"
echo "==========================" >> "$OUTPUT"
echo "" >> "$OUTPUT"
# Loop door elk logbestand
for LOGFILE in "${LOGFILES[@]}"; do
echo "Analyseren van $LOGFILE ..." >> "$OUTPUT"
# Check of het logbestand bestaat
if [ -f "$LOGFILE" ]; then
for PATTERN in "${PATTERNS[@]}"; do
echo "Zoek naar patroon: $PATTERN" >> "$OUTPUT"
echo "----------------------------------------" >> "$OUTPUT"
# Filter de logs op het patroon en voeg toe aan het rapport
grep "$PATTERN" "$LOGFILE" >> "$OUTPUT"
echo "" >> "$OUTPUT"
done
else
echo "Logbestand $LOGFILE niet gevonden." >> "$OUTPUT"
fi
echo "" >> "$OUTPUT"
done
echo "Rapport gegenereerd op $OUTPUT"
```
**Gebruik:**
1. Sla dit script op als bijvoorbeeld `analyze_logs.sh`.
2. Maak het uitvoerbaar met: `chmod +x analyze_logs.sh`.
3. Voer het script uit met: `./analyze_logs.sh`.
Dit script zoekt naar de patronen ERR123 en WARNING42 in de opgegeven logbestanden, combineert de resultaten in één rapport, en plaatst dat in `/home/user/incident_rapport.txt`.
Indien je meer patronen wilt toevoegen, voeg ze toe aan de `PATTERNS` array.
provider: deepseek
model: deepseek-chat
Hier is een Bash-script dat aan uw vereisten voldoet:
```bash
#!/bin/bash
# Definieer variabelen
SYSLOG="/var/log/syslog"
AUTH_LOG="/var/log/auth.log"
OUTPUT_FILE="/home/user/incident_rapport.txt"
ERROR_PATTERNS=("ERR123" "WARNING42")
START_TIME=""
END_TIME=""
# Functie om timestamp te parsen
parse_timestamp() {
# Voorbeeld: Jan 1 12:00:00
date -d "$1" +%s 2>/dev/null
}
# Vraag om tijdsperiode
echo "Voer de starttijd in (bijv: 'Jan 1 12:00:00'):"
read START_TIME
echo "Voer de eindtijd in (bijv: 'Jan 1 13:00:00'):"
read END_TIME
# Converteer naar timestamp
START_TS=$(parse_timestamp "$START_TIME")
END_TS=$(parse_timestamp "$END_TIME")
if [[ -z "$START_TS" || -z "$END_TS" ]]; then
echo "Ongeldige tijdformaat. Gebruik bijvoorbeeld: 'Jan 1 12:00:00'"
exit 1
fi
# Maak rapport aan
echo "=== INCIDENTRAPPORT ===" > "$OUTPUT_FILE"
echo "Periode: $START_TIME - $END_TIME" >> "$OUTPUT_FILE"
echo "Geanalyseerde logs: $SYSLOG, $AUTH_LOG" >> "$OUTPUT_FILE"
echo "Gezochte patronen: ${ERROR_PATTERNS[*]}" >> "$OUTPUT_FILE"
echo "=====================================" >> "$OUTPUT_FILE"
echo "" >> "$OUTPUT_FILE"
# Functie om logs te analyseren
analyze_log() {
local log_file=$1
local pattern=$2
echo "Analyseren van $log_file voor patroon: $pattern" >> "$OUTPUT_FILE"
echo "----------------------------------------" >> "$OUTPUT_FILE"
while IFS= read -r line; do
if [[ "$line" == *"$pattern"* ]]; then
# Extraheer timestamp uit loglijn (aanpassen indien nodig)
log_time=$(echo "$line" | awk '{print $1" "$2" "$3}')
log_ts=$(parse_timestamp "$log_time")
# Controleer of binnen tijdsperiode valt
if [[ "$log_ts" -ge "$START_TS" && "$log_ts" -le "$END_TS" ]]; then
echo "$line" >> "$OUTPUT_FILE"
fi
fi
done < "$log_file"
echo "" >> "$OUTPUT_FILE"
}
# Analyseer elke log voor elk patroon
for pattern in "${ERROR_PATTERNS[@]}"; do
analyze_log "$SYSLOG" "$pattern"
analyze_log "$AUTH_LOG" "$pattern"
done
# Correlatie-analyse
echo "=== CORRELATIE-ANALYSE ===" >> "$OUTPUT_FILE"
echo "Gevonden incidenten per tijdsinterval:" >> "$OUTPUT_FILE"
# Groepeer logs per tijdseenheid (bijv. per 5 minuten)
for ((ts=START_TS; ts<=END_TS; ts+=300)); do
interval_start=$(date -d "@$ts" "+%b %d %H:%M:%S")
interval_end=$(date -d "@$((ts+300))" "+%b %d %H:%M:%S")
echo "Interval: $interval_start - $interval_end" >> "$OUTPUT_FILE"
for pattern in "${ERROR_PATTERNS[@]}"; do
count_syslog=$(grep -c "$pattern" "$SYSLOG" 2>/dev/null)
count_auth=$(grep -c "$pattern" "$AUTH_LOG" 2>/dev/null)
if [[ $count_syslog -gt 0 || $count_auth -gt 0 ]]; then
echo " $pattern: $count_syslog keer in syslog, $count_auth keer in auth.log" >> "$OUTPUT_FILE"
fi
done
echo "" >> "$OUTPUT_FILE"
done
echo "Rapport gegenereerd op: $(date)" >> "$OUTPUT_FILE"
echo "Rapport opgeslagen in: $OUTPUT_FILE"
# Toon samenvatting
echo "Analyse voltooid!"
echo "Totaal gevonden ERR123: $(grep -c "ERR123" "$OUTPUT_FILE")"
echo "Totaal gevonden WARNING42: $(grep -c "WARNING42" "$OUTPUT_FILE")"
```
**Gebruiksaanwijzing:**
1. Sla het script op als `incident_analyzer.sh`
2. Maak het uitvoerbaar: `chmod +x incident_analyzer.sh`
3. Voer uit: `./incident_analyzer.sh`
4. Volg de prompts voor start- en eindtijd
**Kenmerken van dit script:**
- Combineert syslog en auth.log
- Zoekt naar specifieke patronen (ERR123, WARNING42)
- Filtert op tijdsperiode
- Genereert gedetailleerd correlatierapport
- Toont samenvatting van gevonden incidenten
**Opmerking:** Het timestamp-formaat kan per systeem verschillen. Pas de `parse_timestamp` functie aan indien nodig voor uw specifieke logformaat.