Showing posts with label Apache Tomcat. Show all posts
Showing posts with label Apache Tomcat. Show all posts

Wednesday, October 10, 2012

APACHE TOMCAT 6'DA GÜNLÜKLERİN SYSLOG SERVİSİNE YÖNLENDİRİLMESİ

Apache Tomcat 6'da günlükler $CATALINA_HOME/logs dizininde saklanmaktadır. Günlüğün yapılandırılması ise $CATALINA_HOME/conf/logging.properties dosyası üzerinden gerçeklenmektedir. Apache Tomcat günlük için tomcat-juli.jar paketini kullanmaktadır. İstenirse günlük oluşturmak için log4j kütüphanesi de kullanılabilinir. log4j kütüphanesi kullanılarak, günlükler veritabanı, syslog gibi farklı hedeflerde saklanabilir. Hem veritabanı hem de syslog servisi istemci-sunucu mimarisinde çalıştığı için günlükler merkezileştirilebilir. Böylelikle, çoklu tomcat sunucusunun olduğu bir yapıda, sunucuların yönetimi kolaylaşır, izlenebilirliği de iyileşir. Bunun yanında log4j ile ERROR yada üzeri seviyedeki günlüklerin e-posta olarak sistem ya da uygulama yöneticisine göndermek mümkün olabilir.

log4j ile günlükleri syslog servisinde toplamak için aşağıdaki adımları izlemek gerekir:

1. İlk olarak $CATALINA_BASE/lib dizininde log4j kütüphanesinin yapılandırma dosyasını (log4j.properties)  oluşturuyoruz:

log4j.rootLogger=INFO, CATALINA

# Define all the appenders
log4j.appender.CATALINA=org.apache.log4j.net.SyslogAppender
log4j.appender.CATALINA.layout= org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.CATALINA.SyslogHost=127.0.0.1
log4j.appender.CATALINA.Facility=local0
log4j.appender.CATALINA.threshold=DEBUG

log4j.appender.LOCALHOST=org.apache.log4j.net.SyslogAppender
log4j.appender.LOCALHOST.layout = org.apache.log4j.PatternLayout
log4j.appender.LOCALHOST.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.LOCALHOST.SyslogHost=127.0.0.1
log4j.appender.LOCALHOST.Facility=local0
log4j.appender.LOCALHOST.threshold=DEBUG

log4j.appender.MANAGER=org.apache.log4j.net.SyslogAppender
log4j.appender.MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.MANAGER.SyslogHost=127.0.0.1
log4j.appender.MANAGER.Facility=local0
log4j.appender.MANAGER.threshold=DEBUG

log4j.appender.HOST-MANAGER=org.apache.log4j.net.SyslogAppender
log4j.appender.HOST-MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.HOST-MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.HOST-MANAGER.SyslogHost=127.0.0.1
log4j.appender.HOST-MANAGER.Facility=local0
log4j.appender.HOST-MANAGER.threshold=DEBUG

log4j.appender.CONSOLE=org.apache.log4j.net.SyslogAppender
log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.CONSOLE.SyslogHost=127.0.0.1
log4j.appender.CONSOLE.Facility=local0
log4j.appender.CONSOLE.threshold=DEBUG

# Configure which loggers log to which appenders
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=INFO, LOCALHOST
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager]=INFO, MANAGER
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager]=INFO, HOST-MANAGER

2. log4j kütüphanesinin güncel sürümünü (log4j-1.2.9.jar) projenin sayfasından indirip $CATALINA_BASE/lib dizinine kopyalıyoruz.

3. Apache tomcat'in proje sayfasında "extras" bölümünden tomcat-juli.jar ve tomcat-juli-adapters.jar dosyalarını indiriyoruz. tomcat-juli.jar dosyasını $CATALINA_BASE/bin dizinine tomcat-juli-adapters.jar dosyasını ise $CATALINA_BASE/lib dizinine kopyalıyoruz. Bu dosyalar adı geçen dizinlerde mevcuttur, dolayısı ile üzerinlerine yazmanız gerekecektir.

4. syslog servisinin 2,3,4,5 çalışma seviyelerinde açık olduğundan emin olun:



[root@station1 lib]# chkconfig --list syslog
syslog  0:off   1:off   2:on    3:on    4:on    5:on    6:off

5. syslog servisinin yapılandırması için iki dosya vardır. 
  • /etc/syslog.conf dosyasına aşağıdaki satırı ekliyoruz:
    local0.*   /var/log/tomcat/messages.log
  • /etc/sysconfig/syslog dosyasında SYSLOGD tanımının yapıldığı satırı aşağıdaki gibi düzenliyoruz:

          SYSLOGD_OPTIONS="-r -m 0"

6. Bu değişiklikleri yaptıktan sonra syslog servisini yeniden başlatıyoruz:

[root@station1 lib]# service syslog restart
Shutting down kernel logger:        [  OK  ]
Shutting down system logger:        [  OK  ]
Starting system logger:             [  OK  ]
Starting kernel logger:             [  OK  ]

7. Son olarak tomcat servisini başlatabiliriz.

Günlükleri veritabanında tutmak için MySQL sunucusunda tomcat_logs adında bir veritabanı yaratıyoruz:


mysql> create database tomcat_logs;
Query OK, 1 row affected (0.02 sec)


mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mysql              | 
| test               | 
| tomcat_logs        | 
+--------------------+
3 rows in set (0.00 sec)

Günlüklerin saklanacağı tabloyu ise aşağıdaki create table ifadesi ile yaratıyoruz:

mysql> CREATE TABLE LOGS
    ->    (USER_ID VARCHAR(20) NOT NULL,
    ->     DATED   VARCHAR(40) NOT NULL,
    ->     LOGGER  VARCHAR(50) NOT NULL,
    ->     LEVEL   VARCHAR(10) NOT NULL,
    ->     MESSAGE VARCHAR(1000) NOT NULL
    ->    );
Query OK, 0 rows affected (0.01 sec)

Yukarıdaki sıralanan adımlardan ilkinde verilen log4j.properties dosyasında net.SyslogAppender yerine jdbc.JDBCAppender yazıyoruz:

log4j.rootLogger=WARN, DB

log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DB.layout=org.apache.log4j.PatternLayout
log4j.appender.DB.URL=jdbc:mysql://localhost:3306/tomcat_logs
log4j.appender.DB.driver=com.mysql.jdbc.Driver
log4j.appender.DB.user=tomcat
log4j.appender.DB.password=tomcat
log4j.appender.DB.sql=INSERT INTO LOGS VALUES('%x','%d','%C','%p','%m')

Son adım olarak MySQL Jdbc sürücüsünü $CATALINA_BASE/lib dizinine kopyalamak gerekir.