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ší
- to nám vytiskne do příkazového řádku opět vykonaný příkaz
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