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
lubE
, aby przejść do następnego/poprzedniego komunikatu o błędzie.w
lubW
, aby przejść do następnego/poprzedniego komunikatu ostrzegawczego.b
lubBackspace
, aby przejść do poprzedniej strony.- Spacja, aby przejść do następnej strony.
g
lubG
, 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!