Logi w serwerze aplikacji EuroAP

Logi w serwerze aplikacji EuroAP – cz. I

„Prawdziwy admin najpierw sprawdza logi” – to motto wysmarowałam czerwonym markerem na okładce podręcznika na moim pierwszym szkoleniu z administrowania serwerami aplikacji. Tam też raz za razem przekonywałam się, że logi często podają rozwiązania problemów niemalże na tacy.

„Prawdziwy admin najpierw sprawdza logi” – to motto wysmarowałam czerwonym markerem na okładce podręcznika na moim pierwszym szkoleniu z administrowania serwerami aplikacji. Tam też raz za razem przekonywałam się, że logi często podają rozwiązania problemów niemalże na tacy.

W cyklu o logach w serwerach aplikacji z rodziny EuroAP (zatem także JBoss®) pokażemy, gdzie szukać logów, jak je przeglądać oraz jakie mechanizmy nimi sterują, a także jak je konfigurować.

Gdzie te logi?

Tryb Standalone

Zaraz po uruchomieniu serwera aplikacji w trybie Standalone pojawia się folder EUROAP_HOME/standalone/log, którego zawartość prezentuje się następująco:

audit.log gc.log.0.current server.log
  • server.log – zwany logiem serwera. Tutaj znajdziemy wiadomości, które wysłał serwer aplikacji, w tym także te z momentu uruchomienia. Domyślnie zapisywane są tu te same wiadomości, które wyświetlane są na konsoli/terminalu, w którym uruchomiliśmy serwer aplikacji EuroAP
  • gc.log.0.current – tutaj logowane są informacje o garbage collection (tłumacząc na język polski „odśmiecanie”) wirtualnej maszyny Javy, na której uruchomiony jest dany serwer. Nazwa tego loga ma format: gc.log.NUMER.current. Domyślnie jest ograniczony do 3 megabajtów i jest rotowany do pięciu elementów. Możemy wyłączyć tworzenie tego loga za pomocą zmiennej środowiskowej GC_LOG. Jest to jednak wysoce niewskazane. Narzut na jego tworzenie jest minimalny, a korzyści płynące z jego analizy bywają nieocenione
  • audit.log – tutaj znajdziemy pliki dotyczące audytu – zmian, jakie zostały dokonane na serwerze aplikacji. Domyślnie te logi są wyłączone.

Tryb Domain

W trybie Domain logi są w folderze EUROAP_HOME/domain/log oraz w EUROAP_HOME/domain/servers/NAZWA_SERWERA/log/'.

Foldery te zawierają następujące logi:

EUROAP_HOME/domain/log/host-controller.log – logi dotyczące startu kontrolera hostu
EUROAP_HOME/domain/log/process-controller.log – logi dotyczące startu kontrolera procesu
EUROAP_HOME/domain/servers/NAZWA_SERWERA/log/server.log – logi dotyczące danego serwera, w tym jego uruchamiania i zamykania.

Przeglądanie logów

Standardowo, jak prawie wszystko w EuroAP, logi możemy przeglądać na trzy sposoby:

  • przez graficzną konsolę administratora
  • przez CLI
  • bezpośrednio w plikach.

Konsolę administratora i CLI chronią standardowe mechanizmy serwera aplikacji. Zatem użytkownik zalogowany na te narzędzia będzie mógł zobaczyć tylko te logi, do których ma uprawnienia. Aby log był widoczny w tych narzędziach, musi znajdować się w folderze wyspecyfikowanym przez właściwość jboss.server.log.dir.

Przeglądanie logów w graficznej konsoli administratora

Logi w konsoli graficznej są dostępne w zakładce Runtime. Wybieramy odpowiedni serwer, w nim Log Files i interesujący nas log.

konsola graficzna

konsola graficzna log

Konsola pokazuje wyłącznie 2000 ostatnich linii, aby uniknąć możliwości otworzenia tak dużego pliku, który zatrzymałby działanie przeglądarki.

Przeglądanie logów w CLI

Logi w CLI możemy przeglądać za pomocą polecenia /subsystem=logging/log-file=NAZWA_PLIKU_Z_LOGIAMI:read-log-file. Udostępnia ono kilka wartościowych przełączników:

  • lines – ilość wyświetlanych linii. Domyślna wartość to 10. Wartość -1 pozwala wyświetlić cały plik
  • skip – ilość linii, które należy pominąć przed czytaniem logu. Domyślnie jest ona równa 0
  • tail – przełącznik pozwalający czytać plik logu od tyłu (czyli nowsze wiadomości będą wyświetlane jako pierwsze). Domyślnie jest ustawiony na true
  • encoding – pozwala ustawić kodowanie znaków, które ma być zastosowane przy odczycie logu.

Polecenie wyświetlające 2 najnowsze (ostatnie) linie server.log wygląda następująco:

[standalone@localhost:9990 /] /subsystem=logging/log-file=server.log:read-log-file(lines=2)
{
    "outcome" => "success",
    "result" => [
        "2021-01-20 00:37:23,007 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0060: Ht
tp management interface listening on http://127.0.0.1:9990/management",
        "2021-01-20 00:37:23,007 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0051: Ad
min console listening on http://127.0.0.1:9990"
    ]
}

Przeglądanie logów w plikach

Można tak po prostu zajrzeć w pliki na serwerze aplikacji. Ograniczają nas wówczas tylko nasze umiejętności posługiwania się narzędziami typu grep i less. Pliki ukazują nam cały kontekst, w jakim została zapisana dana wiadomość – widzimy, co działo się przed wiadomością, a co po niej. Łatwo zobaczyć, ile razy podobna wiadomość pojawiała się już wcześniej.

Mankamentem tego rozwiązania jest to, że musimy mieć dostęp do danych plików.

Mechanizmy logowania

Za logowanie w serwerach aplikacji z rodziny EuroAP odpowiadają 3 główne mechanizmy. Najważniejszy z nich to podsystem logowania (ang. logging subsystem), którego główną składową jest Log Manager. Zanim jednak podsystemy zostaną uruchomione, może się jeszcze wiele wydarzyć. Dlatego mamy drugi mechanizm – logowanie podczas uruchamiania (ang. bootup logging). Trzeci mechanizm – profile logowania (ang. logging profiles) – służy do zarządzania logami aplikacji wdrożonych na nasz serwer aplikacji niezależnie od innych mechanizmów i konfiguracji.

Logowanie podczas uruchamiania

Mechanizm logowania podczas uruchamiania działa od momentu startu serwera aplikacji do momentu, aż podsystem logowania będzie w stanie przejąć jego obowiązki. Mechanizm ten loguje informacje o środowisku uruchomieniowym i o włączaniu każdego serwisu w ramach serwera aplikacji.

Do informacji środowiskowych, które możemy odczytać z tego logu, należą między innymi:

  • informacje o wewnętrznych właściwościach serwera aplikacji z rodziny EuroAP. Na przykład jboss.server.base.dir albo kluczowe dla logowania jboss.server.log.dir
  • informacje o Javie – jej wersja, wartość zmiennej JAVA_HOME
  • informacje o tym, skąd pobierana jest konfiguracja tego mechanizmu logowania
  • informacje o użytkowniku, który uruchomił serwer aplikacji.

Konfigurację logowania podczas uruchomienia możemy podejrzeć w {standalone,domain}/configuration/logging.properties. Nie należy jednak tego pliku zmieniać, ponieważ i tak zostanie on nadpisany podczas kolejnego uruchomienia serwera. Nie ma możliwości konfiguracji tego mechanizmu.

Logowanie podczas uruchomienia loguje na konsolę i do pliku server.log. Warto zauważyć, że zgodnie z konfiguracją z logging.properties na konsolę dostajemy tylko logi o poziomie co najmniej INFO, a w pliku zapisywane są wszystkie poziomy logów.

Podsumowanie

Pokazaliśmy dziś, gdzie szukać logów, co można znaleźć w logach skonfigurowanych domyślnie, a także jak przeglądać logi za pomocą graficznej konsoli administratora i CLI. Zaprezentowaliśmy również mechanizmy odpowiadające za logowanie w serwerach aplikacji z rodziny EuroAP. Omówiliśmy najprostszy z nich – logowanie podczas uruchamiania serwera aplikacji. W kolejnych artykułach zanurzymy się w konfigurację podsystemu do logowania i profili logowania.

Autorzy

Artykuły na blogu są pisane przez osoby z zespołu EuroLinux. 80% treści zawdzięczamy naszym developerom, pozostałą część przygotowuje dział sprzedaży lub marketingu. Dokładamy starań, żeby treści były jak najlepsze merytorycznie i językowo, ale nie jesteśmy nieomylni. Jeśli zauważysz coś wartego poprawienia lub wyjaśnienia, będziemy wdzięczni za wiadomość.