Hur man Extrahera och Sortera Kolumner av Logg-Filer på Linux

0
252

Sortering av en logg-fil av en viss kolumn är användbar för att hitta information snabbt. Loggar lagras vanligtvis som vanlig text, så du kan använda kommandoraden för att förändra text verktyg för att bearbeta dem och visa dem på ett mer läsbart sätt.

Extrahera Kolumner med att klippa och awk

Klipp ut och awk verktyg är två olika sätt att extrahera en kolumn med information från en textfil. Både anta dina log-filer är avgränsas med blanktecken, till exempel:

kolumn kolumn kolumn

Detta innebär en fråga om data i kolumner innehåller blanktecken, såsom datum (“On Jun 12”). Medan snittet kan se detta som tre separata kolumner, kan du fortfarande extrahera alla tre av dem på en gång, förutsatt att strukturen på din logg-filen är konsekvent.

cut är mycket enkel att använda:

cat-systemet.logga in | cut-d ” -f 1-6

Katten kommando läser innehållet i systemet.logga in och rör det till att klippa. -D flagga anger avgränsare, i detta fall är ett blanktecken. (Standard är att tab, t.) Flaggan-f anger vilka fält som ska till utgång. Detta kommando specifikt kommer att skriva de första sex kolumner av systemet.logga in. Om du ville bara skriva ut den tredje kolumnen, skulle du använda den -f 3 flagg.

awk är mer kraftfullt, men inte lika tydligt. cut är användbara för att utvinna kolumner, som om du ville att få en lista över IP-adresser från din Apache-loggar. awk kan ordna hela linjer, som kan vara användbara för att sortera hela dokumentet genom att en särskild kolumn. awk är ett komplett programmeringsspråk, men du kan använda ett enkelt kommando för att skriva ut kolumner:

cat-systemet.logga in | awk ‘{print $1, $2}’

awk kör ditt kommando för varje rad i filen. Som standard delas filen upp av blanktecken och butiker varje kolumn i variablerna $1, $2, $3, och så vidare. Genom att använda print $1-kommandot, som du kan skriva ut den första kolumnen, men det finns inget enkelt sätt att skriva ut ett urval av kolumner utan att använda loopar.

En fördel med awk är att kommandot kan referera hela raden på en gång. Innehållet i linje lagras i variabeln $0, som du kan använda för att skriva ut hela linjen. Så, du kan till exempel skriva ut den tredje kolumnen innan du skriver ut resten av raden:

awk ‘{print $3 “” $0}’

De ” skriver ut ett utrymme mellan $3 och $0. Detta kommando upprepas kolumn tre gånger, men du kan lösa det genom att sätta $3 variabel till null:

awk ‘{printf $3; $3=””; skriv ut ” – ” $0}’

Printf-kommandot inte skriva ut en ny linje. På samma sätt kan du utesluta specifika kolumner från produktionen genom att ställa dem alla till tomma strängar innan du skriver ut $0:

awk ‘{$1=$2=$3=””; print $0}’

Du kan göra mycket mer med awk, inklusive regex matchar, men det out-of-the-box kolumn utvinning fungerar bra för detta användningsområde.

Sortera Kolumner med att sortera och uniq

Den sortens kommando kan användas för att beställa en förteckning av uppgifter som grundar sig på en särskild kolumn. Syntaxen är:

sortera -k 1

där -k flagga visar kolumnen antal. Du rör in i detta kommando, och den spottar ut i en ordnad lista. Som standard, sortera använder alfabetisk ordning, men stöder fler alternativ genom flaggor, såsom -n för numerisk form, -h för suffix sortera (1M > 1K), -M för sortering månad förkortningar, och -V för sortering av fil versionsnummer (fil-1.2.3 > fil – -1.2.1).

Det kommando uniq som filtrerar bort dubbla rader, vilket innebär att endast unika sådana. Det fungerar bara för angränsande linjer (för prestanda skäl), så måste du alltid använda den efter att sortera bort dubbletter i hela filen. Syntaxen är helt enkelt:

sortera -k 1 | uniq

Om du vill att listan endast dubbletter, använd-d flagg.

uniq kan också räkna antalet dubbletter med-c-flaggan, vilket gör det mycket bra för spårning frekvens. Till exempel, om du ville ha för att få en lista över de IP-adresser att träffa din Apache-server, kan du köra följande kommando på din internetuppkoppling.logga in:

cut-d ” -f 1 | sort | uniq -c | sort-nr | head

Denna sträng kommandon kommer att skära ut den IP-adress kolumn, grupp dubbletter tillsammans, ta bort dubbletter medan du räknar varje förekomst, och sedan sortera baserat på det räkna kolumn i fallande nummerordning, lämnar du med en lista som ser ut så här:

21 192.168.1.1
12 10.0.0.1
5 1.1.1.1
2 8.0.0.8

Du kan använda dessa tekniker för att dina log-filer, i tillägg till andra verktyg som awk och sed, att dra användbar information där. Dessa kedjade kommandon är lång, men du behöver inte skriva in dem varje gång, så kan du alltid förvara dem på ett bash-skript eller alias dem via din ~/.bashrc.

Filtrering av Data med grep och awk

grep är ett mycket enkelt kommando, du ger det en sökterm och passera det in, och det kommer att spotta ut varje linje innehåller detta sökbegrepp. Till exempel, om du ville söka din Apache tillgång logga in för 404-fel, kan du göra:

katt åt.logga in | grep “404”

vilket skulle spotta ut en lista av loggposter matchande given text.

Men grep inte kan begränsa sin sökning till en viss kolumn, så detta kommando kommer att misslyckas om du har texten “404” någon annanstans i filen. Om du endast vill söka HTTP-statuskoden kolumn, kommer du att behöva använda awk:

katt åt.logga in | awk ‘{om ($9 == “404”) print $0;}’

Med awk, du har också fördelen av att kunna göra negativa sökningar. Du kan till exempel söka efter alla loggposter som inte återkomma med status kod 200 (OK):

katt åt.logga in | awk ‘{om ($9 != “200”) print $0;}’

samt ha tillgång till alla programmatiska har awk erbjuder.

GUI Alternativ för webbloggar

GoAccess är ett CLI verktyg för att övervaka din webbserver access-loggen i realtid, och möjliga av varje användbart område. Det strider helt och hållet i din terminal, så att du kan använda den över SSH, men det har också en mycket mer intuitivt webbgränssnitt.

apachetop är ett annat verktyg specifikt för apache, som kan användas för att filtrera och sortera kolumner i din access-loggen. Det körs i realtid direkt på din internetuppkoppling.logga in.