Wyszukiwanie w witrynie

lnav — Oglądaj i analizuj logi Apache z terminala Linux


Niecałe dwa tygodnie temu atak ransomware Wannacry zainfekował tysiące komputerów, powodując znaczne straty zarówno dla dużych firm, jak i osób prywatnych. To, wraz z innymi szeroko rozpowszechnionymi lukami w zabezpieczeniach wykrytymi w ostatnich latach (takimi jak błąd Shellshock), podkreśla znaczenie utrzymywania kontroli nad systemami o znaczeniu krytycznym.

Chociaż luki często atakują jeden konkretny system operacyjny lub komponent oprogramowania, badanie ruchu przychodzącego i wychodzącego z sieci może znacząco pomóc w ochronie zasobów, za które odpowiadasz.

Sugerowana lektura: 4 dobre narzędzia do monitorowania dzienników open source i zarządzania nimi w systemie Linux

Jak zapewne już wiesz, dzienniki systemowe są pierwszym miejscem, w którym powinniśmy szukać tych informacji. Aby ułatwić to zadanie, w tym artykule wyjaśnimy, jak zainstalować i używać lnav, zaawansowanej przeglądarki plików dziennika. Dzięki lnav będziesz mógł oglądać kilka typów logów jednocześnie, poruszać się po pliku za pomocą skrótów klawiszowych i generować podsumowany histogram dostępów i błędów. Więc czytaj dalej!

Instalowanie i uruchamianie lnav w systemie Linux

Aby zainstalować lnav, użyj systemu zarządzania pakietami swojej dystrybucji.

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

Po zakończeniu instalacji uruchom lnav, a następnie podaj bezwzględną ścieżkę do katalogu, w którym znajdują się dzienniki do sprawdzenia. Ponieważ będzie to zazwyczaj /var/log, wykonajmy:

lnav /var/log/httpd

aby sprawdzić logi serwera WWW Apache w CentOS 7:

Przyjrzyjmy się pokrótce wynikom pokazanym na poprzednim obrazku:

  • W prawym górnym rogu widoczne są aktualnie sprawdzane pliki (access_log-20170519 i access_log). Podczas przewijania w dół lub w górę zauważysz, że nazwy plików mogą się zmieniać w miarę przechodzenia z jednego do drugiego.
  • Odpowiedzi 40x HTTP (na przykład Nie znaleziono lub Zabronione) są wyświetlane pogrubioną czcionką, natomiast odpowiedzi 20x są wyświetlane w zwykłym tekście.
  • Adresy IP są wyświetlane pogrubioną zielenią.

To z pewnością wygląda ładnie, prawda? Ale spójrzmy teraz trochę głębiej, a przekonamy się, że lnav zapewnia znacznie więcej niż tylko ładne kolorowe wydruki.

Jeśli ciekawi Cię, dlaczego dzienniki błędów nie są wyświetlane, odpowiedź znajdziesz w dalszej części tego artykułu. Więc czytaj dalej!

Modyfikowanie danych wyjściowych za pomocą opcji i klawiszy skrótu

Zanim przejdziemy dalej, wymieńmy kilka skrótów klawiszowych, które pozwolą nam łatwiej poruszać się po wynikach lnav i dostępnych widokach:

  • e lub E, aby przejść do następnego/poprzedniego komunikatu o błędzie.
  • w lub W, aby przejść do następnego/poprzedniego komunikatu ostrzegawczego.
  • b lub Backspace, aby przejść do poprzedniej strony.
  • Spacja, aby przejść do następnej strony.
  • g lub G, aby przejść na górę/dół bieżącego widoku.

Podczas rotacji dzienników stare pliki mogą zostać skompresowane (lub nie) w zależności od ustawień określonych w plikach konfiguracyjnych logrotate. Aby uwzględnić skompresowane pliki na wyjściu, uruchom lnav w następujący sposób:

lnav -r /var/log/httpd

Jeśli chcesz przyjrzeć się bliżej sposobowi działania lnav, możesz uruchomić program z opcją -d, po której następuje nazwa pliku, do którego będą zapisywane informacje debugowania, na przykład:

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

W tym przykładzie informacje debugowania generowane podczas uruchamiania lnav zostaną zapisane w pliku o nazwie lnav.txt w bieżącym katalogu roboczym.

Kilka pierwszych wierszy tego pliku pokazano na poniższym obrazku:

Podświetlony tekst wskazuje, że lnav załadował plik formatów domyślnych, a dokładniej format access_log w celu analizy dziennika dostępu Apache. Dodatkowo lnav pozwala analizować każdą linię wyjściową, dzięki czemu wynik staje się łatwiejszy do wizualizacji i zrozumienia.

Sugerowana lektura: GoAccess (Apache i Nginx w czasie rzeczywistym) analizator logów serwera WWW

Aby skorzystać z tej funkcji, uruchom program i wybierz linię, którą chcesz przeanalizować. Wybrana linia to zawsze ta, która znajduje się na górze okna. Następnie naciśnij p i powinieneś zobaczyć następujący wynik:

Aby powrócić do trybu normalnego, naciśnij ponownie p.

Teraz, jeśli chcesz zobaczyć podsumowanie logów według daty i godziny, naciśnij i. Na przykład podświetlony tekst wskazuje, że w poniedziałek 10 kwietnia między godziną 22:00 a 23:00 odbyło się 37 żądań HTTP, z czego 14 zakończyło się błędami.

Po zidentyfikowaniu potencjalnego problemu na podstawie histogramu, jak pokazano powyżej, możesz nacisnąć i, aby wyjść z widoku i zbadać go bardziej szczegółowo za pomocą analizatora składni, jak wyjaśniono wcześniej. Możesz także skorzystać z wbudowanych funkcji SQL, wpisując średnik i pisząc standardowe zapytanie. Na przykład wykonaj:

;.schema

aby wyświetlić dostępne tabele w schemacie bazy danych. Po zidentyfikowaniu właściwej tabeli (w naszym przypadku access_log) wciśnijmy q, a następnie za pomocą poniższego zapytania zwrócimy wszystkie dostępne informacje o żądaniach pochodzących z adresu 195.154.230.31:

;SELECT * FROM access_log WHERE c_ip='195.154.230.31'

Pamiętaj, że mogliśmy również filtrować wyniki według log_time. Rzecz w tym, że dodaj trochę SQL, a zobaczysz, co możesz zrobić za pomocą lnav.

Domyślne formaty dzienników Apache

Wiele formatów dzienników jest domyślnie ładowanych za pomocą lnav i dlatego są one analizowane bez naszej interwencji. Listę można wyświetlić w sekcji Formaty dziennika w oficjalnej dokumentacji.

Domyślne formaty są określone w ~/.lnav/formats/default/default-formats.json.sample, a inne można dodać ~/.lnav/formats za pomocą < rozszerzenie.json.

Jednak edycja tych plików wymaga pewnego stopnia znajomości JSON (Javascript Object Notation) i biblioteki PCRE (Perl-Compatible Regular Expressions).

Dlaczego więc lnav nie wyświetlił plików dziennika błędów Apache? Powodem jest to, że logi te nie odpowiadają żadnym wyrażeniom regularnym w istniejących plikach formatu i dlatego są traktowane jak zwykłe pliki tekstowe (czyli pliki bez danego formatu logu).

Sugerowana lektura: Jak monitorować obciążenie serwera WWW Apache i statystyki strony

Jak wspomniano wcześniej, możesz tworzyć własne formaty, gdy przynajmniej trochę zaznajomisz się z JSON i PCRE. Może się to przydać, na przykład, jeśli zdefiniowano niestandardowe dzienniki Apache.

Streszczenie

Chociaż użyliśmy dziennika dostępu Apache, aby zademonstrować sposób korzystania z lnav, należy pamiętać, że istnieje kilka innych typów dzienników, które można przeglądać i analizować za pomocą tego narzędzia. Jeśli narzędzie nie rozpoznaje konkretnego dziennika, możesz utworzyć dodatkowe formaty i zainstalować je zgodnie ze wskazówkami podanymi tutaj.

Czy masz jakieś pytania lub uwagi dotyczące tego artykułu? Jak zawsze, daj nam znać za pomocą poniższego formularza. Oczekujemy na kontakt zwrotny!