lnav - Oglejte si in analizirajte dnevnike Apache s terminala Linux


Pred manj kot dvema tednoma je napad izsiljevalske programske opreme Wannacry ogrozil tisoče računalnikov, kar je povzročilo precejšnje izgube velikim podjetjem in posameznikom. To skupaj z drugimi razširjenimi ranljivostmi, ugotovljenimi v zadnjih letih (kot je hrošč Shellshock), poudarja pomen, da ostanete na vrhu svojih kritično pomembnih sistemov.

Čeprav ranljivosti pogosto ciljajo na en poseben operacijski sistem ali komponento programske opreme, je lahko pregled prometa, ki vstopa in izstopa iz vašega omrežja, v veliko pomoč pri zaščiti sredstev, za katera ste odgovorni.

Kot sem prepričan, da že veste, so sistemski dnevniki prvo mesto, kjer bi morali iskati te informacije. Za lažjo nalogo bomo v tem članku razložili, kako namestiti in uporabiti lnav, napredni pregledovalnik datotek dnevnika. Z lnav boste lahko hkrati spremljali več vrst dnevnikov, krmarili po datoteki z bližnjičnimi tipkami in ustvarili povzeti histogram dostopov in napak. Torej nadaljujte z branjem!

Namestitev in zagon lnav v Linuxu

Če želite namestiti lnav, uporabite sistem za upravljanje paketov svoje distribucije.

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

Ko je namestitev končana, zaženite lnav, čemur sledi absolutna pot do imenika, v katerem so dnevniki, ki jih je treba pregledati. Ker bo to običajno /var/log , naredimo naslednje:

# lnav /var/log/httpd

za pregled dnevnikov spletnega strežnika Apache v CentOS 7:

Na kratko preglejmo izhod, prikazan na prejšnji sliki:

  • V zgornjem desnem kotu so datoteke, ki jih trenutno pregledujete (access_log-20170519 in access_log). Ko se pomikate navzdol ali navzgor, boste opazili, da se lahko imena datotek med prehodom med drugimi spreminjajo.
  • 40-kratni odzivi HTTP (na primer Ne najdeno ali Prepovedano) so prikazani krepko, 20-krat pa v običajnem besedilu.
  • Naslovi IP so prikazani krepko zeleno.

To zagotovo izgleda lepo, kajne? A poglejmo zdaj malo globlje in videli bomo, da lnav ponuja veliko več kot le obarvan izhod.

Če vas zanima, zakaj dnevniki napak niso prikazani, boste odgovor našli kasneje v tem članku. Torej nadaljujte z branjem!

Spreminjanje izhoda z možnostmi in bližnjičnimi tipkami

Preden nadaljujemo, naštejmo nekaj bližnjic, ki nam bodo omogočile lažje premikanje po izhodu lnav in razpoložljivih pogledih:

  • e ali E za skok na naslednje/prejšnje sporočilo o napaki.
  • w ali W za preskok na naslednje/prejšnje opozorilno sporočilo.
  • b ali Backspace za premik na prejšnjo stran.
  • Presledek za premik na naslednjo stran.
  • g ali G , da se premaknete na vrh/dno trenutnega pogleda.

Ko zasukate dnevnike, se lahko stare datoteke stisnejo (ali ne), odvisno od nastavitev, določenih v konfiguracijskih datotekah logrotate. Če želite v izhod vključiti stisnjene datoteke, zaženite lnav na naslednji način:

# lnav -r /var/log/httpd

Če si želite podrobneje ogledati način delovanja lnav, lahko program zaženete z možnostjo -d , ki ji sledi ime datoteke, kamor bodo zapisane informacije o odpravljanju napak, takole:

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

V tem primeru bodo informacije o odpravljanju napak, ki se ustvarijo ob zagonu lnav, zapisane v datoteko z imenom lnav.txt znotraj trenutnega delovnega imenika.

Prvih nekaj vrstic te datoteke je prikazanih na naslednji sliki:

Označeno besedilo označuje, da je lnav naložil datoteko s privzetimi formati in natančneje obliko access_log za razčlenitev dnevnika dostopa Apache. Poleg tega lnav omogoča razčlenitev vsake izhodne vrstice, tako da je izhod lažje vizualizirati in razumeti.

Če želite uporabiti to funkcijo, zaženite program in izberite vrstico, ki jo želite razčleniti. Izbrana vrstica je vedno tista na vrhu okna. Nato pritisnite p in videli bi naslednji rezultat:

Če se želite vrniti v običajni način, znova pritisnite p .

Če želite zdaj videti povzetek dnevnikov po datumu in času, pritisnite i . Na primer, označeno besedilo kaže, da je bilo v ponedeljek, 10. aprila, med 22. in 23. uro, 37 zahtev HTTP s 14, kar je povzročilo napake.

Ko na podlagi histograma, kot je prikazano zgoraj, ugotovite potencialno težavo, lahko pritisnete i , da zaprete pogled in ga podrobneje preučite z razčlenjevalnikom, kot je razloženo prej. Lahko pa uporabite tudi vgrajene zmogljivosti SQL tako, da vnesete podpičje in napišete standardno poizvedbo. Na primer, naredite:

;.schema

za ogled razpoložljivih tabel v shemi baze podatkov. Po identifikaciji prave tabele (v našem primeru access_log) pritisnite q in nato z naslednjo poizvedbo vrnite vse razpoložljive informacije o zahtevah, ki prihajajo iz 195.154.230.31:

;SELECT * FROM access_log WHERE c_ip='195.154.230.31'

Upoštevajte, da bi lahko rezultate filtrirali tudi po log_time. Bistvo je, da vstavite malo SQL in nebo je omejeno, kaj lahko storite z lnav.

Privzete oblike zapisa dnevnika Apache

Številni formati dnevnikov se privzeto naložijo z lnav in se tako razčlenijo brez našega posredovanja. Seznam si lahko ogledate v razdelku Formati dnevnika v uradni dokumentaciji.

Privzete oblike so podane v ~/.lnav/formats/default/default-formats.json.sample, druge pa lahko dodate ~/.lnav/formate z razširitvijo .json .

Vendar urejanje teh datotek zahteva določeno stopnjo poznavanja JSON (Javascript Object Notation) in knjižnice PCRE (Perl-Compatible Regular Expressions).

Zakaj torej lnav ni prikazal datotek dnevnika napak Apache? Razlog je v tem, da se ti dnevniki ne ujemajo z nobenim regularnim izrazom v obstoječih datotekah formata, zato se obravnavajo kot običajne besedilne datoteke (kar pomeni datoteke brez določene oblike dnevnika).

Kot smo že omenili, lahko ustvarite lastne formate, ko se vsaj nekoliko seznanite z JSON in PCRE. To vam lahko pride na primer, če ste definirali dnevnike Apache po meri.

Čeprav smo dnevnik dostopa Apache uporabili za predstavitev uporabe lnav, ne pozabite, da je s tem orodjem mogoče pregledati in razčleniti več drugih dnevnikov. Če orodje ne prepozna določenega dnevnika, lahko ustvarite dodatne formate in jih namestite po tukaj navedenih navedbah.

Imate vprašanja ali komentarje o tem članku? Kot vedno vas prosimo, da nas obvestite s pomočjo spodnjega obrazca. Veselimo se vaših odzivov!