Zoeken op website

lnav - Bekijk en analyseer Apache-logboeken vanaf een Linux-terminal


Nog geen twee weken geleden bracht de Wannacry-ransomwareaanval duizenden computers in gevaar, wat aanzienlijke verliezen veroorzaakte voor zowel grote bedrijven als particulieren. Dat, samen met andere wijdverbreide kwetsbaarheden die de afgelopen jaren zijn aangetroffen (zoals de Shellshock-bug), onderstreept het belang van het op de hoogte blijven van uw bedrijfskritische systemen.

Hoewel kwetsbaarheden vaak gericht zijn op één specifiek besturingssysteem of softwarecomponent, kan het onderzoeken van het verkeer dat uw netwerk in en uit gaat een aanzienlijke hulp zijn bij het beschermen van de activa waarvoor u verantwoordelijk bent.

Voorgesteld om te lezen: 4 goede open source logbewakings- en beheertools voor Linux

Zoals je vast al weet, zijn systeemlogboeken de eerste plaats waar we naar deze informatie moeten zoeken. Om deze taak eenvoudiger te maken, leggen we in dit artikel uit hoe u lnav, een geavanceerde logbestandviewer, installeert en gebruikt. Met lnav kunt u verschillende soorten logboeken tegelijkertijd bekijken, door het bestand navigeren met behulp van sneltoetsen en een samengevat histogram van toegangen en fouten genereren. Blijf dus lezen!

Lnav installeren en starten onder Linux

Om lnav te installeren, gebruikt u het pakketbeheersysteem van uw distributie.

aptitude install lnav          [Debian and derivatives]
yum install epel-release lnav  [CentOS 7 and similar]

Zodra de installatie voltooid is, start u lnav gevolgd door het absolute pad naar de map waar de te onderzoeken logboeken zich bevinden. Omdat dit doorgaans /var/log is, gaan we het volgende doen:

lnav /var/log/httpd

om de logs van de Apache-webserver in een CentOS 7 te inspecteren:

Laten we kort de uitvoer bekijken die in de vorige afbeelding wordt weergegeven:

  • In de rechterbovenhoek worden de bestanden weergegeven die momenteel worden geïnspecteerd (access_log-20170519 en access_log). Terwijl u naar beneden of naar boven scrolt, zult u merken dat de bestandsnamen kunnen veranderen naarmate u van de ene naar de andere gaat.
  • 40x HTTP-reacties (bijvoorbeeld Niet gevonden of Verboden) worden vetgedrukt weergegeven, terwijl 20x reacties worden weergegeven in gewone tekst.
  • IP-adressen worden vetgedrukt groen weergegeven.

Dat ziet er zeker leuk uit, nietwaar? Maar laten we nu wat dieper graven en we zullen zien dat lnav veel meer biedt dan alleen een mooi gekleurde uitvoer.

Als u benieuwd bent waarom foutlogboeken niet worden weergegeven, vindt u het antwoord verderop in dit artikel. Blijf dus lezen!

De uitvoer wijzigen met opties en sneltoetsen

Voordat we verder gaan, laten we een paar sneltoetsen opsommen waarmee we gemakkelijker door de uitvoer van lnav en de beschikbare weergaven kunnen bladeren:

  • e of E om naar de volgende/vorige foutmelding te gaan.
  • w of W om naar het volgende/vorige waarschuwingsbericht te gaan.
  • b of Backspace om naar de vorige pagina te gaan.
  • Ruimte om naar de volgende pagina te gaan.
  • g of G om naar de boven-/onderkant van de huidige weergave te gaan.

Wanneer logs worden geroteerd, kunnen oude bestanden worden gecomprimeerd (of niet), afhankelijk van de instellingen die zijn opgegeven in de logrotate-configuratiebestanden. Om gecomprimeerde bestanden in de uitvoer op te nemen, start u lnav als volgt:

lnav -r /var/log/httpd

Als je de manier waarop lnav werkt nader wilt bekijken, kun je het programma starten met de optie -d gevolgd door een bestandsnaam waar de debug-informatie naartoe zal worden geschreven, zoals:

lnav /var/log/httpd -d lnav.txt

In dit voorbeeld wordt de foutopsporingsinformatie die wordt gegenereerd wanneer lnav start, geschreven naar een bestand met de naam lnav.txt in de huidige werkmap.

De eerste paar regels van dat bestand worden weergegeven in de volgende afbeelding:

De gemarkeerde tekst geeft aan dat lnav het standaardformatenbestand heeft geladen en, meer specifiek, het access_log formaat om het Apache-toegangslogboek te parseren. Bovendien maakt lnav het mogelijk om elke uitvoerregel te parseren, zodat de uitvoer gemakkelijker te visualiseren en te begrijpen is.

Voorgesteld lezen: GoAccess (een realtime Apache en Nginx) webserverloganalysator

Om deze functie te gebruiken, start u het programma en kiest u de regel die u wilt parseren. De geselecteerde regel is altijd de regel bovenaan het venster. Druk vervolgens op p en je zou het volgende resultaat moeten zien:

Om terug te keren naar de normale modus, drukt u nogmaals op p.

Als u nu een samenvatting van de logs op datum en tijd wilt zien, drukt u op i. De gemarkeerde tekst geeft bijvoorbeeld aan dat er op maandag 10 april, tussen 22.00 en 23.00 uur, 37 HTTP-verzoeken waren, waarvan 14 resulteerden in fouten.

Zodra u een potentieel probleem heeft geïdentificeerd op basis van het histogram zoals hierboven weergegeven, kunt u op i drukken om de weergave te verlaten en het in meer detail te onderzoeken met behulp van de parser, zoals eerder uitgelegd. Of u kunt ook de ingebouwde SQL-mogelijkheden gebruiken door een puntkomma te typen en een standaardquery te schrijven. Doe bijvoorbeeld:

;.schema

om de beschikbare tabellen in het databaseschema te bekijken. Nadat we de juiste tabel hebben geïdentificeerd (access_log in ons geval), drukken we op q en gebruiken we vervolgens de volgende query om alle beschikbare informatie terug te geven over verzoeken afkomstig van 195.154.230.31:

;SELECT * FROM access_log WHERE c_ip='195.154.230.31'

Houd er rekening mee dat we de resultaten ook hadden kunnen filteren op log_time. Het punt is: gooi er een beetje SQL in en de sky is the limit wat betreft wat je met lnav kunt doen.

Standaard logformaten van Apache

Veel logformaten worden standaard geladen met lnav en worden dus zonder onze tussenkomst geparseerd. U kunt de lijst bekijken in het gedeelte Logformaten in de officiële documentatie.

Standaardformaten worden gespecificeerd in ~/.lnav/formats/default/default-formats.json.sample, en andere kunnen worden toegevoegd ~/.lnav/formats met behulp van de .json extensie.

Het bewerken van deze bestanden vereist echter een zekere bekendheid met JSON (Javascript Object Notation) en met de PCRE-bibliotheek (Perl-Compatible Regular Expressions).

Dus waarom heeft lnav de Apache-foutlogbestanden niet weergegeven? De reden is dat deze logbestanden niet overeenkomen met reguliere expressies in de bestaande bestandsindelingen, en dus worden behandeld als gewone tekstbestanden (dat wil zeggen bestanden zonder een bepaald logbestandsformaat).

Voorgesteld lezen: Hoe u de belasting en paginastatistieken van Apache-webservers kunt controleren

Zoals eerder vermeld, kunt u uw eigen formaten maken zodra u op zijn minst enigszins bekend bent met JSON en PCRE. Dit kan bijvoorbeeld van pas komen als u aangepaste Apache-logboeken hebt gedefinieerd.

Samenvatting

Hoewel we het Apache-toegangslogboek hebben gebruikt om te demonstreren hoe lnav te gebruiken, moet je er rekening mee houden dat er verschillende andere soorten logs zijn die met dit hulpmiddel kunnen worden bekeken en geparseerd. Als de tool een specifiek logbestand niet herkent, kunt u aanvullende formaten maken en deze installeren volgens de hier gegeven aanwijzingen.

Heeft u vragen of opmerkingen over dit artikel? Zoals altijd kunt u ons dit laten weten via onderstaand formulier. Wij horen graag van u!