logide-parsimine/apache2.md

2.2 KiB

#Apache2 logide parsimine

Laadi alla mõned näidised ja paki need lahti:

wget https://media.k-space.ee/apache2.tar
ionice nice tar xvf apache2.tar # Lahti pakkimine madala CPU ja IO prioriteediga
cd apache2

Leiame esimesed kümme GET päringut apache logifailist:

cat access.log | grep  GET | head -n3

Esimene tulp kus on tavaliselt IP aadressid, kus tulbad tühikutega eraldatud:

cat access.log | grep GET | cut -d " " -f 1 | head
cat access.log | grep GET | awk '{ print $1 }' | head

Natuke keerukam näide awk abil, kus GET sõnet otsitakse konkreetsest tulbast mis on kahekordsete ülakomadega eraldatud:

cat access.log | awk -F\" '{ if ($2 ~ "^GET ") print $1 }' | awk '{ print $1 }' | head

Teisest tulbast kuni lõpuni välja:

cat access.log | grep GET | cut -d " " -f 2- | head

Sorteeri IP aadressid mis esinesid logifailides:

cat access.log | grep GET | cut -d " " -f 1 | sort

Loenda kokku ühesuguste IP-dega read:

cat access.log | grep GET | cut -d " " -f 1 | sort | uniq -c

Top 10 IP aadressid kust HTTP päringud tulid:

cat access.log | grep GET | cut -d " " -f 1 | sort | uniq -c | sort -n -r | head

Top 10 IP aadressid kahest kokku pakitud failist:

zcat access.log.1.gz access.log.2.gz \
 | grep GET \
 | cut -d " " -f 1 \
 | sort \
 | uniq -c \
 | sort -n -r \
 | head

Mitmest (pakitud) logifailist lugemine, asjakohaste ridade välja filtreerimine, esimese tulba välja lõikamine, sorteerimine deduplitseerimiseks, ridade loendamine, vastete arvu järgi sorteerimine ning lõpuks top 10 kuvamine:

(cat access.log; zcat access.log.1.gz access.log.2.gz) \
 | grep GET \
 | cut -d " " -f 1 \
 | sort \
 | uniq -c \
 | sort -n -r \
 | head

Enim külastatud URL veebiserveris:

cat access.log \
 | awk -F \" '{ print $2}' \
 | cut -d ' ' -f 2- \
 | sort \
 | uniq -c \
 | sort -n -r \
 | head

Kõige enam sisu postitanud veebilehitsejad:

cat access.log \
 | awk -F \" '{ if ($2 ~ "^POST ") print $6}' \
 | sort \
 | uniq -c \
 | sort -n -r \
 | head

Veateate 5xx põhjustanud päringute leidmine:

(cat access.log; zcat access.log*.gz) \
  | awk -F \" '{ if ($3 ~ "^ 5[0-9][0-9] ") print $0}'