AWK Log Analysis
AWK patterns for parsing authentication logs, syslog, and system logs.
Authentication Logs
journalctl -u sshd --since "1 hour ago" | awk '/Failed password/ {print $(NF-3), $(NF-5)}'
journalctl -u sshd --since "1 hour ago" | awk '/Failed password/ {ip[$(NF-3)]++} END {for(i in ip) print ip[i], i}' | sort -rn
journalctl -u sshd --since today | awk '/Accepted/ {print $1, $2, $3, $9, $11}'
journalctl -u sssd --since "1 hour ago" | awk '/GSSAPI error|Server not found|authentication failure/ {print}'
journalctl -u sssd | awk -F’Minor = ' '/Minor =/ {print $2}' | sort | uniq -c | sort -rn
journalctl | awk '/pam_unix.*authentication failure/ {print $1, $2, $3, $NF}'
klist | awk '/krbtgt/ {print $3, $4, $5}'
klist | awk '/Expires/ {print $3, $4}' | while read d t; do [[ $(date -d "$d $t" +%s) -lt $(date +%s) ]] && echo "EXPIRED"; done
Syslog Parsing
journalctl --since "1 hour ago" -p err | awk '{print $1, $2, $3, $5, $6}'
journalctl --since today -p err | awk '{unit[$5]++} END {for(u in unit) print unit[u], u}' | sort -rn | head -10
journalctl -b | awk '/Failed to start/ {$1=$2=$3=$4=""; print}' | sort | uniq
journalctl -b | awk '/Started/ {gsub(/Started /,""); $1=$2=$3=$4=""; print}' | head -20
awk '{print $1, $2, $3, $5}' /var/log/messages | tail -20
awk -F'[][]' '{print $1}' /var/log/messages | awk '{print $5}' | sort | uniq -c | sort -rn
dmesg -l err,warn | awk -F']' '{print $2}' | head -20
dmesg | awk '/usb/ {print}' | tail -10
dmesg | awk '/error|fail|I\/O/ && /sd[a-z]/ {print}'
journalctl --since "2024-01-01 10:00" --until "2024-01-01 11:00" | awk '{print}'
awk '$3>="10:00:00" && $3⇐"11:00:00"' /var/log/messages
journalctl --since "10 minutes ago" | awk '{min=$1" "$2" "substr($3,1,5); count[min]++} END {for(m in count) print m, count[m]}' | sort
journalctl --since "10 minutes ago" | awk '{min=substr($3,1,5); count[min]++} END {for(m in count) if(count[m]>100) print "ALERT:", m, count[m]}'