글쓴이 : 윤성재 (공작명왕)
E-mail : <gongjak@gmail.com>
Facebook : < https://www.facebook.com/sungjae.yun >
Tomcat Monitoring
1.Tomcat 설치와 시작
< Debian 8 >
sudo apt-get install tomcat7
< CentOS 7 >
sudo yum install tomcat sudo systemctl start tomcat
2.사전 준비
JMX 모니터링을 사용하기 위해 catalina-jmx-remote.jar 파일을 설치해줘야 하는데, Debian 8 은 tomcat7을 설치하면 함께 설치가 되나 CentOS 7 은 직접 설치해줘야 한다.
< Debian 8 >
다음 내용으로 /usr/share/tomcat7/bin/setenv.sh 파일을 만든다.
sudo vi /usr/share/tomcat7/bin/setenv.sh #!/bin/sh JMX_OPTS=" -Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate=false \ -Djava.rmi.server.hostname=localhost \ -Dcom.sun.management.jmxremote.ssl=false " CATALINA_OPTS=" ${JMX_OPTS} ${CATALINA_OPTS}"
/etc/tomcat7/server.xml 파일을 열고 Server 항목에 다음 Listener를 추가한다.
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="9012" rmiServerPortPlatform="9013"/>
Tomcat을 재기동하고, 9012 포트가 열렸는지 확인한다.
sudo service tomcat7 restart netstat -na | grep 9012
< CentOS 7 >
JMX 모니터링을 위한 jar 파일이 기본 패키지에 포함되어 있지 않으니 톰캣 다운로드 사이트 (http://tomcat.apache.org/download-70.cgi) 에서 최신버전을 다운로드 받아야 한다.
JMX_Remote.jar Download :
cd /usr/share/tomcat/lib && sudo wget http://apache.mirror.cdnetworks.com/tomcat/tomcat-7/v7.0.70/bin/extras/catalina-jmx-remote.jar
tomcat 실행 파일을 열어 if 문 앞(15번행)에 다음 내용을 추가한다.
/usr/libexec/tomcat/server
JMX_OPTS=" -Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate=false \ -Djava.rmi.server.hostname=localhost \ -Dcom.sun.management.jmxremote.ssl=false " OPTIONS=" ${JMX_OPTS} ${OPTIONS}"
/etc/tomcat/server.xml 파일을 열고 Server 항목에 다음 Listener를 추가한다.
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="9012" rmiServerPortPlatform="9013"/>
Tomcat을 재기동하고, 9012 포트가 열렸는지 확인한다.
sudo systemctl restart tomcat netstat -na | grep 9012
3.Plugin 설치
cd /opt/stackdriver/collectd/etc/collectd.d/ && sudo curl -O https://raw.githubusercontent.com/Stackdriver/stackdriver-agent-service-configs/master/etc/collectd.d/tomcat-7.conf
4.Stackdriver Agent 재시작
< Debian 8 >
sudo service stackdriver-agent restart
< CentOS 7 >
sudo systemctl restart stackdriver-agent
5.Monitoring 확인
Monitoring -> Resources -> Instances
각 서버를 클릭해보자. stackdriver agent가 plugin이 정상으로 동작하여 정보를 제대로 가져온다면 Monitoring의 오른쪽 그래프 윗부분에서 다음과 같은 화면을 볼 수 있다.
Tomcat 은 JVM 기반으로 동작하기에 친절한 Stackdriver는 JVM 모니터링까지 함께 할 수 있게 자료를 수집해서 보여준다.
[ 출처: Flickr, gongjak1 ]
6.현재 모니터링 가능한 항목
Tomcat
- Threads: Total and busy threads in the Tomcat process.
- Requests: The number of completed and error requests that took place.
- Sessions: How many sessions are active in Tomcat.
JVM
- Active JVM Threads
- JVM Heap memory usage
- JVM Non-Heap memory usage
- JVM Open File Descriptors
- JVM Garbage Collection Count
Plugin 설정을 마치며…
Stackdriver 라는 도구가 GCP 에 추가되어 들어오고나서 각 인스턴스들에 대해 좀 더 세밀한 모니터링이 가능하게 되었다. 서비스 구성에서 필수적으로 사용해야할 각 종 Application 들의 모니터링까지 쉽게 설정할 수 있게 되어 시스템 운영자들의 필수 과제인 “모니터링과 알람” 에 대한 1차 문제를 해결할 수 있게 되었는데, 이 중 모니터링에 대한 부분만을 해결 하였다.
그런데 아직도 남은 숙제가 있어 보인다.
바로 각 서비스에서 개발자들이 남기는 User-Defined Log 들에 대한 모니터링이다.
다음에는 이 로그들에 대한 모니터링 방법과 이렇게 모인 Metric을 이용해서 어떻게 알람을 설정할 수 있는지 알아보도록 하겠다.