Download - Opensource APM SCOUTER in practice
이건희 그분은 아닙니다.
LG�CNS�software�architectLG�CNS�APM�개발자Scouter�commiterKOSSA�오픈프론티어
발표자 소개
그래서 구글서 검색 안됨
UXMNMS
EMS
SMS
Profiler
APMDatabase�Mon.
Intranet&�Security
Gateway&�FirewallBrowser
Network
Web�ServerWeb�App.
External�Org.
SSO
DB
System�performance�monitoring
Why�APM?
왜 어플리케이션 모니터링이필요한가?
System�performance�monitoring
대부분의 문제 원인은Application�!
System�performance�monitoring
문제의 식별 - 어플리케이션 모니터링문제의 해결 - 어플리케이션 튜닝
결국 문제의 원인을 찾는 것이 중요
System�performance�monitoring
아는 만큼 보이고보이는 만큼 개선할 수 있다.
- By�유명인 -
System�performance�monitoring
몰라도 보이고 ~보이는 만큼 개선할 수 있다.
- By�Scouter -
(SCOUTER를 조금만 알면)
System�performance�monitoring
Scouter�Basics
APM
- Application�performancemanagement
SCOUTER?
아키텍처는? Agent,�Collector,�ClientWAS
Java Agent
WEBapplication
Host�Agent
ScouterCollectorServer
성능 정보 전송
성증정보 수집
ScouterClient성능정보
요청
SCOUTER?
SCOUTER?
Object
Alert
Active�Service
CPU
Visitor
Throughput
Elapsed
Heap
XLOG
Active�service�Top
Today�call�count
Active�speed
(Java)�Application�Problems
Unhandled�Exception
Slow�query�/�Slow�external�call
Thread�hang
Inefficient�logic�
Object�Leak�/�Unclosed�resource
Out�of�memorySlow�transaction
1.�Slow�transaction
Logic
Logic
Very�long�time�Database�Query
Request
Response
1.�Slow�transaction
Active�Service
1.�Slow�transaction
Active�Service
1.�Slow�transaction
XLOG
1.�Slow�transaction
Profile
2.�Thread�hang
Requests Threads
Locked
Very�very�very�very�slow
Blocked
Very�very�slow
2.�Thread�hang
Object�request�>�Thread�List
Object�request�>�Thread�Dump
2.�Thread�hang
Thread�List
2.�Thread�hang
Thread�Dump
3.�Out�of�memory
정말 싫다…
Memory�leak�으로 발생
대량건 조회
기타… (버퍼링 없는 Big�file�처리…)
3.�Out�of�memory
Heap�usedObject�req.�>�Heap�HistogramObject�req.�>�Heap�dumpToo�many�record�exception
-->�10,000�건 초과시
4.�Resource�leak
Get�Connection
Connection�Pool
Release�connection
excecuteexcecuteexcecute
Missing�!
4.�Resource�leak
Connection�leakStatement�leakResulteSet leak
Hang�!OOM�!
4.�Resource�leak
SCOUTER Options
5.�Inefficient�Logic�/�Logic�outside�of�app.
light�but�too�many�executionsevil�library�/�framework
checkLogging()� 1�ms
10s checkLogging()� 1�ms
checkLogging()� 1�ms
Biz()
Biz()
…
10,000�times�call
5.�Inefficient�Logic�/�Logic�outside�of�app.
SFA�(�Stack�frequency�analyzer�)RequestProcessing
Thread�Dump
5sec 5sec 5sec
• Top�stack�frequency• Top-down�analysis
서비스 아키텍처- SOA- MSA
6.�SCOUTER�for�service�architecture
6.�SCOUTER�for�service�architecture
관계의 복잡성으로 인한 문제.
6.�SCOUTER�for�service�architecture
관계의 복잡성으로 인한 문제.
대표적으로 Cascading�failure
6.�SCOUTER�for�service�architecture
Cascading�failure
Ref.� https://github.com/Netflix/Hystrix/wiki
6.�SCOUTER�for�service�architecture
Cascading�failure
Ref.� https://github.com/Netflix/Hystrix/wiki
6.�SCOUTER�for�service�architecture
Cascading�failure
Ref.� https://github.com/Netflix/Hystrix/wiki
6.�SCOUTER�for�service�architecture
내꺼 인듯내꺼 아닌내꺼 같은 장애…
6.�SCOUTER�for�service�architecture
필요한 것은?
6.�SCOUTER�for�service�architecture
필요한 것은
개발에선 Anti-fragile�patterns모니터링에선 Cross�Service�Tracing
6.�SCOUTER�for�service�architecture
Cross�service�tracing6.�SCOUTER�for�service�architecture
Demo�#1Q&A�#1
Scouter�In�Practice
Simple�Scripting�PluginBuilt-in�plugin
Scouter�Plugin
1)�Agent�Plugin
2) Collector�server�Plugin
Scripting�Plugin
Http�Service�pluginHttp�Call�PluginCapture(parameter,�return�value)…
Agent�Plugin을 통한 사용자ID�프로파일
Java�Agent� 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
Agent�Plugin을 통한 Parameter�debugging
데모로 보자!
사용자 요청을 받는 Front�Service에서1)�테넌트ID를 추출하여 프로파일 하고Backend�2)�Service로 호출시 테넌트ID를 전달하고 싶다.Backend�Service들 에서도3)�전달된 테넌트 ID를 프로파일 하고 지속적으로 전달하고 싶다.그리고 특정 프로파일 정보는 4)�자체 집계 시스템으로 모으고 싶다.
Plugin 활용사례
Plugin
Service(Back)ScouterAgent
Service(Back)ScouterAgent
Service(Front)ScouterAgent
Service(Back)ScouterAgent
<Http�Service�Plugin>1) Req.에서 테넌트ID�식별-- 프로파일링
<Http�Call�Plugin>2) Http�Call�헤더에테넌트 ID�추가
<Http�Service�Plugin>3) Http�헤더에서테넌트 ID�식별-- 프로파일에 반영
ScouterCollector성능정보수집
ApacheKafka
Legacy분석계
<Collector�Plugin>4) 테넌트 ID를 포함한프로파일을 Kafka로 전달
StOrm InfluxDB
RDB
Hbase
LegacyDashboard
Plugin 활용사례
Scouter-Alert-Telegram
Built-in�Plugin
Scouter-Influxdb
Scouter-Alert-Telegram
https://github.com/scouter-project/scouter-plugin-server-alert-telegram
Telegram�Bot으로 Alert 전송
Scouter-Alert-Telegram
Influxdb-plugin
https://github.com/scouter-project/scouter-plugin-server-influxdb
성능 카운터를 Influxdb로 전송
Influxdb-plugin
Influxdb 시계열 database
Grafana 시계열 대시보드 작성
Influxdb-plugin
Scouter�->�InfluxDB ->�Grafana연동해 보기 참고 url
https://goo.gl/fSd8Dd
Influxdb-plugin
Demohttp://demo.scouterapm.com:3000
Influxdb-plugin
Demohttp://demo.scouterapm.com:3000
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
질문 있으신가요?
Application�모니터링Application�TuningPlugin- debugging,�사용자정의 프로파일- 다른 오픈소스와 결합, 확장
정리해 보자 !
그리고..Plugin을 활용하여Centralized�logging�/�monitoring
물론 Application의 수정 없이…
SCOUTER의 확장
조만간 …
slack-Pluginkafka-plugin�elasticsearch-Plugin
Redis-Agent
올해안에 가능하면 …
Nodejs agent
SCOUTER가 하고 싶은 것
오픈 소스 중심의 통합 모니터링node.js(w/�express.js)Apache�HTTPD��Redis /�memcachedNoSQL(Mongo�DB…)��Opensource RDB�(Maria,�Cubrid…)Client�side�monitoring(script�error,�dom rendering)
…
쉬운것 부터…
다양한 형태의 Contribution을 기다립니다~
매뉴얼Plugin간단한 Agent
SCOUTER에 기여하기
Githubhttps://github.com/scouter-project/scouter
Facebook�사용자 모임https://www.facebook.com/groups/scouterapm
감사합니다Q&A�or�Later