Gdy napotkasz jakiekolwiek problemy z wydajnością serwera, pierwszą rzeczą, którą powinieneś zrobić, jest sprawdzenie logów systemu Linux . W logu systemowym znajdziesz przydatne komunikaty diagnostyczne z różnych komponentów systemu operacyjnego, takich jak jądro czy różne usługi, więc najprawdopodobniej znajdziesz tam przyczynę awarii.
Każda wiadomość w dzienniku jest generowana w wyniku pewnych zdarzeń w systemie operacyjnym: od użytkownika, autoryzacji do zamknięcia usługi lub awarii aplikacji. Zdarzenia te mają różne priorytety w zależności od tego, jak krytyczne są. W systemie Linux występują następujące typy zdarzeń:
emerg- awaria, najwyższy priorytet;alert- pilne ostrzeżenie;crit- zdarzenie krytyczne;err- błąd zwykły;warn- ostrzeżenie zwykłe;notice- powiadomienie;info- wiadomość informacyjna;debug- informacje dotyczące debugowania;
Obecnie głównymi usługami zbierającymi logi w Linuksie są rsyslog i systemd-journald . Są one kompatybilne z większością nowoczesnych pakietów dystrybucyjnych i działają niezależnie.
rsyslog
Logi tej usługi znajdują się w folderze „ /var/log/ ” w postaci zwykłych plików tekstowych. Komunikaty logu są umieszczane w różnych plikach w zależności od rodzaju zdarzenia. Na przykład „ /var/log/auth.log ” zawiera informacje o autoryzacji użytkowników w systemie, a „ /var/log/kern.log ” zawiera komunikaty jądra. Nazwy plików mogą się różnić w zależności od pakietu dystrybucyjnego, dlatego przyjrzyjmy się plikowi konfiguracyjnemu, aby zorientować się, co znajduje się w pliku „ /etc/rsyslog.d/50-default.conf ”.
Reguły te wyświetlają, który plik zawiera poszczególne typy komunikatów dziennika. Lewa część wyświetla typ komunikatu w następującym formacie: „ [Źródło].[Priorytet] ”, a prawa część wyświetla nazwę pliku dziennika. Podczas zapisywania typu komunikatu można dodać znak „ * ”. Oznacza on wartość pustą lub „ brak ”, co powoduje usunięcie go z listy. Przyjrzyjmy się bliżej dwóm pierwszym regułom.
“auth,authpriv.* /var/log/auth.log”
“*.*;auth,authpriv.none -/var/log/syslog”
Pierwsza reguła oznacza, że wszystkie komunikaty otrzymane z mechanizmu autoryzacji będą rejestrowane w pliku „ /var/log/auth.log ”. Wszystkie próby autoryzacji (zarówno udane, jak i nieudane) będą rejestrowane w tym pliku. Druga reguła oznacza, że wszystkie komunikaty z wyjątkiem tych związanych z autoryzacją będą rejestrowane w pliku „ /var/log/syslog ”. Te dwa pliki są zazwyczaj najpopularniejsze. Poniższe reguły definiują ścieżkę do przechowywania logów jądra „ kern.* ” i logów usług pocztowych „ mail.* ”.
Pliki dziennika można otwierać za pomocą dowolnego edytora tekstu, takiego jak less , cat , tail . Otwórzmy plik „ /var/log/auth.log ” .
less /var/log/auth.log
Każdy wiersz pliku jest osobną wiadomością otrzymaną z aplikacji lub usługi. Wszystkie wiadomości, niezależnie od ich źródła, mają jeden format i składają się z 5 części. Weźmy jako przykład wyróżnioną wiadomość na zrzucie ekranu.
- Znak czasowy wiadomości – „12 lut 06:18:33”
- Nazwa komputera, który wysłał wiadomość – „vds”
- Nazwa aplikacji lub usługi, która wysłała wiadomość – „sshd”
- Identyfikator procesu - [653]
- Tekst wiadomości - „Zaakceptowano hasło dla mihail z 188.19.42.165 port 2849 ssh2”
Oto przykład udanego połączenia z SSH.
A tak wygląda nieudana próba logowania:
Ten plik rejestruje również polecenia z zaawansowanymi uprawnieniami
Otwórzmy plik /var/log/syslog
Podświetlony komunikat na zrzucie ekranu to komunikat o wyłączeniu interfejsu sieciowego.
Do wyszukiwania informacji w długich plikach tekstowych użyj narzędzia grep . Wszystkie wiadomości otrzymane z usługi pptpd znajdziesz w pliku „ /var/log/syslog ”.
grep 'pptpd' /var/log/syslog
Podczas diagnostyki możesz użyć narzędzia tail , które wyświetla kilka ostatnich wierszy plików. Polecenie „ tail -f /var/log/syslog ” pozwoli Ci obserwować rejestrowanie logów w czasie rzeczywistym.
Usługa rsyslog jest bardzo elastyczna i wydajna. Można jej używać do zbierania logów zarówno w systemach lokalnych, jak i na poziomie przedsiębiorstwa. Pełną dokumentację można znaleźć na oficjalnej stronie internetowej https://www.rsyslog.com/
Rotacja logów w systemie Linux
Rejestracja logów odbywa się w sposób ciągły, dlatego rozmiar plików stale rośnie. Mechanizm rotacji zapewnia automatyczne archiwizowanie starych logów i tworzenie nowych plików. W zależności od reguł, rotacja może odbywać się codziennie, co tydzień, co miesiąc lub zgodnie z limitem rozmiaru. W miarę tworzenia nowych logów, stare można po prostu usunąć lub wysłać e-mailem. Rotacja logów odbywa się za pomocą narzędzia logrotate . Główną konfigurację można znaleźć w pliku „ /etc/logrotate.conf ”. Zawartość plików jest również przetwarzana w folderze „ /etc/logrotate.d/ ”.
Nowe reguły można rejestrować w głównym pliku konfiguracyjnym. Najlepiej jednak utworzyć osobny plik w katalogu „ /etc/logrotate.d/ ”. Domyślnie w tym katalogu znajduje się kilka plików.
Przyjrzyjmy się plikowi „ /etc/logrotate.d/rsyslog ” zawierającemu reguły rotacji logów usługi rsyslog.
Najpierw reguła powinna zawierać ścieżkę do pliku dziennika, a następnie wszystkie wytyczne w nawiasach klamrowych.
- obróć 7 - ilość przechowywanych plików - 7
- codziennie - twórz nowy plik każdego dnia
- kompresować - kompresuj i archiwizuj stare pliki
Na zrzucie ekranu widać, że w folderze „ /var/log/ ” znajduje się główny dziennik „ syslog ” oraz 7 archiwów, co odpowiada regułom w pliku konfiguracyjnym.
Bardziej szczegółowy opis polecenia logrotate znajdziesz w podręczniku, wykonując polecenie „ man logrotate ”
Zbieranie logów Linux - journald
Usługa zbierania logów systemd-journald jest częścią systemu inicjalizacyjnego systemd . Pliki logów systemu Linux są przechowywane w katalogu „ /var/log/journal/ ” w specjalnym formacie i można je otwierać za pomocą narzędzia journalctl . Format rekordów jest dokładnie taki sam jak w rsyslog.
Polecenie journalctl bez atrybutów wyświetla wszystkie rekordy, ale nie nadaje się do większych logów. Przyjrzyjmy się niektórym opcjom tego narzędzia.
journalctl -b- pokaż wszystkie rekordy od ostatniego startujournalctl -S "2020-02-17 12:00" -U "2020-02-17 12:10"- pokaż rekord w określonym przedziale czasowymjournalctl -u pptpd- pokaż zapisy konkretnej usługijournalctl -k- pokaż komunikaty jądrajournalctl -p err- pokaż wiadomości o określonym priorytecie, w tym przypadku wiadomości o wyższym priorytecie (krytyczne, alarmowe, ratunkowe)journalctl -f- wyświetlaj wiadomości w czasie rzeczywistym
Dla większej elastyczności możesz połączyć te opcje. Pokażmy wszystkie błędy usługi pptpd.
journalctl -u pptpd -p err
Jeśli podasz ścieżkę do pliku wykonywalnego jako atrybut, narzędzie wyświetli wszystkie wiadomości wysłane przez ten plik. Pokażmy wszystkie wiadomości wysłane przez plik „ /usr/bin/sudo ” od godziny 04:15 18 lutego 2020 r. W rzeczywistości pokaże to wszystkie polecenia wykonane z wyższymi uprawnieniami.
journalctl -S "2020-02-18 04:15" /usr/bin/sudo
Aby dowiedzieć się, ile miejsca na dysku zajmują pliki dziennika, wykonaj następujące polecenie
journalctl --disk-usage
Aby ograniczyć rozmiar pliku dziennika do 1 GB wykonaj następujące polecenie
journalctl --vacuum-size=1G
Otwieranie plików binarnych
Przyjrzyjmy się teraz kilku specjalnym plikom w folderze „ /var/log/ ”, w którym przechowywane są wszystkie próby logowania. Pliki te są binarne i można je otwierać tylko za pomocą specjalnych programów.
Plik /var/log/wtmp zawiera informacje o udanych próbach logowania. Użyj ostatniego narzędzia, aby go otworzyć.
/var/log/btmp – zawiera wszystkie nieudane próby logowania. Można go otworzyć poleceniem lastb z zaawansowanymi uprawnieniami. Atrybut -n określa liczbę wierszy wyświetlanych od końca pliku.
/var/log/lastlog – zawiera czas ostatniego logowania dla każdego rekordu konta. Można go otworzyć za pomocą lastlog.