Ako extrahovať a triediť stĺpce zo súborov denníka v systéme Linux
Zoradenie súboru denníka podľa konkrétneho stĺpca je užitočné pre rýchle nájdenie informácií. Protokoly sú zvyčajne uložené ako čistý text, takže na ich spracovanie a zobrazenie čitateľnejším spôsobom môžete použiť nástroje na manipuláciu s textom v príkazovom riadku.
Sommaire
Extrakcia stĺpcov rezom a awk
le cut
et awk
obslužné programy sú dva rôzne spôsoby extrahovania stĺpca informácií z textových súborov. Oba predpokladajú, že vaše súbory denníka sú oddelené medzerami, napríklad:
stĺpček stĺpček stĺpček
Je to problém, ak údaje v stĺpcoch obsahujú prázdne miesta, napríklad dátumy („streda, 12. júna“). Kým cut
môžu to byť tri samostatné stĺpce, stále môžete extrahovať všetky tri za predpokladu, že štruktúra vášho súboru denníka je konzistentná.
cut
použitie je veľmi jednoduché:
mačka system.log | cut -d '' -f 1-6
le cat
príkaz načíta obsah system.log
a potrubia do cut
, -d
príznak určuje oddeľovač, v tomto prípade je to medzera. (Predvolená hodnota je karta, t
.) -f
Príznak určuje polia, ktoré sa majú zobraziť. Tento príkaz konkrétne vytlačí prvých šesť stĺpcov súboru system.log
. Ak chcete vytlačiť iba tretí stĺpec, musíte použiť -f 3
vlajka.
awk
je silnejší, ale nie taký výstižný. cut
je užitočný na extrahovanie stĺpcov, ako keby ste chceli získať zoznam adries IP z protokolov Apache. awk
môže zmeniť usporiadanie celých riadkov, čo môže byť užitočné pri triedení celého dokumentu podľa konkrétneho stĺpca. awk
je úplný programovací jazyk, ale na vytlačenie stĺpcov môžete použiť jednoduchý príkaz:
cat system.log | awk '{print $ 1, $ 2}'
awk
spustite príkaz pre každý riadok súboru. Štandardne rozdelí súbor na medzery a uloží každý stĺpec do premenných $1
, $2
, $3
, atď. Pomocou print $1
, môžete vytlačiť prvý stĺpec, ale neexistuje jednoduchý spôsob, ako vytlačiť celý rad stĺpcov bez použitia slučiek.
Výhodou awk
je, že príkaz môže odkazovať na celý riadok naraz. Obsah riadka je uložený v premennej $0
, pomocou ktorého môžete vytlačiť celý riadok. Môžete teda napríklad vytlačiť tretí stĺpec pred vytlačením zvyšku riadka:
awk '{print $ 3 "" $ 0}'
le " "
vytlačte medzeru medzi $3
et $0
. Tento príkaz dvakrát zopakuje stĺpec tri, ale môžete to obísť nastavením parametra $3
premenná na null:
awk '{printf $ 3; 3 doláre = ""; vytlačiť „“ $ 0} '
le printf
príkaz nevytlačí nový riadok. Rovnako tak môžete z výstupu vylúčiť konkrétne stĺpce tak, že ich pred tlačou nastavíte na prázdne reťazce. $0
:
awk '{$ 1 = $ 2 = $ 3 = ""; vytlačiť $ 0} '
S ním môžete urobiť oveľa viac awk
, vrátane zhody regulárnych výrazov, ale v tomto prípade použitia extrakcia z pripraveného stĺpca funguje dobre.
Zoradenie stĺpcov pomocou zoradenia a uniq
le sort
Príkaz je možné použiť na usporiadanie zoznamu údajov na základe konkrétneho stĺpca. Syntax je:
triediť -k 1
kde -k
príznak označuje číslo stĺpca. Spustíte vstup v tomto príkaze a vyplivne usporiadaný zoznam. Predvolene, sort
používa abecedné poradie, ale podporuje viac možností prostredníctvom vlajok, ako napr -n
pre digitálne triedenie, -h
na triedenie prípon (1M> 1K), -M
na triedenie skratiek mesiacov a -V
na triedenie čísel verzií súborov (súbor-1.2.3> súbor-1.2.1).
le uniq
Príkaz odfiltruje duplicitné riadky a zostanú iba jedinečné riadky. Funguje iba pre susedné riadky (z dôvodov výkonu), preto by ste ho mali vždy použiť potom sort
na odstránenie duplikátov v celom súbore. Syntax je jednoducho:
triediť -k 1 | uniq
Ak chcete uviesť iba duplikáty, použite -d
vlajka.
uniq
môže tiež počítať počet duplikátov s príponou -c
indikátor, vďaka čomu je veľmi vhodný na sledovanie frekvencie. Ak napríklad chcete získať zoznam najlepších adries IP, ktoré sú na vašom serveri Apache, môžete na svojom počítači spustiť nasledujúci príkaz access.log
:
rez -d '' -f 1 | osud | uniq -c | triediť -nr | hlava
Tento príkazový reťazec odstráni stĺpec IP adresy, zoskupí duplikáty, odstráni duplikáty pri počítaní každého výskytu a potom zoradí podľa stĺpca počet v zostupnom číselnom poradí, takže vám zostane zoznam, ktorý vyzerá takto:
21 192.168.1.1 12 10.0.0.1 5 1.1.1.1 2 8.0.0.8
Rovnaké techniky môžete použiť na svoje súbory denníka okrem iných nástrojov, ako napríklad awk
et sed
, na extrahovanie užitočných informácií. Tieto reťazové príkazy sú dlhé, ale nemusíte ich zadávať zakaždým, pretože ich môžete kedykoľvek uložiť do bash skriptu alebo do aliasov pomocou ~/.bashrc
.
Filtrovanie údajov pomocou príkazov grep a awk
grep
je veľmi jednoduchý príkaz; zadáte hľadaný výraz a zadáte doň vstup a vyplivne každý riadok, ktorý obsahuje hľadaný výraz. Ak chcete napríklad skontrolovať, či vo vašom protokole prístupu Apache nie sú chyby 404, môžete urobiť:
prístup mačiek.log | grep "404"
čo by vyplivlo zoznam záznamov denníka zodpovedajúcich danému textu.
však, grep
nemôže obmedziť vyhľadávanie na konkrétny stĺpec. Tento príkaz preto zlyhá, ak máte inde v súbore text „404“. Ak chcete hľadať iba v stĺpci stavového kódu HTTP, mali by ste použiť awk
:
prístup mačiek.log | awk '{if ($ 9 == "404") print $ 0;}'
s awk
, máte tiež tú výhodu, že môžete vyhľadávať negatívne. Môžete napríklad nájsť všetky položky denníka, ktoré nemá vrátiť so stavovým kódom 200 (OK):
prístup mačiek.log | awk '{if ($ 9! = "200") print $ 0;}'
ako aj prístup k všetkým funkciám programovania awk
poskytuje.
Možnosti GUI pre webové protokoly
GoAccess je nástroj CLI, ktorý monitoruje prístupový protokol vášho webového servera v reálnom čase a triedi ho podľa každého užitočného poľa. Beží úplne vo vašom termináli, takže ho môžete používať cez SSH, ale má tiež oveľa intuitívnejšie webové rozhranie.
apachetop
je ďalší nástroj špeciálne pre apache, ktorý možno použiť na filtrovanie a triedenie podľa stĺpcov v prístupovom protokole. Beží v reálnom čase priamo na vašom access.log.