에이전트 관리
□ | 기동/종료 |
Elevisor for J2EE 에이전트는 WAS에 Plug-in 되어 기동 되기 때문에 별도의 기동/종료가 필요하지 않다.
□ | 환경 설정 |
에이전트 환경 설정은 Elevisor 서버 콘솔에서 수정하는 방법과 환경설정 파일을 직접 수정하는 두가지 방법이 있다.
환경 설정 항목을 수정하면 즉시 반영되는 항목과 WAS 재기동시 반영되는 항목이 있다.
v Elevisor 서버 콘솔에서의 환경설정
메인 메뉴 > COMMON > Common > Configuration > Instance > Instance Management > J2EE 메뉴에서 에이전트 환경 설정을 할수 있다.
콘솔에서 환경 설정할 경우 에이전트 와 TCP/IP 통신을 통하여 관리되기 때문에 WAS 가 기동중인 상태여야 하며 방화벽에서 해당 포트를 차단할 경우 관리가 불가능하다
v 에이전트 환경설정 파일 직접 수정
서버와 에이전트 간의 TCP/IP 통신이 불가능하나 WAS가 Down 상태일때에는 환경설정 파일을 직접 수정하여 반영할수 있다.
□ | 환경 설정 항목 설명 |
v Server Info
- server_info.ip
Elevisor 서버가 설치된 IP
- server_info.udp.port.common
Elevisor 서버에서 Agent로의 성능데이터 전송용 UDP 포트
- server_info.udp.port.trace
Elevisor 서버에서 Agent로의 트레이스 데이터 전송용 UDP 포트
v Agent Info
- agent_info.name
에이전트명( 영문 4글자 )
- agent_info.port
서버에서 에이전트로의 접속을 위한 TCP/IP 포트
- agent_info.file.encoding
에이전트에서 수집한 성능데이터를 서버로 전송시 인코딩
- agent.enable
에이전트 동작 여부를 설정
- agent.license
에이전트 라이센스
v Trace Config
- trace.enable
트레이스 동작 여부를 설정한다.
- trace.jdbc.enable
JDBC 관련 항목에 대한 트레이스 여부를 설정한다.
- trace.jdbc.datasource.enable
Datassource에 대한 트레이스 여부를 설정한다.
- trace.jdbc.datasource.cache.enable
Hybernate와 같은 Framework에서 DataSource를 Caching 하는 경우에도 성능정보 수집이 가능하도록 개선 Datassource에 대한 트레이스 여부를 설정한다.
- trace.jdbc.debug.enable=false
DataSource.lookup(String) 이나 DriverManager.getConnection(String) 호출시 Agent 로그에 아래와 같이 로깅함.
( DataSource명 및 JDBC 커넥션 URL 확인 가능)
ex) [2012-11-15,10:50:00] [Debug] DriverManager.getConnection url=jdbc:apache:commons:dbcp:REPO
* 주의 : 설정시 Agent 로그가 급증함.
- trace.jdbc.debug.stacktrace.enable=false
DataSource.lookup(String) 이나 DriverManager.getConnection(String) 호출시 Stack Trace 정보를 Agent 로그에 아래와 같이 로깅여부를 설정한다.
( 호출 소스 위치 확인용으로 최초 JDBC Trace 설정시에만 사용 권장 )
ex)
[2012-11-15,10:50:00] [Debug] java.lang.Exception
at java.sql.DriverManager.getConnection(DriverManager.java:518)
at java.sql.DriverManager.getConnection(DriverManager.java:203)
at com.elevizer.common.db.DBCPUtil.getConnection(DBCPUtil.java:186)
at com.elevizer.oracle.db.dao.InstanceCurrentDAO.getInstanceCurrentData(InstanceCurrentDAO.java:49)
at com.elevizer.oracle.main.thread.InstanceMonitorThread.run(InstanceMonitorThread.java:98)
* 주의 : 설정시 Agent 로그가 급증함.
- trace.jdbc.application.info
오라클 DB에 대하여 SQL 수행시 Application 정보 설정 여부를 설정한다.
true로 설정하면 DB와 연계 분석 기능이 활성화 된다.
- trace.jdbc.connection.leak.trace
JDBC 커넥션 미반환 트레이스 여부를 설정한다.
- trace.jdbc.connection.enable
JDBC Connection을 Trace(Wrapping) 할지 여부를 설정한다.
- trace.jdbc.preparedstatement.enable
JDBC PreparedStatement를 Trace(Wrapping) 할지 여부를 설정한다.
- trace.jdbc.callablestatement.enable
JDBC CallableStatement를 Trace(Wrapping) 할지 여부를 설정한다.
- trace.jdbc.statement.enable
JDBC Statement를 Trace(Wrapping) 할지 여부를 설정한다.
- trace.jdbc.resultset.enable
JDBC ResultSet을 Trace할지 여부를 설정한다.
- trace.jdbc.drivermanager.poolname.prefixes
DriverManager를 사용하여 JDBC 커넥션풀에서 커넥션을 획득하는 경우 Trace하기 위한 PoolName에 대한 prefix를 지정한다.
커넥션풀을 사용하지 않고 매번 직접 접속하는 AP의 경우 "jdbc:oracle:thin"으로 prefix를 지정하면 JDBC Trace가 가능하다.
※ 하지만 아래와 같이 OracleConnectionPoolDataSource를 사용하는 경우 JDBC Driver 내에서 ClassCastException이 발생하니 주의가 필요하다.
java.lang.ClassCastException: com.elevizer.j2ee.agent.jdbc.wrapper.ConnectionWrapper
at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java(Compiled Code))
at oracle.jdbc.pool.OracleConnectionPoolDataSource.getPhysicalConnection(OracleConnectionPoolDataSource.java(Inlined Compiled Code))
- trace.max.length
최대 트레이스 길이를 설정한다. 트레이스중 이 값을 초과하면 트레이스를 중단하여 과도한 트레이스에 따른 성능저하를 방지한다.
- trace.truncate.threshold
트레이스시 지정된 응답시간 이하의 트레이스는 트레이스에서 제외시킨다. 이를 통하여 불필요한 트레이스 및 성능저하를 방지할수 있다.
- trace.truncate.querystring.length
URL의 Query String의 길이를 지정된 값으로 제한하는 기능으로서 과도한 Query String 수집을 방지한다.
- trace.io.socket.enable
TCP/IP 기반의 Socket I/O 트레이스 여부를 설정한다.
- trace.io.socket.jdbc.enable
DB와의 Socket I/O 정보를 트레이스 할지 여부를 설정한다.
Socket I/O 트레이스가 설정 되어 있어야 동작한다.
- trace.io.file.enable
File I/O 트레이스 여부를 설정한다.
- trace.apc.enable
AP Class에 대한 트레이스 여부를 설정한다.
- trace.exception.enable
Exception/Error 발생에 대한 트레이스 여부를 설정한다.
- trace.exception.ignore
의미 없는 Exception일 경우 등록하여 트레이스에서 제외 시킨다.
- trace.ignore.url
등록된 URL 패턴에 대하여 정보를 수집하지 않는다.
- trace.key.ip.header
클라이언트의 IP가 HttpServletRequest의 Header의 값을 읽어야 하는 경우 Header의 키 값을 입력한다.
- trace.capture.method.parameter.value.enable
메소드 호출시의 첫번째 파라미터 값에 대한 캡쳐 여부를 설정한다.
- trace.capture.method.return.value.enable
메소드 수행후 리턴되는 값에 대한 캡쳐 여부를 설정한다.
- trace.capture.method.truncate.value_len
캡쳐되는 파라미터나 리턴값에 대한 과도한 캡쳐를 방지하기 위하여 길이를 제한하는 값이다.
v Service control
- service.dump.enable
액티브 서비스 임계치 초과시 서비스 덤프를 수행할지 여부를 설정한다.
- service.dump.thread.enable
액티브 서비스 임계치 초과시 스레드 덤프를 수행할지 여부를 설정한다. ( JDK 1.5 이상에서 지원 )
- service.dump.limit
덤프를 위한 액티브 서비스의 임계치를 설정한다.
- service.dump.interval
덤프 임계치 초과시 덤프 수행 주기 설정(단위:초)
v Instrument
- instrument.apc.webapps.classes.enable
JAR파일 내의 클래스가 아닌 "WEB-INF/classes" 에서 로딩되는 클래스에 대한 Instrument 여부를 설정한다.
Instrument 대상 클래스는 트레이스 대상 클래스가 된다.
- instrument.apc.filter.classes.pattens
Instrument 대상에서 제외할 패턴을 지정한다.
Util나 XML 파싱관련 클래스의 경우 루핑 작업이 많기 때문에 모니터링 대상에서 제외하는 것이 좋다.
- instrument.jsp-servlet.classes
WAS 별 JSP/Servlet 클래스들을 등록하는 항목으로 벤더사에서 지정하므로 임의로 수정하면 안된다.
v Logging
- logging.accesslog.enable
액세스 로그를 기록할지 여부를 설정한다.
"$ElEVISOR_AGENT_HOME/log/access" 경로에 "인스턴스명_access_yyyymmdd.log" 파일에
"YYYY/MM/DD HH:MM:SS, Client IP, Responce Time, Cpu Time, URL" 포멧으로 로깅된다.
- logging.loading.class.list.enable
로딩되는 클래스 목록을 로깅할지 여부를 설정한다.
"$ElEVISOR_AGENT_HOME/log/class" 경로에 "YYYY-MM-DD_hh--mm-ss_load_classes_인스턴스명.txt" 파일에
"클래스명, 클래스로더" 포멧으로 로깅된다.
- logging.loading.class.list.ignore.pattens
클래스 목록에 로깅하지 않을 패턴을 설정한다.
패키지명의 prefix 형태의 패턴을 등록하며 에이전트 환경설정 파일을 열어 직접 편집해야 한다.
- logging.performancelog.enable
성능정보를 파일로 로깅할지 여부를 설정한한다.
□ | 로그 관리 |
Agent는 크게 4가지 종류의 로그가 있으며 이중 Dump 로그는 콘솔에서 조회가 가능하다.
설 명 |
디렉터리 |
Access Log |
$ELEVISOR_HOME/log/access/<AGENT_NAME>_access_yyyymmdd.log |
Agent Log |
$ELEVISOR_HOME/log/access/<AGENT_NAME>_yyyymmdd_hhmiss.log |
Dump Log |
$ELEVISOR_HOME/log/yyyymmdd_hhmiss_<AGENT_NAME>_service.dmp $ELEVISOR_HOME/log/yyyymmdd_hhmiss_<AGENT_NAME>_thread.dmp |
Class Log |
$ELEVISOR_HOME/log/yyyy-mm-dd_hh-mi-ss_load_classes_<AGENT_NAME>.txt |
performance Log |
$ELEVISOR_HOME/log/<HOSTNAME>_<AGENT_NAME>_perf_yyyy-mm-dd.log |