apache 로드밸런스에서 어디로 보냈는지 로그에 출력하기

결론부터 말하자면 %{BALANCER_WORKER_NAME}e 항목으로 출력합니다.
예를들면 ajp://web01:8009 와 같이 출력되는데 아래와 같이 httpd.conf에서 설정할 수 있습니다.

설정항목의 자세한 내용은 https://httpd.apache.org/docs/2.2/ja/mod/mod_log_config.html 를 참조하세요.

로드밸런스의 설정은 대략 아래와 같습니다.

물론 tomcat이나 jboss쪽의 server.xml 에는 jvmRoute를 꼭 설정하여야 합니다.

위에서 scolonpathdelim=On 이란 url;jsessionid=xxx 와 같이 쿠키를 사용할 수 없는 브라우져에서 url에 세션ID가 포함되는데 이것을 인지하기 위해 설정을 on 으로 합니다.
보통은 쿠키의 ROUTEID란 항목에 어느 루트로 로드밸런싱을 하는지 설정하는데 쿠키를 사용할 수 없을때는 jsessionid 를 이용하게 됩니다.
따라서 stickysession=ROUTEID|jsessionid 로 설정을 해야 합니다.

이렇게 하고 로그 파일에 %{BALANCER_WORKER_NAME}e 항목을 출력하면 해당 요청이 어느 서버로 갔는지 알 수 있습니다.

참고로 http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html 에서는 아래와 같이 항목을 설명하고 있습니다.

BALANCER_SESSION_STICKY 현재 Request에 사용되는 stickysession 항목값입니다. ROUTEID인지 jsessionid인지.
BALANCER_SESSION_ROUTE 현재 Request를 Parsing하여 얻어진 루트 경로입니다. 즉, 이미 사용되어지고 있는 당신의 세션에 저장된 루트값이며 계속 이쪽 경로로 보내지게 됩니다.
처음 요청시에는 아직 저장된 값이 없기 때문에 null 상태가 됩니다.
BALANCER_WORKER_ROUTE 현재 Request가 사용하는 Worker의 루트 경로입니다.
BALANCER_ROUTE_CHANGED BALANCER_SESSION_ROUTE값과 BALANCER_WORKER_ROUTE값이 다를경우에 true가 됩니다. 정상적인 경우라면 첫 요청시에 true 를 파악하여 Header add Set-Cookie “ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/” env=BALANCER_ROUTE_CHANGED 의 설정과 같이 쿠키를 추가한후 다음부터는 BALANCER_SESSION_ROUTE에 값이 저장되도록합니다.
BALANCER_NAME 현재 Request가 사용하는 로드밸런서이름입니다. balancer://lb01/ 와 같은 값입니다.
BALANCER_WORKER_NAME 현재 Request가 사용하는 Workder이름입니다.

참고사이트

http://opensourcehacker.com/2010/12/21/enhanced-apache-logging-request-duration-balancer-member-transferred-bytes/

http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html

This entry was posted in Apache. Bookmark the permalink.