SMsoft – informatica e dintorni

BASH: Analizzare i log di apache con una riga

L’analisi dei files di log di un server web può servire per capire e diagnosticare problemi, anomalie, abusi, pagine più viste, referrer, etc etc.

Si possono usare i classici analizzatori di statistiche, oppure magari qualche script bash molto semplice e spesso molto più veloce ed efficace.

Queste alcune delle più utili, da modificare secondo le proprie esigenze.

# top 20 URLs per le ultime 5000 hits
tail -5000 ./transfer.log | awk ‘{print $7}’ | sort | uniq -c | sort -rn | head -20
tail -5000 ./transfer.log | awk ‘{freq[$7]++} END {for (x in freq) {print freq[x], x}}’ | sort -rn | head -20

# top 20 URLS escludendo i POST dalle ultime 5000 hits
tail -5000 ./transfer.log | awk -F”[ ?]” ‘{print $7}’ | sort | uniq -c | sort -rn | head -20
tail -5000 ./transfer.log | awk -F”[ ?]” ‘{freq[$7]++} END {for (x in freq) {print freq[x], x}}’ | sort -rn | head -20

# top 20 IPs dalle ultime 5000 hits
tail -5000 ./transfer.log | awk ‘{print $1}’ | sort | uniq -c | sort -rn | head -20
tail -5000 ./transfer.log | awk ‘{freq[$1]++} END {for (x in freq) {print freq[x], x}}’ | sort -rn | head -20

# top 20 URLs da un certo IP (es 1.2.3.4) dalle ultime 5000 hits
IP=1.2.3.4; tail -5000 ./transfer.log | grep $IP | awk ‘{print $7}’ | sort | uniq -c | sort -rn | head -20
IP=1.2.3.4; tail -5000 ./transfer.log | awk -v ip=$IP ‘ $1 ~ ip {freq[$7]++} END {for (x in freq) {print freq[x], x}}’ | sort -rn | head -20

# top 20 URLS richieste da un certo IP(es 1.2.3.4), escludendo le richieste POST, dalle ultime 5000 hits
IP=1.2.3.4; tail -5000 ./transfer.log | fgrep $IP | awk -F “[ ?]” ‘{print $7}’ | sort | uniq -c | sort -rn | head -20
IP=1.2.3.4; tail -5000 ./transfer.log | awk -F”[ ?]” -v ip=$IP ‘ $1 ~ ip {freq[$7]++} END {for (x in freq) {print freq[x], x}}’ | sort -rn | head -20

# top 20 referrers dalle ultime 5000 hits
tail -5000 ./transfer.log | awk ‘{print $11}’ | tr -d ‘”‘ | sort | uniq -c | sort -rn | head -20
tail -5000 ./transfer.log | awk ‘{freq[$11]++} END {for (x in freq) {print freq[x], x}}’ | tr -d ‘”‘ | sort -rn | head -20

# top 20 user agents dalle ultime 5000 hits
tail -5000 ./transfer.log | cut -d\ -f12- | sort | uniq -c | sort -rn | head -20

# totale dei dati (in MB) trasferiti dalle ultime 5000 hits
tail -5000 ./transfer.log | awk ‘{sum+=$10} END {print sum/1048576}’

enjoy!




Se hai trovato utili le informazioni su questo blog,
Fai una donazione!
Clicca sul bottone qui sotto o almeno clicca sul banner pubblicitario :-)
*
Taggato su: , ,

Commenti

Page optimized by WP Minify WordPress Plugin