mod_jk 샘플/설명

Web service 2012. 1. 17. 18:33


<간단 설명> 

Apache Http의 설정 파일이다.

LoadModule jk_module modules/mod_jk.so

<IfModule mod_jk.c>

JkWorkersFile "/home/www/httpd/conf/workers.properties"

JkLogFile "| /home/www/httpd/bin/rotatelogs –l /home/www/httpd/logs/mod_jk.log. %y%m%d 86400 "

JkLogLevel error

JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

#JkRequestLogFormat "%w %V %T"

</IfModule>

mod_jk 로그도 full 되어서 write를 못하면 apache httpd 서버가 동작이 안될 수 있으니 rotatelogs를 쓰는 것이 좋다.

 

필요시에는 JkLogLevel 을 error에서 debug 혹은 info 레벨로 낮추어서 테스트할 수 있다. 디폴트 값은 error이다.

하루 단위로 mod_jk 로그가 생성되도록 하였다. 옵션에 대한 상세한 mod_jk.log 설정은 다음과 같다.

JkLogFile에 적힌 옵션들과 숫자들의 의미이다.

• %y : 연도 (year)

• %m : 월 (month)

• %d : 일 (day)

• 86400 : 하루를 초로 나타난 시간 (60 * 24 * 24)

JkLogLevel 의 경우는 default로 error로 초기화 되나, 필요에 따라서 info나 debug로 설정한다.

JkLogStampFormat 설명은 다음과 같다.

• %a : 요일

• %b : 월 (month)

• %d : 일 (day)

• %H:%M:%S %Y] : 시간정보 와 연도 (year)

JkRequestLogFormat 설명은 다음과 같다.

• %w : Tomcat worker의 이름

• %V : 요청한 Domain 이름

• %T : 처리 시간 (소수점 초 단위)

JkRequestLogFormat을 정의하면, Apache Http 서버에서 Apache Tomcat 서버로 Http요청으로 넘어갈 때, 로그가 저장이 된다.

[Fri Dec 03 14:47:19 2010] solution_search search.nhncorp.com 0.017900
[Fri Dec 03 14:47:20 2010] solution_search search.nhncorp.com 0.020706

따라서, Error 가 발생할 때만, 로그가 저장되길 원한다면, JkRequestLogFormat을 사용하지 말아야 한다. 그 이유는 내부적으로 log level을 JK_LOG_REQUEST_LEVEL로 지정하고 있는데, JkLogLevel과는 상관없이 출력하도록 코딩이 되어 있다.

WAS에서 Flush 되지 않거나 하는 문제가 발생시 다음의 옵션을 사용하여 Flush 되게 할 수 있다.

JkOptions +FlushPackets +FlushHeader

예를 들어, chunked encoding 으로 gzip을 전송시 바로 flush가 안될 수 있는데, 위의 옵션을 추가하면 바로 flush 되는 것을 확인할 수 있다. (Http server 2.2.8부터 가능)

만약 동작이 되지 않는다면, JkLogLevel 을 trace로 내리면 구체적인 로그를 확인할 수 있다. 로그 레벨의 디폴트 값은 info이며, 레빌의 수준은 trace, debug, info, warn, error 단계로 나눌 수 있다.


<상세 로그 보기>



Apache Http서버는 mod_jk 관련 로그를 상세하게 출력이 가능하다. Failover시에 대한 정보를 아래와 같은 포맷으로 출력할 수 있다.

LogFormat "%h %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D %{pid}P %{JK_WORKER_NAME}n %{JK_LB_FIRST_NAME}n %{JK_LB_FIRST_STATE}n %{JK_LB_LAST_NAME}n %{JK_LB_LAST_STATE}n %{JK_REQUEST_DURATION}n" mod_jk_log


CustomLog "| /home/www/httpd/bin/rotatelogs -l /home/www/httpd/modjklog.%Y%m%d 86400" mod_jk_log env=!nolog-request
추가된 설정의 의미를 설명한다.
 %{pid}P : prefork 기준 Apache Http process 아이디
 %{JK_WORKER_NAME}n : load balancer worker 이름
 %{JK_LB_FIRST_NAME}n : 처음 시도한 load balancer worker의 이름
 %{JK_LB_FIRST_STATE}n : 처음 시도한 load balancer worker 의 상태
 %{JK_LB_LAST_NAME}n : 마지막으로 Http 요청을 처리한 load balancer worker의 이름
 %{JK_LB_LAST_STATE}n : 마지막으로 Http 요청을 처리한 load balancer worker의 상태
 %{JK_REQUEST_DURATION}n : 처리시간


Posted by '김용환'
,