Webová agentúra » Digitálne správy » Ako extrahovať a triediť stĺpce zo súborov denníka v systéme Linux

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.

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.

★ ★ ★ ★ ★