6. •실시간 분포도
•다이나믹 프로파일링
•트랜잭션 추적
•장애의 진단과 분석
•성능 개선
•안정화
• CPU, 메모리 사용량
• DB 커넥션
• 파일 IO
• 동시 사용자
• 응답시간
• 실시간 처리 현황
서비스
모니터링
리소스
모니터링
Xlog와
트랜잭션
프로파일링
장애 분석 및
해결
9. 아래 링크를 통해 패키지 다운로드 후 압축 해제로 기본 설치
(모든 컴포넌트는 사전에 jdk 설치 필요)
https://github.com/scouter-project/scouter/release
server(collector) Agent가 전송한 데이터 수집/처리
agent.host OS의 CPU, Memory, Disk 등의 성능 정보 전송
agent.java 실시간 서비스 성능 정보, Heap Memory, Thread 등 Java 성능 정보
agent.java_6_7 For java6, java7
agent.batch 배치 잡 모니터링 참고
webapp rest api 독립 서버. server 에 embedded 로 실행 가능 참고
10. db_dir=/scouter/server/data/ # 수집 된 data 저장 경로
log_dir=/scouter/server/logs/ # log directory
net_udp_listen_port=6100 # udp port
net_tcp_listen_port=6100 # tcp port
–Xms2048m –Xmx2048m # 서버 환경에 맞는 메모리 설정 default -Xmx512m
스카우터 서버의 기동과 중지
$scouter_home/server/startup.sh
$scouter_home/server/stop.sh
프로세스 상태 확인
# ps ax | grep scouter-server | grep -v grep
6927 ? Sl 43:48 java -Xmx512m -classpath ./scouter-server-boot.jar scouter.boot.Boot ./lib
11.
12. net_collector_ip=127.0.0.1 # Collector의 IP
net_collector_udp_port=6100 # Collector 서버 udp port
Net_collector_tcp_port=6100 # Collector 서버 tcp port
cpu_warning_pct=80 # CPU 경고 임계치
cpu_fatal_pct=85 # CPU 에러 임계치
cpu_check_period_ms=60000 # CPU 감시 주기 (ms)
cpu_fatal_history=3 # CPU 알람 누적 카운트
cpu_alert_interval_ms=300000 # CPU 알람 주기 (ms)
disk_warning_pct=88 # CPU 경고 임계치 (%)
disk_fatal_pct=92 # CPU 에러 임계치 (%)
스카우터 서버의 기동과 중지
# cd scouter_home/server/agent.host/
# ./host.sh
# ./stop.sh
프로세스 상태 확인
# ps ax | grep scouter.host | grep -v grep
24780 ? Sl 13:54 java -classpath ./scouter.host.jar scouter.boot.Boot ./lib
13. obj_name=tomcat_1 # 감시 대상 서버 별칭
net_collector_ip=127.0.0.1 # Collector의 IP
net_collector_udp_port=6100 # Collector udp Listen port
net_collector_tcp_port=6100 # Collector tcp Listen port
hook_method_patterns=sample.mybiz.*Biz.*,sample.service.*Service.*
trace_http_client_ip_header_key=X-Forwarded-For
profile_spring_controller_method_parameter_enabled=false
hook_exception_class_patterns=my.exception.TypedException
profile_fullstack_hooked_exception_enabled=true
hook_exception_handler_method_patterns=my.AbstractAPIController.fallbackHandler,my.ApiExceptionLoggingFilter.handleNotFound
ErrorResponse
hook_exception_hanlder_exclude_class_patterns=exception.BizException
14. Tomcat catalina.sh
export AGENT_HOME="/scouter_home/agent.java/“ # the location of scouter.agent.jar
if [ "$1" = "start" -o "$1" = "run" ]; then
export JAVA_OPTS="$JAVA_OPTS -javaagent:$AGENT_HOME/scouter.agent.jar"
export JAVA_OPTS="$JAVA_OPTS -Dscouter.config=$AGENT_HOME/conf/scouter.conf"
fi
JBoss env.sh
export JAVA_OPTS=" $JAVA_OPTS -Djboss.modules.system.pkgs=org.jboss.byteman,scouter"
export JAVA_OPTS=" $JAVA_OPTS -Dscouter.config=/scouter_home/agent.java/conf/jboss63.conf"
export JAVA_OPTS=" $JAVA_OPTS -javaagent:/ scouter_home /agent.java/scouter.agent.jar"
# ps ax | grep java
4190 ? Sl 22:28 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat_1//conf/logging.properties -
Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -javaagent:/home/kho625/scouter/agent.java//scouter.agent.jar -
Dscouter.config=/home/kho625/scouter/agent.java//conf/scouter.conf -Djdk.tls.ephemeralDHKeySize=2048 -
Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -
classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat_1/ -Dcatalina.home=/usr/local/tomcat -
Djava.io.tmpdir=/usr/local/tomcat_1//temp org.apache.catalina.startup.Bootstrap star
독립 실행이 아닌 WAS 실행 시 attach 되어 실행
15. 아래 링크를 통해 패키지 다운로드
(사전에 jdk 설치 필요, scouter.client 중 모니터링 PC 환경에 맞는 버전으로 다운)
https://github.com/scouter-project/scouter/release
윈도우의 경우 scouter.exe 실행
16. 1. 서버 접속 (collector IP:TCP port)
default 계정정보 (admin/admin)
2. 실행 완료 초기 화면
19. 무엇을 모니터링 할 것인가?
J2EE 시스템 운영 상태 모니터링을 위해 필요한 각종 데이터를 서로 유기적으로 배치/제공하며,
유기적으로 배치된 시스템 상태에 대한 빠른 판단 및 효과적인 제어를 도움.
시스템 사용자 정보
• 통신 단말 사용자 수
• 방문자 수
• 액티브 사용자 수
시스템 처리 상태
• 초당 처리 건수
• 시간당 호출 건수
• 평균 응답시간
자원상태
• 시스템 Memory, CPU 사용량
• JVM CPU 사용량
• Heap 메모리 사용량
장애/에러
• 시스템 장애
• 프로그램 에러
25. 대시보드 정보
임계치에 대한 알람 발생시 이를 감지, 해당 이벤트
를 슬랙, 텔레그램, E-mail 등을 통해 관리자에게 알림으로써
빠른 장애조치를 도움.
26. 대시보드 정보
액티브 서비스 : Java 애플리케이션이 현재 처리중인 트랜잭션
화면을 통해 사용자는 현 시점의 Java 어플리케이션 내부의
액티브 서비스 스냅 샷 정보를 확인할 수 있다.
trace_
activeserivce_
yellow_time
3000
Active
Thread
Warning
Time(ms)
trace_
activeservice_
red_time
8000
Active
Thread Fatal
Time(ms)
32. 대시보드 정보
개별 트랜잭션의 응답시간(ELAPSED) 뿐만 아니라,
CPU소요시간. 응답시간 등의 값을 세로축으로 하고,
그 값을 시간의 변화(가로축)에 따라 점 형태의 분포도로 표현
33. Xlog 상세 정보
Xlog 화면 설명 안내 링크
Xlog Filter 원하는 조건의 XLog 점들만 보여지도록 하는 기능
only SQL SQL을 수행한 Xlog만 필터링
only API call 외부호출을 수행한 Xlog만 필터링
only error Error가 발생한 Xlog만 필터링
Search Xlog
38. Performance Counter 시간에 따라 변하는 값을 실시간 차트 형태로 보여 줌 (시계열 성능 메트릭)
Object Request 원하는 시점에 사용자가 각 Object들의 특정 정보를 리스트 형태로 보여줌
대시보드 화면구성 – 차트의 종류
39. HOST(OS) 모니터링
HOST > Performance Counter
항 목 단 위 설 명
CPU % CPU 사용률
Memory | ActualUsed MB 실제 사용 메모리
Memory | Available MB 사용 가능 메모리
Memory | Total MB 전체 메모리
Memory % Host 별 메모리 사용률
Net | CLOSE_WAIT Cnt CLOSE 대기
Net | ESTABLISHED Cnt ESTABLISED 된 Connection 수
Net | FIN_WAIT Cnt FIN_WAIT 상태 Connection 수
Net | InBound Cnt InBound 패킷 수
Net | OutBound Cnt OutBound 패킷 수
Net | TIME_WAIT cnt TIME_WAIT 상태의 Connection 수
Swap | PageIn Page Swap 파일에 write한 Page 수
Swap | PageOut Page Swap 파일에 read한 Page 수
Swap | Total MB Swap 메모리 사이즈
Swap | Used MB Swap 메모리 사용량
Swap % Host 별 Swap 메모리 사용률
40. HOST(OS) 모니터링
HOST > Object request
항 목 설 명
Env OS의 환경변수 조회
Top 요청 시점의 Process 조회
Disk Usage Disk 사용량 조회
41. JAVA 모니터링
java > Performance Counter
항 목 단 위 설 명
Active Service Cnt 현재 처리중인 서비스 개수
Elapsed 90% Ms 상위 90% 서비스의 평균 응답시간
Elapsed Time ms 평균 응답시간
Error Rate % 에러가 발생한 서비스 비율
GC Count Cnt Garbage Collection 횟수
GC Time ms GC 수행에 소요된 시간
Heap Used Ms Heap 메모리 사용량
Perm % % Permanent Generation 사용 비율
Perm Used Mb Permanent Generation 사용량
ProcessCpu % JVM 프로세스 CPU 사용률
Recent User cnt 최근 5분 동안 방문한 Unique 사용자 수
Service Count cnt/min 서비스 호출 건수
TPS Tps 초당 트랜잭션 처리 건수
Heap Memory MB Heap 메모리 사용률 통계
Active Service EQ 실행 중인 서비스 이퀄라이저
Active Service Vertical EQ 실행 중인 서비스 가상 이퀄라이저
Active Service List 현재 실행중인 서비스 목록
Active Speed 현재 실행중인 서비스 속도
XLog sec 트랜잭션 수행 지표
24H Service Count cnt/min 24시간 서비스 호출 건수
Today Visitor 금일 방문자 수
Summary 요약정보
42. JAVA 모니터링
java > Object Request
항 목 설 명
Thread List 해당 Java Process의 Thread 목록
Active Service List 요청 시점에 실행중인 Service 목록
Loaded Class List
로드한 Class의 목록을 보여 줌
변경한 Hooking 옵션을 Runtime에 적용하기 위해 Class를
Redefine 하는 기능을 제공
Heap Histogram Heap Histogram을 보여줌
Thread Dump Thread Dump를 보여줌
Env JVM 의 환경변수를 조회
Socket 해당 Process에서 연결한 Socket의 정보를 보여줌
System.GC System.GC()를 호출
Heap Dump Heap dump를 생성
File Dump 위 기능들을 수행 하여 파일로 저장
45. 서비스 연계 추적
http로 요청하는 서비스간 연결 추적이 가능
/agent.java/conf/scouter.conf 수정 필요
trace_interservice_enabled=true
추적 방법
1. XLog List에서 transaction 확인.
2. transaction의 txid를 선택하여 서비스 호출 연계 내용확인.
3. 서비스 연계 내용을 확인 후 그 하위의 연계를 확인하기를 원한다면, 해당
transaction의 call 연계 부분을 클릭하여 이후 서비스 연계를 확인 가능.
46. Service Dump
응답 지연과 같은 성능 장애 발생 시
상황 파악을 위한 Thread Dump 제공
(Multi thread 환경에서 thread 상태를
확인 하기 위해 사용)
47.
48. Scouter Plugin
Scouter 를 확장 가능하게 만들어주는 Plugin의 기능을 통하여, 특정 데이터를 선처리 하거나
업무적으로 의미 있는 데이터를 Xlog나 프로파일에 추가 가능
제공되는 Plugin 목록
Sample
scouter-plugin-server-null : 수집데이터를 단순히 출력해 주는 sample plugin
Alert
scouter-plugin-server-email : Scouter에서 발생하는 alert를 email로 전송
scouter-plugin-server-telegram : Scouter에서 발생하는 alert를 telegram으로 전송
scouter-plugin-server-slack : Scouter에서 발생하는 alert를 slack으로 전송
그 외 line, dingtalk 연동 가능
Counter
scouter-plugin-server-influxdb : Scouter의 성능 counter 데이터를 시계열 DB인 influxDB로 연동
49. Scouter Plugin
Scouter 를 확장 가능하게 만들어주는 Plugin의 기능을 통하여, 특정 데이터를 선처리 하거나
업무적으로 의미 있는 데이터를 Xlog나 프로파일에 추가 가능
현재 지원되는 Alert의 종류
Agent의 CPU (warning / fatal)
Agent의 Memory (warning / fatal)
Agent의 Disk (warning / fatal)
신규 Agent 연결
Agent의 연결 해제
Agent의 재접속
응답시간의 임계치 초과
GC Time의 임계치 초과
Thread 갯수의 임계치 초과
50. E-mail 연동
Scouter Server Plugin 형태로 Email을 통해서 Alert 메시지를 Email으로 전송하는 기능
https://github.com/scouter-contrib/scouter-plugin-server-alert-email.git
, ons-email-1.4.jar
• Javax.mail-1.5.2.jar
소스 코드 빌드 후 target dir/lib 하위에 아래 라이브러리와 함께
activation-1.1.1.jar, commons-email-1.4.jar, javax.mail-1.5.2.jar
scouter-plugin-server-alert-email-1.X.X.jar 파일을 $scouter_HOME/server/lib
51. E-mail 연동
server/conf/scouter.conf 설정 가이드
, ons-email-1.4.jar
• Javax.mail-1.5.2.jar
ext_plugin_email_send_alert Email 발송 여부 (true / false) - 기본 값은 false
ext_plugin_email_debug 로깅 여부 - 기본 값은 false
ext_plugin_email_level 수신 레벨(0 : INFO, 1 : WARN, 2 : ERROR, 3 : FATAL) - 기본 값은 0
ext_plugin_email_smtp_hostname SMTP 서버의 IP 또는 Domain - 기본 값은 smtp.gmail.com
ext_plugin_email_smtp_port SMTP Port - 기본 값은 587
ext_plugin_email_smtpauth_enabled SMTP 인증 사용 여부 - 기본 값은 true
ext_plugin_email_username Email 사용자 계정
ext_plugin_email_password Email 사용자 비밀번호
ext_plugin_email_ssl_enabled SSL 사용 여부 - 기본 값은 true
ext_plugin_email_starttls_enabled STARTTLS 사용 여부 - 기본 값은 true
ext_plugin_email_from_address Email 발신자 계정
ext_plugin_email_to_address Email 수신 계정(다중 사용자 지정 시 ',' 구분자 사용)
ext_plugin_email_cc_address Email 참조 수신 계정(다중 사용자 지정 시 ',' 구분자 사용)
52. E-mail 연동
server/conf/scouter.conf 설정 가이드
, ons-email-1.4.jar
• Javax.mail-1.5.2.jar
ext_plugin_elapsed_time_threshold
응답시간의 임계치 (ms) - 기본 값은 0으로, 0일때 응답시간의 임계치 초과 여부를 확인하지 않는다.
ext_plugin_gc_time_threshold
GC Time의 임계치 (ms) - 기본 값은 0으로, 0일때 GC Time의 임계치 초과 여부를 확인하지 않는다.
ext_plugin_thread_count_threshold
Thread Count의 임계치 - 기본 값은 0으로, 0일때 Thread Count의 임계치 초과 여부를 확인하지 않는다.
ext_plugin_ignore_name_patterns
Alert 메시지 발송에서 제외할 NAME 패턴 목록 (',' 구분자 사용, * (wildcard) 사용 가능)
ext_plugin_ignore_title_patterns
Alert 메시지 발송에서 제외할 TITLE 패턴 목록 (',' 구분자 사용, * (wildcard) 사용 가능)
ext_plugin_ignore_message_patterns
Alert 메시지 발송에서 제외할 MESSAGE 패턴 목록 (',' 구분자 사용, * (wildcard) 사용 가능)
ext_plugin_ignore_continuous_dup_alert
연속된 동일 Alert을 1시간 동안 제외 - 기본 값은 false
54. ElasticSearch 연동
Scouter Server Plugin 형태로 성능 counter 정보 와 XLOG 정보를 ElasticSearch 로 전송
, ons-email-1.4.jar
• Javax.mail-1.5.2.jar
55. ElasticSearch 연동 설정
ext_plugin_es_enabled = true # elasticsearch 연동 plugin 사용 여부
ext_plugin_es_counter_index = scouter-counter # elasticsearch counter index 명
ext_plugin_es_xlog_index scouter-xlog # elasticsearch xlog index 명
ext_plugin_ex_duration_day = 90 # elasticsearch index 저장 기간
ext_plugin_es_https_enabled = https 사용 여부 (default : http 사용)
ext_plugin_es_cluster_address = http target(elasticsearch) address (default : 127.0.0.1:9200)
엘라스틱서치를 클러스터의 경우 콤마로 구분 ex) 127.0.0.1:9200,127.0.0.1:9201
ext_plugin_es_id = (default : empty)
ext_plugin_es_password = (default : empty)
Deploy
https://github.com/scouter-contrib/scouter-plugin-server-elasticsearch.git
소스 코드 빌드 후 target에 생성 되는 scouter-plugin-server-elasticsearch-x.x.x.jar 와 target/lib에 생
성되는 전체 library를 $scouter_HOME/server/lib 저장하고 scouter server를 재시작.