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. 

No comments:

Post a Comment