Debugowanie serwera i rozwiązywanie problemów

Rodzaje logów serwera Tomcat

Wszystkie logi serwera Tomcat domyślnie znajdują się w podkatalogu „logs”. Znajdziemy tam pliki o strukturach nazw:

  • catalina.out

  • catalina.yyyy-mm-dd.txt

  • localhost.yyyy-mm-dd.txt

  • localhost_access.log.yyyy-mm-dd.txt

  • host-manager.yyyy-mm-dd.txt

  • manager.yyyy-mm-dd.txt

Plik o nazwie catalina.out

Główny log serwera Tomcat. To właśnie tutaj szukamy informacji o pojawiających się błędach serwera. Wyjątki rzucane przez same aplikacje nie znajdą się w tym pliku . Ponieważ ten plik nie jest w żaden sposób czyszczony, potrafi urosnąć do naprawdę dużych rozmiarów. W takiej sytuacji wystarczy go skasować, a następnie zrestartować serwer Tomcata. Plik zostanie utworzony na nowo, pusty.

Pliki o formacie catalina.yyyy-mm-dd.txt

Zasadniczo znajdziemy tak takie same informacje jak w pliku catalina.out. Różnica polega na tym, że w tych plikach logi są rozdzielone na poszczególne dni.

Pliki o formacie localhost.yyyy-mm-dd.txt

Tutaj znajdziemy informacje o błędach aplikacji. Wyjątki rzucane przez same aplikacje nie znajdą się w pliku catalina.out. Jeśli więc będzie jakiś kłopot z działaniem którejś aplikacji a w pliku catalina.out nie znajdziemy żadnych informacji, szukajmy ich w pliku zawierającym w nazwie datę dzisiejszą (lub tego dnia kiedy problemy się pojawiły).

Pliki o formacie localhost_access.log.yyyy-mm-dd.txt

Tutaj znajdziemy szczegółowe dane na temat dostępów do wszystkich aplikacji, podstron czy zasobów statycznych – wraz z dokładnym czasem oraz adresem IP klienta i numerami statusów zwracanymi przez Tomcata. Te pliki stają się bardzo przydatne w 2 sytuacjach. Po pierwsze na potrzeby analizy powłamaniowej. Po drugie gdy szukamy wszystkich brakujących elementów – tj. takich gdzie ktoś próbował uzyskać do nich dostęp, ale dostał w zwrocie błąd numer 401 (not found). Wystarczy przeparsować te logi pod kątem wystąpienia wartości 401.

Pliki o formacie manager.yyyy-mm-dd.txt

Tutaj znajdziemy listing wszystkich dostępów do aplikacji manager – zarówno przyjaznej HTMLowej wersji, jak i konsoli tekstowej. Można łatwo znaleźć (wraz z adresami IP) kto i co robił z użyciem tej aplikacji.

Szukanie przyczyn problemów

Jeśli jakaś aplikacja zgłasza błąd 500 (Internal Server Error) lub serwer nie działa właściwie, powinniśmy zajrzeć w pierwszej kolejności do pliku catalina.out znajdującego się w katalogu logs serwera. Jest to główny log serwera Tomcat. Znajdą się tam informacje o błędach samego serwera Tomcat. Poniżej przedstawiam przykład takiej analizy. Zbudowałem najprostszą aplikację zawierającą serwlet. Poniżej kod realizowany przez ten serwlet. Poniższa metoda obsługuje wywołanie podstrony /Zepsuj

Jak nie trudno zauważyć, następuje tutaj próba dzielenia przez zero (linia 31). Aplikację kompiluję i wrażam na serwer. Wchodzę pod adres obsługiwany przez ten serwlet:

Z racji oczywistego błędu nie dostaję oczekiwanej strony internetowej. Podejrzyjmy logi. W systemie Linux domyślnie dostępna jest aplikacja TAIL która pozwala m.in. na podglądanie na żywo nowo pojawiających się logów. Wystarczy ją wywołać z użyciem przełącznika -f i podać ścieżkę względną lub bezwzględną pliku którego chcemy podglądać. W naszym przypadku (a jestem w głównym katalogu Tomcata, cała komenda ma kształt:

tail -f logs/catalina.out

Użytkownicy systemu Windows nie muszą się martwić, bo jest dostępna adaptacja tego programu dla ich systemu. Wystarczy wyszukać i zainstalować aplikację „Tail for Windows”.

W tym przypadku w logach catalina.out nie pojawiło się nic na temat owego błędu. Możemy więc wywnioskować, że nie jest to błąd serwera a aplikacji. Przechodzimy więc do logu o formacie „localhost.yyyy-mm-dd.log” z dzisiejszą datą i odnajdujemy taki wpis:

Dla osób nie programujących w Javie – możesz po prostu wyszukać w pliku wpisu o treści „Exception” albo po prostu nazwy problematycznej aplikacji. Jak widać powyżej, z logów dowiemy się nie tylko o czasie wystąpienia błędu, ale też o rodzaju tego błędu, a nawet o linii w kodzie źródłowym która ten błąd spowodowała (zobacz w powyższym logu linię nr 34).

Ten artykuł jest elementem poniższych kursów: