Monitoring i utrzymanie Średnio zaawansowany 60 min

Logi usług i aplikacji

Wyfiltrujesz zdarzenia z journalu i logów aplikacji, zachowując czas, kontekst i prywatność.

Wróć do listy lekcji

1. Krótka teoria

Log usługi powinien odpowiadać na pytania: kiedy, w którym komponencie, na jakim poziomie i co się stało. journalctl -u orders-api filtruje jednostkę systemd, -n ogranicza liczbę wpisów, --since wybiera okno czasu, a -p filtruje priorytet. Poziom warning nie oznacza automatycznie awarii, a brak error nie dowodzi poprawności działania. Znacznik czasu ma znaczenie przy łączeniu logów aplikacji, Nginxa i kontenera bazy. Aplikacja może pisać na stdout, który przejmuje systemd lub runtime kontenera. Ustrukturyzowany log to zestaw pól, na przykład time, level, service i request_id; ułatwia filtrowanie, ale nie wymaga wdrożenia nowej platformy logowej. Identyfikator żądania pomaga skleić zdarzenia z kilku komponentów. tail i grep przydają się dla zwykłych plików. Logi mogą zawierać dane wrażliwe; nie zapisuj haseł i pełnych tokenów. Retencja i rotacja ograniczają rozmiar magazynu, a usuwanie logów podczas incydentu bez kopii utrudnia dochodzenie.

2. Przykłady komend

journalctl -u orders-api -n 50 --no-pager

Czyta ostatnie wpisy jednostki.

$ journalctl -u orders-api -n 50 --no-pager
journalctl -u orders-api --since '2026-09-18 14:00:00' --until '2026-09-18 14:15:00' --no-pager

Zawęża logi do czasu incydentu.

$ journalctl -u orders-api --since '2026-09-18 14:00:00' --until '2026-09-18 14:15:00' --no-pager
journalctl -u orders-api -p warning --since '1 hour ago' --no-pager

Pokazuje wpisy od poziomu warning wzwyż w ostatniej godzinie.

$ journalctl -u orders-api -p warning --since '1 hour ago' --no-pager
journalctl -u orders-api -o json --since '10 minutes ago' --no-pager

Wyświetla wpisy journalu jako rekordy JSON.

$ journalctl -u orders-api -o json --since '10 minutes ago' --no-pager
tail -n 50 /var/log/nginx/error.log

Czyta końcówkę logu błędów proxy.

$ tail -n 50 /var/log/nginx/error.log
grep 'request_id=ord-42' /var/log/orders-api/app.log

Wyszukuje zdarzenia jednego żądania, jeśli aplikacja zapisuje to pole.

$ grep 'request_id=ord-42' /var/log/orders-api/app.log
journalctl --disk-usage

Sprawdza miejsce zajmowane przez journal przed zmianą retencji.

$ journalctl --disk-usage

3. Zadanie praktyczne

Dla incydentu orders-api w przedziale 14:00–14:15 zbierz wpisy jednostki oraz końcówkę logu Nginxa. Oddziel ostrzeżenia od błędów, sprawdź strefę czasu i wyszukaj ćwiczeniowy request_id=ord-42, jeśli jest zapisywany. Zaprojektuj jedną krótką linię logu z polami time, level, service, request_id i message bez sekretów. Sprawdź rozmiar journalu i zaproponuj rozsądną retencję bez kasowania dowodów.

4. Typowe błędy

  • Czytanie wszystkich logów bez ograniczenia czasu i usługi.
  • Zakładanie, że każdy warning oznacza awarię użytkownika.
  • Mieszanie czasów z różnych stref podczas budowania osi incydentu.
  • Logowanie haseł, tokenów i pełnych danych klientów.
  • Usuwanie logów przed zapisaniem materiału potrzebnego do diagnozy.

5. Podsumowanie

Filtruj logi po usłudze, czasie i priorytecie, a zdarzenia łącz przez request ID. Ustrukturyzowane pola ułatwiają diagnostykę. Retencję dobieraj świadomie, chroniąc zarówno przestrzeń dyskową, jak i dane wrażliwe.

Flow nauki
  1. Teoria
  2. Przykład
  3. Ćwiczenie
  4. Quiz
  5. Praktyka
  6. Podsumowanie