Logowanie i przeglądanie dzienników systemowych: polecenia journalctl
1. Dlaczego warto pracować z logami?
Dzienniki (lub logi) to twój osobisty "detektyw", który zapisuje każdą ważną operację w systemie. Rejestrują działania jądra, aplikacji, serwisów i innych komponentów systemu. Logi są kluczowym narzędziem w diagnostyce problemów i monitorowaniu pracy systemu.
Wyobraź sobie, że twój serwer nagle przestał odpowiadać. Zamiast zgadywać, jak Sherlock Holmes, co poszło nie tak, możesz po prostu zajrzeć do dzienników — tam wszystko jest jak na dłoni. Na przykład: "Usługa ssh
padła", "Dysk się przepełnił", "Kot przebiegł po klawiaturze i zatrzymał ważną usługę". Logi wszystko opowiedzą.
Praca z dziennikami systemowymi pomaga:
- Diagnozować problemy. Jeśli coś idzie nie tak, w logach można znaleźć błąd lub ostrzeżenie.
- Śledzić pracę serwisów. Na przykład dowiedzieć się, dlaczego baza danych PostgreSQL została zatrzymana lub kiedy ostatni raz zaktualizował się serwer www.
- Zbierać analitykę. Monitorowanie wydajności i metryk serwisów.
- Zwiększać bezpieczeństwo. Logi mogą pokazać próby włamania przez SSH lub nieautoryzowany dostęp.
2. Wprowadzenie do journalctl
journalctl
— to potężna komenda do przeglądania i filtrowania dzienników systemowych w Linuxie. Działa z systemd-journald
— systemem zbierania i przechowywania logów zarządzanym przez systemd
.
Podstawowe operacje z journalctl
Na początek zobaczmy, jak używać tego narzędzia. Otwórz terminal i wpisz:
journalctl
Ta komenda pokaże Ci wszystkie dzienniki systemowe posortowane w porządku chronologicznym. Jeśli spodziewasz się czegoś małego, przygotuj się: zwykle logi zajmują kilka ekranów. Nie przejmuj się, nauczymy się je filtrować trochę później.
Teraz, aby wyjść z przeglądania logów, wciśnij q
(wcześniej już zauważyłeś podobieństwo między less
a journalctl
?).
Filtrowanie logów według czasu
Teraz magicznie ograniczymy dzienniki do wygodniejszego zakresu.
Przeglądanie logów z ostatniej godziny
journalctl --since "1 hour ago"
Przeglądanie logów z konkretnego dnia
journalctl --since "2023-10-31"
Określenie zakresu czasowego
Chcesz zobaczyć zdarzenia od 8 rano do 9 rano? Żaden problem:
journalctl --since "2023-10-31 08:00:00" --until "2023-10-31 09:00:00"
Filtrowanie według czasu jest przydatne, na przykład, gdy wiesz, że problem zaczął się w określonym momencie. Analogia: nie czytasz całej książki, aby dowiedzieć się, kto jest mordercą — po prostu sprawdzasz ostatnie strony.
Praca z logami konkretnego serwisu
Zamiast analizować cały system, możesz skupić się na jednym serwisie. Na przykład, chcesz zobaczyć, jak działa serwer WWW nginx
:
journalctl -u nginx
Jeśli chcesz widzieć wpisy tylko z ostatniej godziny (a wszyscy lubimy świeże informacje):
journalctl -u nginx --since "1 hour ago"
Szybka lista przykładów:
-u ssh
: Logi dla serwisu SSH.-u cron
: Logi zadań CRON.-u mysql
: Logi bazy danych MySQL.
Czytanie logów w czasie rzeczywistym
Kiedy naprawiasz coś na bieżąco, może być przydatne obserwowanie logów w czasie rzeczywistym — jak oglądanie meczu piłki nożnej. W tym celu użyj komendy:
journalctl -f
Opcja -f
działa podobnie do tail -f
, pokazując nowe wpisy w logach w miarę ich pojawiania się.
Na przykład, spróbuj uruchomić tę komendę i równolegle zrestartować jakiś serwis:
sudo systemctl restart ssh
Zobaczysz zmiany — wpis o restarcie pojawi się w logach.
Wyszukiwanie błędów w logach
Często logi są długie, a szukanie w nich interesujących informacji ręcznie to jak szukanie igły w stogu siana. Dlatego możesz użyć wyszukiwania po słowach kluczowych.
Proste użycie:
journalctl | grep "ERROR"
Ten przykład pokaże tylko te linie, które zawierają słowo ERROR
. Możesz zastąpić ERROR
czymkolwiek, np. WARNING
, failed
lub panic
.
3. Specjalne opcje dla journalctl
Przeglądanie wpisów tylko po restarcie
Chcesz dowiedzieć się, co działo się po ostatnim uruchomieniu systemu? Tajemnicze, co? Po prostu wykonaj:
journalctl -b
Każdy restart systemu jest rejestrowany jako oddzielny "blok". Jeśli chcesz zobaczyć wpisy po przedostatnim uruchomieniu systemu (tak, to może być przydatne):
journalctl -b -1
Filtrowanie według użytkownika lub PID
Czasem trzeba śledzić działania konkretnego użytkownika lub procesu. Na przykład:
journalctl _UID=1000
Zamień 1000
na ID użytkownika (ID można sprawdzić za pomocą komendy id
).
Dla filtrowania według PID (identyfikatora procesu):
journalctl _PID=1234
4. Przykłady praktyczne
Szukanie błędów usługi SSH.
Chcesz dowiedzieć się, dlaczego SSH odmawia połączenia. Użyj:
journalctl -u ssh | grep "ERROR"
Analiza logów z ostatnich 24 godzin dla CRON.
Załóżmy, że sprawdzasz, dlaczego twój codzienny skrypt się nie wykonał:
journalctl -u cron --since "yesterday"
Monitorowanie serwera WWW w czasie rzeczywistym.
Serwer WWW pod obciążeniem? Sprawdź logi w poszukiwaniu błędów:
journalctl -u nginx -f
Ćwiczenie do samodzielnej praktyki
- Znajdź logi błędów dla usługi SSH z ostatnich 24 godzin.
- Używając
journalctl
, wyświetl logi dla CRON tylko z poranka. Upewnij się, że komenda działa w prawidłowym przedziale czasowym. - Zorganizuj monitorowanie logów
systemd
w czasie rzeczywistym i uruchom kilka usług systemowych, aby zobaczyć ich status w logach.
Logowanie to nie tylko sprawdzanie błędów czy diagnoza problemów. To twój tajny agent, który pomaga śledzić całą operacyjną działalność systemu. Jak tylko opanujesz komendę journalctl
, będziesz miał potężne narzędzie do analizy, optymalizacji i zapewnienia stabilnej pracy systemów Linux w każdych warunkach.
GO TO FULL VERSION