SlideShare a Scribd company logo
1 of 63
Download to read offline
Gunhee Lee
SCOUTER commiter
gunlee01@gmail.com
Scouter
Tutorial & Sprint
이건희 ­ 그분은 아닙니다.
소 개 생 략 !
그래서 구글서 검색 안됨
- 설치 및 실행
- 화면 구성 및 기본 조작
- Perspective를 통한 대시보드 구성과 Tip
- plugin : java agent
- plugin : server
- 사용자 정의 알람
이야기 할 것 (1부) - 튜토리얼
- Scouter 개발환경 구성 (사전 준비)
- Scouter 소스의 대략적인 구성
- Server Plugin 소스 분석
- Web api 소스 분석
이야기 할 것 (2부) - 스프린트
아키텍처는? Agent, Collector, Client
WAS
Java Agent
WEB

application
Host Agent
Scouter
Collector
Server
성능 정보 전송
성증정보 수집
Scouter
Client성능정보
요청
SCOUTER
Scouter 설치 및 실행
# wget https://github.com/scouter-project/scouter/releases/download/
v1.7.3.1/scouter-all-1.7.3.1.tar.gz
# tar -xvzf scouter*
# cd scouter.server
# ./startup.sh
대략 이런식 …
Scouter 설치 및 실행
걍 블로그 보고 따라하면 됩니다.
https://goo.gl/Sydxhb
Scouter 설치 및 실행
여기서는 데모 시스템으로 설치해 봅니다.
https://goo.gl/YHoJS9
화면 구성 및 기본 조작
Object
Alert
Active Service
CPU
Visitor
Throughput
Elapsed
Heap
XLOG
Active service Top
Today call count
Active speed
화면 구성 및 기본 조작
Active Service
화면 구성 및 기본 조작
Active Service
화면 구성 및 기본 조작
XLog
화면 구성 및 기본 조작
Profile
화면 구성 및 기본 조작
Object View
performance counter
Object request
화면 구성 및 기본 조작
Object View와
성능 counter
화면 구성 및 기본 조작
Object request
Perspective
obj type & obj family
Scouter는 obj_type 별로 차트를 보여준다.(일종의 그루핑)
- obj_type은 설정에서 수정 가능
obj_family는 모니터링 대상의 종류이다.
obj type & obj family
복수개의 시스템을
하나의 수집서버로
모니터링 하는 경우
obj_type을 각각
설정하여
perspective를
구성할 수 있다.
https://goo.gl/pN13m8
Scouter In Practice
- Scouter Plugin
Scouter Plugin
WAS
Java Agent
WEB

application
Scouter
Collector
Server
Scripting

plugin
Built-in

plugin
Scripting plugin
WAS
Java Agent
WEB

application
Scripting

plugin
- http service plugin
http의 요청 시작 & 끝
- http call plugin
http client로 원격 서비스 호출시
- capture plugin
지정한 메소드의 시작 & 끝
Agent Plugin을 통한 사용자ID 프로파일
Http service plugin
1. 세션에서 user id 획득
String userId =

$req.getSessionAttribute(“userId”);
Java Agent ­ Http service plugin
2. XLog 항목에 id로 추가
$ctx.login(userId);
Agent Plugin을 통한 사용자ID 프로파일
Java Agent ­ Http service plugin
3. Profile에 사용자 정의 문장 기입
$ctx.profile(“Login ID = ” + userId);
Agent Plugin을 통한 사용자ID 프로파일
$ctx.login(userId);
$ctx.profile(“### It’s user defined …” + userId);
Agent Plugin을 통한 사용자ID 프로파일
Agent Plugin을 통한 Parameter debugging
Agent Plugin을 통한 Parameter debugging
A서비스가 가끔 에러가 발생하거나 느려지는데…
파라미터 확인만 되면 해결할 수 있을 듯…
근데 로깅 불가… 재기동 불가…
Agent Plugin을 통한 Parameter debugging
Capture plugin
+ hook_args_patterns
+ redefine class
Built-in Plugin (Server plugin)
WAS
Java Agent
WEB

application
Scouter
Collector
Server
Scripting

plugin
Built-in

plugin
Scouter-Alert-Telegram
Built-in Plugin (Server plugin)
Scouter-Influxdb
Scouter-Alert-Slack
Scouter-Alert-line
Scouter-Alert-email
Agent Plugin 설치 및 시연
https://github.com/scouter-project/scouter-plugin-server-
alert-line/releases
Scouter-Alert-line
모든 파일을 scouter.server/lib 에 복사
Influxdb-plugin
https://github.com/scouter-project/scouter-plugin-server-influxdb
성능 카운터를 Influxdb로 전송
Influxdb-plugin
Scouter -> InfluxDB -> Grafana
연동해 보기 참고 url
https://goo.gl/fSd8Dd
Influxdb-plugin
Built-In Plugin 제작
1. scouter.plugin.server 패키지로 시작
2. Method annotation 명시
3. jar로 만든 후 ./lib 디렉토리에 넣는다.
* Dependency
- scouter.common
- scouter.server
Built-In Plugin 제작
Built-In Plugin 제작
Guide 문서
https://github.com/scouter-project/scouter/blob/master/
scouter.document/main/Plugin-Guide.md
Plugin
Service
(Back)
Scouter
Agent
Service
(Back)
Scouter
Agent
Service
(Front)
Scouter
Agent
Service
(Back)
Scouter
Agent
<Http Service Plugin>
1) Req.에서 테넌트ID 식별
-- 프로파일링
<Http Call Plugin>
2) Http Call 헤더에
테넌트 ID 추가
<Http Service Plugin>
3) Http 헤더에서
테넌트 ID 식별
-- 프로파일에 반영
Scouter
Collector성능정보수집
Apache
Kafka
Legacy
분석계
<Collector Plugin>
4) 테넌트 ID를 포함한
프로파일을 Kafka로 전달
S
t
O
r
m
InfluxDB
RDB
Hbase
Legacy
Dashboard
Plugin 활용사례
사용자 정의 Alert (scripting 방식)
https://goo.gl/exg4fN
* 설정을 통한 alert
- cpu, disk 사용량 임계치 설정을 통한 alert
* Scripting을 통한 alert
- 모든 성능 counter에 대해 설정 가능
사용자 정의 Alert (scripting 방식)
@since 1.8.0
사용자 정의 Alert (scripting 방식)
사용자 정의 Alert (scripting 방식)
사용자 정의 Alert (scripting 방식)
* Alert 설정 시연
- CPU 임계치 초과시 Alert 하는 것
Web API 소개
Web API 소개
@since 1.8.0
curl 또는 http http://127.0.0.1:6188/scouter/v1/agent
curl 또는 http http://127.0.0.1:6188/scouter/v1/counter/realTime/Cpu,Mem/ofType/osx
curl 또는 http http://127.0.0.1:6188/scouter/v1/counter/realTime/HeapUsed/ofType/tomcat
SCOUTER에 기여하기
Github
https://github.com/scouter-project/scouter
Facebook 사용자 모임
https://www.facebook.com/groups/scouterapm
감사합니다
gunlee01@gmail.com
Scouter에 커밋하기
- Sprint 세션
소스 구성
scouter.common
scouter.server
scouter.agent.java
scouter.agent.host
scouter.webapp
scouter.client.*
hash & text
objHash : object의 unique id 값 (int)
hash : 특정 text db 값을 가르키는 id (int)
text : hash로 가져온 원본 값
e.g.) 10482034 -> /service/member/5
Pack
MapPack
XLogPack
…
package : scouter.lang.pack
Value
FloatValue
ListValue
MapValue
…
package : scouter.lang.value
Scouter Collection system
IntLongLinkedMap
IntFloatMap
LongSet
…
package : scouter.util
Scouter tcp services
CounterService
XLogService
…
package : scouter.server.netio.service.handle
Scouter web app 구성
controller -> service -> consumer
package : scouterx.webapp.layer
Scouter
Collector
Server
XXXService
@ServiceHandler
TcpProxy
Scouter web app 구성
controller
Scouter web app 구성
TcpProxy 를 통해 scouter.server로 서비스 요청
Pack getSingle(String cmd, MapPack param)
Value getSingleValue(String cmd, MapPack param)
List<Pack> process(String cmd, MapPack param)
List<Value> processValues(String cmd, MapPack param)
void process(String cmd, MapPack param, INetReader reader)
Scouter web app 구성
TcpProxy 를 통해 scouter.server로 서비스 요청
IDE에서 Scouter server 실행
* Main class
scouter.server.Main
* working directory
적당한 곳으로 설정 (하위에 database및 logs 등의 디렉토리 생성됨)
IDE에서 Scouter web app 실행
* Main class
scouterx.webapp.main.WebAppMain
* working directory
적당한 곳으로 설정 (server에 설정한 곳과 다른 곳으로)
CLA 작성
Contributor License agreement
작성 후 PR 요청 코멘트에 해당 링크를 포함 시킨다.
https://goo.gl/f7eQcT

More Related Content

What's hot

게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018 게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
Amazon Web Services Korea
 

What's hot (20)

[오픈소스컨설팅]J boss6 7_교육자료
[오픈소스컨설팅]J boss6 7_교육자료[오픈소스컨설팅]J boss6 7_교육자료
[오픈소스컨설팅]J boss6 7_교육자료
 
Spring Security
Spring SecuritySpring Security
Spring Security
 
OPENMARU APM 브로셔
OPENMARU APM 브로셔OPENMARU APM 브로셔
OPENMARU APM 브로셔
 
Bem methodology
Bem methodologyBem methodology
Bem methodology
 
서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해
 
Spring Security
Spring SecuritySpring Security
Spring Security
 
CloudFront와 S3를 이용한 컨텐츠 배포 전략 - 박현우 CTO, SMARTSTUDY
CloudFront와 S3를 이용한 컨텐츠 배포 전략 - 박현우 CTO, SMARTSTUDYCloudFront와 S3를 이용한 컨텐츠 배포 전략 - 박현우 CTO, SMARTSTUDY
CloudFront와 S3를 이용한 컨텐츠 배포 전략 - 박현우 CTO, SMARTSTUDY
 
마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기
 
ProxySQL on Kubernetes
ProxySQL on KubernetesProxySQL on Kubernetes
ProxySQL on Kubernetes
 
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
 
[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning
 
공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반
 
[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기
 
IBM Datapower Security Scenario with JWS & JWE
IBM Datapower Security Scenario with JWS & JWEIBM Datapower Security Scenario with JWS & JWE
IBM Datapower Security Scenario with JWS & JWE
 
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018 게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
 
State transfer With Galera
State transfer With GaleraState transfer With Galera
State transfer With Galera
 
Trace memory leak with gdb (GDB로 메모리 누수 찾기)
Trace memory  leak with gdb (GDB로 메모리 누수 찾기)Trace memory  leak with gdb (GDB로 메모리 누수 찾기)
Trace memory leak with gdb (GDB로 메모리 누수 찾기)
 
우아한 모노리스
우아한 모노리스우아한 모노리스
우아한 모노리스
 
Domain-Driven-Design 정복기 2탄
Domain-Driven-Design 정복기 2탄Domain-Driven-Design 정복기 2탄
Domain-Driven-Design 정복기 2탄
 
FIWARE Global Summit - NGSI-LD - NGSI with Linked Data
FIWARE Global Summit - NGSI-LD - NGSI with Linked DataFIWARE Global Summit - NGSI-LD - NGSI with Linked Data
FIWARE Global Summit - NGSI-LD - NGSI with Linked Data
 

Similar to Scouter Tutorial & Sprint

Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발
지수 윤
 
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
 구글 기술을 이용한 모바일 클라우드 애플리케이션 개발 구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
LGU+
 
How to contribute at OpenStack
How to contribute at OpenStackHow to contribute at OpenStack
How to contribute at OpenStack
SK Telecom
 

Similar to Scouter Tutorial & Sprint (20)

Opensource apm scouter in practice
Opensource apm scouter in practiceOpensource apm scouter in practice
Opensource apm scouter in practice
 
Opensource apm scouter in practice
Opensource apm scouter in practiceOpensource apm scouter in practice
Opensource apm scouter in practice
 
Opensource APM SCOUTER in practice
Opensource APM SCOUTER in practiceOpensource APM SCOUTER in practice
Opensource APM SCOUTER in practice
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 
Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발
 
텔레그램을 이용한 양방향 모니터링 시스템 구축
텔레그램을 이용한 양방향 모니터링 시스템 구축텔레그램을 이용한 양방향 모니터링 시스템 구축
텔레그램을 이용한 양방향 모니터링 시스템 구축
 
Pp3 devweb
Pp3 devwebPp3 devweb
Pp3 devweb
 
Bug sense 분석
Bug sense 분석Bug sense 분석
Bug sense 분석
 
2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread
2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread
2회 오픈소스 게임 서버 엔진 스터디 캠프 - CloudBread
 
ARTIK 710 IoT class 02
ARTIK 710 IoT class 02ARTIK 710 IoT class 02
ARTIK 710 IoT class 02
 
PHP Slim Framework with Angular
PHP Slim Framework with AngularPHP Slim Framework with Angular
PHP Slim Framework with Angular
 
혼자서 커뮤니티 귀동냥하며 만든 Next.js & Amplify & serverless framework 웹 플랫폼 서비스 구현(삽질) 후...
혼자서 커뮤니티 귀동냥하며 만든 Next.js & Amplify & serverless framework 웹 플랫폼 서비스 구현(삽질) 후...혼자서 커뮤니티 귀동냥하며 만든 Next.js & Amplify & serverless framework 웹 플랫폼 서비스 구현(삽질) 후...
혼자서 커뮤니티 귀동냥하며 만든 Next.js & Amplify & serverless framework 웹 플랫폼 서비스 구현(삽질) 후...
 
Angular 2 rc5 조사
Angular 2 rc5 조사Angular 2 rc5 조사
Angular 2 rc5 조사
 
Python on Android
Python on AndroidPython on Android
Python on Android
 
postgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdfpostgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdf
 
Kafka slideshare
Kafka   slideshareKafka   slideshare
Kafka slideshare
 
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
 구글 기술을 이용한 모바일 클라우드 애플리케이션 개발 구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
 
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다
 
How to contribute at OpenStack
How to contribute at OpenStackHow to contribute at OpenStack
How to contribute at OpenStack
 
[네이버오픈소스세미나] Pinpoint를 이용해서 서버리스 플랫폼 Apache Openwhisk 트레이싱하기 - 오승현
[네이버오픈소스세미나] Pinpoint를 이용해서 서버리스 플랫폼 Apache Openwhisk 트레이싱하기 - 오승현[네이버오픈소스세미나] Pinpoint를 이용해서 서버리스 플랫폼 Apache Openwhisk 트레이싱하기 - 오승현
[네이버오픈소스세미나] Pinpoint를 이용해서 서버리스 플랫폼 Apache Openwhisk 트레이싱하기 - 오승현
 

Scouter Tutorial & Sprint