Statistika pro apache2 logy – počet unikátních IP a requestů

Každý někdy řešil statistiky svého apache2 / webu a potřeboval zjistit kolik mu tam chodí lidí. Pro hrubou představu kolik Unikátních IP k vám přijde můžete zjistit pomocí příkazu níž.

Bere se v potaz že logy jsou rotovány denně tak budete tedy vědět kolik requestů přijde a kolik z toho je unikátních IP

Oneliner se spouští v adresáři kde jsou access.logy

for i in `ls access.log* -rt`;do\
echo -ne `stat -c "%y %n" $i`\;;\
echo -ne LINES: `zcat -f $i | wc -l`\;;\
echo -ne UIP: `zcat -f $i | awk '{print $1}' | sort -u | wc -l`;echo ;\
done

Vysvětlíme si jak to celé funguje.

  • for – pustíme si smyčku FOR – klíčové slovo
    • i – je to proměnná která se bude dále používat ve smyčce
    • `ls access.log* -rt`
      • tento příkaz ve zpětných uvozovkách je „vykononán“ a výsledek je vrácen jako seznam souborů access.log* se všemi dalšímí znaky za hvězdičkou, tedy access.log.80.gz a další
      • parametr -rt nám to pěkně srovná podle času od nejstaršího po nejnovější
    • echo -ne `stat -c "%y %n" $i`\;;
      • to nám vytiskne do příkazového řádku opět vykonaný příkaz stat -c "%y %n" $i kde $i je proměnná ze smyčky – název souboru. Parametr -ne nám zajistí, že pak echo neodřádkuje na další řádek.
      • tento příkaz vytiskne čas souboru a jeho název
      • \; vytiskneme si ; – zpětné lomítko slouží jako escape character , protože ; má zvláštní význam v bashi – ukončuje příkaz a dáváte mu znamení že začíná další
    • echo -ne LINES: `zcat -f $i | wc -l`\;
      • vypíše všechny řádky a spočítá je
      • zcat -f $i je varianta cat, ale dokáže pracovat ze soubory gzip rovnou. Parametr -f udává že komprimované soubory gzipem dekomprimuje a ty co kompimované nejsou tak přečte jako cat. $i je opět soubor ze smyčky, pořád ten stejný
      • wc -l spočítá řádky které jsou mu předány rourkou z předchozího příkazu – počet řádků v access logu – requestů a tento počet vytiskne jako vykonaný příkaz
    • echo -ne UIP: `zcat -f $i | awk '{print $1}' | sort -u | wc -l`;echo ;
      • Vypíšeme si unikátní IP
      • Opět načteme soubory zcatem
      • awk ‚{print $1}‘ nám vypíše první „sloupec“ z textu který nám předá rourka – v tomto případě IP adresa
      • sort -u nám srovná všechny IP adresy z předhozí rourky a udělá jejich unikátní seznam. IP adresa tedy bude unikátní k dalšímu zpracování rourkou
      • wc -l sečte seznam unikátních IP z předchozí rourky a tento počet vytiskne jako vykonaný příkaz
      • echo všechno odřádkuje a pokračujeme hurá na další soubor ve smyčce
  • done

Výstup pak vypadá následovně. Po menších úpravách lze dát třeba do excelu, jako csv a udělat si grafík.  Mě to takhle stačilo abych měl představu kolik unikátních IP přistupuje na web

2021-03-18 00:00:02.000000000 +0100 access.log.23.gz;LINES: 284832;UIP: 3531
2021-03-19 00:00:15.000000000 +0100 access.log.22.gz;LINES: 276228;UIP: 3543
2021-03-20 00:00:07.000000000 +0100 access.log.21.gz;LINES: 254086;UIP: 3331
2021-03-21 00:00:18.000000000 +0100 access.log.20.gz;LINES: 282629;UIP: 3518
2021-03-22 00:00:15.000000000 +0100 access.log.19.gz;LINES: 318108;UIP: 3808
2021-03-23 00:00:20.000000000 +0100 access.log.18.gz;LINES: 287162;UIP: 3732
2021-03-24 00:00:05.000000000 +0100 access.log.17.gz;LINES: 305363;UIP: 3989
2021-03-25 00:00:15.000000000 +0100 access.log.16.gz;LINES: 273275;UIP: 3548
2021-03-26 00:00:17.000000000 +0100 access.log.15.gz;LINES: 268211;UIP: 3622
2021-03-27 00:00:16.000000000 +0100 access.log.14.gz;LINES: 278973;UIP: 3629
2021-03-28 00:00:21.000000000 +0100 access.log.13.gz;LINES: 467037;UIP: 4623

Komentáře

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.