Posts Tagged tomcat

Monitorowanie Tomcata przy użyciu Jopra

System monitorujący Jopr (lub też JON) posiada możliwość monitorowania serwera Tomcat. Jednak wymaga to wcześniejszej odpowiedniej konfiguracji zarówno Tomcata jak i Jopra.

Jopr pozwala na monitorowanie Tomcata w wersji od 5.5.23 oraz 6.0.18 działającego pod maszyną wirtualną Javy w wersji przynajmniej 5.

Poniższa konfiguracja dotyczy Tomcata w wersji 5.5.26 dostępnego w Debianie Lenny, działającym w ramach JVM w wersji 1.6.20. Te same kroki w można w praktyce wykonać na dowolnym systemie, jedynie modyfikując odpowiednio ścieżki. W przedstawionym opisie nie ma podanej instalacji agenta Jopr, zakładam że jest już instalowany i poprawnie działa.

Zwracam uwagę, że agent monitorujący nie wykrywa automatycznie Tomcata, należy go odpowiednio skonfigurować zanim zacznie będzie można go monitorować.

Konfiguracja serwera Tomcat

Konfiguracja maszyny wirtualnej Javy

Pierwszym krokiem będzie włącznie możliwości dostępu do interfejsu JMX dostarczanego przez Tomcata. Umożliwi do jego zdalną kontrolę. Aby to zrobić, należy zdefiniować odpowiednie parametry podczas uruchamiania JVM. W przypadku Tomcata najlepiej dodać je do w pliku /etc/default/tomcat5.5, najlepiej na końcu pliku:

30
31
32
33
34
35
36
37
38
39
# włączenie portu, na którym JVM ma nasłuchiwać na połączenia
JAVA_OPTS="${JAVA_OPTS} -Dcom.sun.management.jmxremote.port=22123"
# wyłączenie SSL
JAVA_OPTS="${JAVA_OPTS} -Dcom.sun.management.jmxremote.ssl=false"
# plik z informacjami o uprawnieniach poszczególnych użytkowników
JAVA_OPTS="${JAVA_OPTS} -Dcom.sun.management.jmxremote.access.file=/etc/tomcat5.5/jmx.access"
# plik z loginami i hasłami użytkowników
JAVA_OPTS="${JAVA_OPTS} -Dcom.sun.management.jmxremote.password.file=/etc/tomcat5.5/jmx.password"
# włączenie uwierzytelnienia
JAVA_OPTS="${JAVA_OPTS} -Dcom.sun.management.jmxremote.authenticate=true"

Teoretycznie może wystarczyć jedynie definicja portu na którym nasłuchuje JVM oraz wyłączenie uwierzytelniania. Doprowadzi to jednak do sytuacji, że każdy kto pozna ten port, będzie w stanie zdalnie zarządzać naszą instancją Tomcata. Dlatego zaleca się zdefiniowanie odpowiednich informacji potrzebnych do uwierzytelnienia. Szczegółowe informacje na ten temat można znaleźć w tym artykule: Monitoring and Management Using JMX.

Pierwszym krokiem będzie zdefiniowanie pliku z loginem użytkownika oraz jego hasłem w pliku /etc/tomcat5.5/jmx.password, plik będzie po prostu zawierał login użytkownika oraz przypisane dla niego hasło dostępowe:

1
rhqadmin hasło

Teraz należy zdefiniować uprawnienia, jakie dany użytkownik będzie posiadał, w pliku /etc/tomcat5.5/jmx.access:

1
rhqadmin readwrite

Nie można także zapomnieć o konfiguracji odpowiednich uprawnieć dostępu do pliku. W przypadku zbyt szerokich uprawnień serwer Tomcat nie wystartuje:

# chown tomcat55.adm /etc/tomcat5.5/jmx.password /etc/tomcat5.5/jmx.access
# chmod 600 /etc/tomcat5.5/jmx.password /etc/tomcat5.5/jmx.access

Konfiguracja moduły Response Time

Włączenie modułu o nazwie Response Time wiąże się z konieczności wprowadzenia zmian w konfiguracji serwera Tomcat lub też aplikacji dla których chcemy ten moduł włączyć. Jeżeli chcemy go włączyć dla wybranych aplikacji, odpowiednie wpisy należy umieścić w jej pliku konfiguracyjnym web.xml. Natomiast tutaj skonfigurujemy ten moduł dla całego serwera. Wymaga to wprowadzenia poniższych modyfikacji do pliku /etc/tomcat5.5/web.xml. Odpowiednie wpisy należy umieścić głównymi pomiędzy tagami ograniczającymi web-app.

1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
  <!-- The RHQ Response Time Metric Filter. -->
  <!-- This filter gathers response time information for processed requests -->
  <!-- for all hosted applications. This requires that the                  -->
  <!-- rhq-rtfilter-X.X.X.jar also be placed properly in the Tomcat         -->
  <!-- deployment. The jar file can be downloaded from the RHQ Server.      -->
  <!-- Using the GUI, navigate to the Administration page. Then click       -->
  <!-- 'Download Agent Connectors'.                                         -->
  <!-- Download connector-rtfilter.zip. Unzip to extract the jar.           -->

   <filter>
       <filter-name>RhqRtFilter</filter-name>
       <filter-class>org.rhq.helpers.rtfilter.filter.RtFilter</filter-class>
   </filter>

  <!-- The mapping for the RHQ Filter                                       -->
  <!-- To limit to only certain applications various filters can be         -->
  <!-- defined. This will perform RT metric collection for all              -->
  <!-- applications.                                                        -->

   <filter-mapping>
       <filter-name>RhqRtFilter</filter-name>
       <url-pattern>/*</url-pattern>
   </filter-mapping>

Należy teraz jeszcze udostępnić serwerowi Tomcat odpowiednie biblioteki. Można je znaleźć:

  • na stronie o nazwie Downloads, tej z której można pobrać agenta monitorującego, plik nazywa się connector-rtfilter.zip
  • w katalogu z instalacją serwera RHQ: rhq-server/jbossas/server/default/deploy/rhq.ear/rhq-downloads/connectors/connector-rtfilter.zip

Plik ten należy pobrać oraz rozkompresować. Wewnątrz znajdują się dwa pliki (podaję ich nazwy bez wersji): commons-logging.jar oraz rhq-rtfilter.jar. Teraz w zależności od wersji Tomcata musimy je skopiować w odpowiednie miejsca:

  • w przypadku Tomcata w wersji 5.5 kopiujemy plik rhq-rtfilter.jar do katalogu /usr/share/tomcat5.5/common/lib
  • w przypadku Tomcata w wersji 6 kopiujemy oba pliki commons-logging.jar oraz rhq-rtfilter.jar do katalogu lib

Po tych operacjach można ponownie uruchomić serwer Tomcat. Jeżeli nie wystąpiły żadne błędy, można przystąpić do konfiguracji serwera Jopr.

Konfiguracja serwera Jopr/JON

Agent monitorujący potrafi w dużej mierze wykryć samodzielnie różne usługi i serwery jakie działają na naszych maszynach. Niestety, ma problemy z automatyczną konfigurację serwera Tomcat. Trzeba mu tutaj trochę pomóc, czy ręcznie dodać odpowiedni zasób i go skonfigurować.

Najpierw należy wybrać serwer, na którym działa nasza instancja Tomcata, a następnie wybrać zakładkę Inventory. Zostanie wyświetlona lista wszystkich serwerów działających na wybranej maszynie. Należy przewinąć stronę i na dole będzie znajdowała się możliwość dodanie ręcznego nowego zasobu:

JOPR - ręczne dodanie Tomcata

JOPR - ręczne dodanie Tomcata

Należy z rozwijalnej listy wybrać pozycję Tomcat Server i nacisnąć przycisk OK.

Pojawi się formularz, który umożliwi wprowadzenia podstaowych informacji o Tomcacie:

Definicja połączenie z Tomcatem

Definicja połączenie z Tomcatem

Najważniejsze opcje konfiguracyjne, które należy podać:

  • Catalina Home/usr/share/tomcat5.5
    Katalog, gdzie znajduje się zainstalowany Tomcat.
  • Catalina Base/usr/share/tomcat5.5
    Katalog, gdzie znajduje się instancja Tomcata.
  • Manager URLservice:jmx:rmi:///jndi/rmi://localhost:22123/jmxrmi
    Połączenie z interfejsem JMX serwera, port oraz host muszą być takie jak podano przy konfiguracji JVM
  • Principalrhqadmin
    Login użytkownika, taki jak podano podczas konfiguracji JMX.
  • Credentialshasło
    Hasło dla użytkownika, takie jak podano podczas konfiguracji JMX

Pozostaje zatwierdzić konfigurację, i można się już cieszyć monitorowaniem serwera Tomcat przez Jopr.

Źródła

Tags: , , , , ,

Logowanie przychodzących połączeń HTTP w serwerze JBoss AS i Apache Tomcat

Standardowo (przynajmniej w przypadku JBossa) nie są śledzone przychodzące połączenia HTTP. Może to wprowadzać pewną konsternację :), na szczęście łatwo to zmienić.

Odpowiednie modyfikacje należy wprowadzić w pliku server.xml, który w przypadku JBossa (5.0) znajduje się w katalogu deploy/jbossweb.sar odpowiedniej konfiguracji, z którą serwer jest uruchamiany.

Logowanie odbywa się przez klasę AccessLogValve uruchomianą jako valve (hmm, kranik z angielska, ale nie mam pojęcia jak to będzie po polsku). Należy więc odszukać definicję z tą klasą i ją po prostu odkomentować. Wygląda ona następująco:

80
81
82
83
<Valve className="org.apache.catalina.valves.AccessLogValve"
    prefix="localhost_access_log." suffix=".log"
    pattern="common" directory="${jboss.server.log.dir}"
    resolveHosts="false" />

Konstrukcję tę można umieścić w dowolnym kontenerze (Context, Host, Engine) i będą wtedy zapisywane wszystkie połączenia przechodzące przez dany komponent.

Dopuszczalne parametry konfiguracyjne:

  • className
    Nazwa klasy, która ma odpowiadać za obsługę logowania. Do wyboru są dwie wartości:

    • org.apache.catalina.valves.AccessLogValve – bardziej ogólna, umożliwia zdefiniowanie zakresu logowanych informacji
    • org.apache.catalina.valves.FastCommonAccessLogValve – klasa przeznaczona do wykorzystania na systemach produkcyjnych, umożliwia jedynie na logowanie informacji w formacie common lub combined
  • prefix
    Ciąg znaków dodawany na początku nazwy pliku z logiem. Domyślną wartością jest access_log.
  • suffix
    Ciąg znaków dodawany na końcu nazwy pliku z logami.
  • pattern
    Ciąg znaków zawierający informacje o tym, co powinno zostać zapisane w pliku z logami. Może to być definicja używający specjalnych znaczników lub też słowa common lub combined oznaczające jeden ze standardów logowanych informacji. Dokładną specyfikację można znaleźć w dokumentacji Tomcata.
  • directory
    Ścieżka dostępu do katalogu w którym powinny być zapisywane pliki z logami.
  • resolveHosts
    Jeżeli zostanie ustawiona na true to adresy IP zostaną zamienione na nazwy domenowe (będzie to negatywnie wpływało na wydajność, ponieważ będą potrzebne dodatkowe zapytania do serwera DNS). Jeżeli parametr przyjmie wartość false, zostaną użyte adresy IP.
  • rotatable
    Parametr określa, czy plik z logami ma być rotowany. Domyślnie przyjmuje wartość true. Jeżeli zostanie ustawiony na false, plik z logiem nigdy nie będzie rotowany oraz zawartość pola fileDateFormat zostanie zignorowana.
  • condition
    Włączenie logowania warunkowego. Jeżeli parametr zostanie ustawiony na jakąś wartość, to informacja o połączeniu zostanie zalogowań tylko wtedy, gdy ServletRequest.getAttribute() będzie równe null. Jeżeli wartością parametru będzie loguj, to połączenie zostanie zalogowane tylko wtedy, gdy będzie spełniony ten warunek: ServletRequest.getAttribute("loguj") == null.
  • fileDateFormat
    Pozwala na określenie formatu daty w nazwie pliku z logiem. Jednocześnie decyduje o tym, jak często plik ten będzie rotowany. Aby włączyć rotowanie co godzinę, można ustawić wartość parametru tak: yyyy-MM-dd.HH.

Źródła

Tags: , , , , ,