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
systemdw 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