75
[email protected] SCOUTER commiter Gunhee Lee Open Source APM SCOUTER Basics & in Practice

Opensource APM SCOUTER in practice

Embed Size (px)

Citation preview

Page 1: Opensource APM SCOUTER in practice

[email protected]�commiter

Gunhee Lee

Open�Source�APMSCOUTER

Basics�&�in�Practice

Page 2: Opensource APM SCOUTER in practice

이건희 ­ 그분은 아닙니다.

LG�CNS�software�architectLG�CNS�APM�개발자Scouter�commiterKOSSA�오픈프론티어

발표자 소개

그래서 구글서 검색 안됨

Page 3: Opensource APM SCOUTER in practice

UXMNMS

EMS

SMS

Profiler

APMDatabase�Mon.

Intranet&�Security

Gateway&�FirewallBrowser

Network

Web�ServerWeb�App.

External�Org.

SSO

DB

System�performance�monitoring

Page 4: Opensource APM SCOUTER in practice

Why�APM?

왜 어플리케이션 모니터링이필요한가?

System�performance�monitoring

Page 5: Opensource APM SCOUTER in practice

대부분의 문제 원인은Application�!

System�performance�monitoring

Page 6: Opensource APM SCOUTER in practice

문제의 식별 - 어플리케이션 모니터링문제의 해결 - 어플리케이션 튜닝

결국 문제의 원인을 찾는 것이 중요

System�performance�monitoring

Page 7: Opensource APM SCOUTER in practice

아는 만큼 보이고보이는 만큼 개선할 수 있다.

- By�유명인 -

System�performance�monitoring

Page 8: Opensource APM SCOUTER in practice

몰라도 보이고 ~보이는 만큼 개선할 수 있다.

- By�Scouter -

(SCOUTER를 조금만 알면)

System�performance�monitoring

Page 9: Opensource APM SCOUTER in practice

Scouter�Basics

Page 10: Opensource APM SCOUTER in practice

APM

- Application�performancemanagement

SCOUTER?

Page 11: Opensource APM SCOUTER in practice

아키텍처는? Agent,�Collector,�ClientWAS

Java Agent

WEBapplication

Host�Agent

ScouterCollectorServer

성능 정보 전송

성증정보 수집

ScouterClient성능정보

요청

SCOUTER?

Page 12: Opensource APM SCOUTER in practice

SCOUTER?

Page 13: Opensource APM SCOUTER in practice

Object

Alert

Active�Service

CPU

Visitor

Throughput

Elapsed

Heap

XLOG

Active�service�Top

Today�call�count

Active�speed

Page 14: Opensource APM SCOUTER in practice

(Java)�Application�Problems

Unhandled�Exception

Slow�query�/�Slow�external�call

Thread�hang

Inefficient�logic�

Object�Leak�/�Unclosed�resource

Out�of�memorySlow�transaction

Page 15: Opensource APM SCOUTER in practice

1.�Slow�transaction

Logic

Logic

Very�long�time�Database�Query

Request

Response

Page 16: Opensource APM SCOUTER in practice

1.�Slow�transaction

Active�Service

Page 17: Opensource APM SCOUTER in practice

1.�Slow�transaction

Active�Service

Page 18: Opensource APM SCOUTER in practice

1.�Slow�transaction

XLOG

Page 19: Opensource APM SCOUTER in practice

1.�Slow�transaction

Profile

Page 20: Opensource APM SCOUTER in practice

2.�Thread�hang

Requests Threads

Locked

Very�very�very�very�slow

Blocked

Very�very�slow

Page 21: Opensource APM SCOUTER in practice

2.�Thread�hang

Object�request�>�Thread�List

Object�request�>�Thread�Dump

Page 22: Opensource APM SCOUTER in practice

2.�Thread�hang

Thread�List

Page 23: Opensource APM SCOUTER in practice

2.�Thread�hang

Thread�Dump

Page 24: Opensource APM SCOUTER in practice

3.�Out�of�memory

정말 싫다…

Memory�leak�으로 발생

대량건 조회

기타… (버퍼링 없는 Big�file�처리…)

Page 25: Opensource APM SCOUTER in practice

3.�Out�of�memory

Heap�usedObject�req.�>�Heap�HistogramObject�req.�>�Heap�dumpToo�many�record�exception

-->�10,000�건 초과시

Page 26: Opensource APM SCOUTER in practice

4.�Resource�leak

Get�Connection

Connection�Pool

Release�connection

excecuteexcecuteexcecute

Missing�!

Page 27: Opensource APM SCOUTER in practice

4.�Resource�leak

Connection�leakStatement�leakResulteSet leak

Hang�!OOM�!

Page 28: Opensource APM SCOUTER in practice

4.�Resource�leak

SCOUTER Options

Page 29: Opensource APM SCOUTER in practice

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

Page 30: Opensource APM SCOUTER in practice

5.�Inefficient�Logic�/�Logic�outside�of�app.

SFA�(�Stack�frequency�analyzer�)RequestProcessing

Thread�Dump

5sec 5sec 5sec

• Top�stack�frequency• Top-down�analysis

Page 31: Opensource APM SCOUTER in practice

서비스 아키텍처- SOA- MSA

6.�SCOUTER�for�service�architecture

Page 32: Opensource APM SCOUTER in practice

6.�SCOUTER�for�service�architecture

Page 33: Opensource APM SCOUTER in practice

관계의 복잡성으로 인한 문제.

6.�SCOUTER�for�service�architecture

Page 34: Opensource APM SCOUTER in practice

관계의 복잡성으로 인한 문제.

대표적으로 Cascading�failure

6.�SCOUTER�for�service�architecture

Page 35: Opensource APM SCOUTER in practice

Cascading�failure

Ref.� https://github.com/Netflix/Hystrix/wiki

6.�SCOUTER�for�service�architecture

Page 36: Opensource APM SCOUTER in practice

Cascading�failure

Ref.� https://github.com/Netflix/Hystrix/wiki

6.�SCOUTER�for�service�architecture

Page 37: Opensource APM SCOUTER in practice

Cascading�failure

Ref.� https://github.com/Netflix/Hystrix/wiki

6.�SCOUTER�for�service�architecture

Page 38: Opensource APM SCOUTER in practice

내꺼 인듯내꺼 아닌내꺼 같은 장애…

6.�SCOUTER�for�service�architecture

Page 39: Opensource APM SCOUTER in practice

필요한 것은?

6.�SCOUTER�for�service�architecture

Page 40: Opensource APM SCOUTER in practice

필요한 것은

개발에선 Anti-fragile�patterns모니터링에선 Cross�Service�Tracing

6.�SCOUTER�for�service�architecture

Page 41: Opensource APM SCOUTER in practice

Cross�service�tracing6.�SCOUTER�for�service�architecture

Page 42: Opensource APM SCOUTER in practice

Demo�#1Q&A�#1

Page 43: Opensource APM SCOUTER in practice

Scouter�In�Practice

Page 44: Opensource APM SCOUTER in practice

Simple�Scripting�PluginBuilt-in�plugin

Scouter�Plugin

Page 45: Opensource APM SCOUTER in practice

1)�Agent�Plugin

2) Collector�server�Plugin

Scripting�Plugin

Http�Service�pluginHttp�Call�PluginCapture(parameter,�return�value)…

Page 46: Opensource APM SCOUTER in practice

Agent�Plugin을 통한 사용자ID�프로파일

Java�Agent�­ Http�service�plugin

1.�세션에서 user�id�획득String�userId =

$req.getSessionAttribute(“userId”);

Page 47: Opensource APM SCOUTER in practice

Java�Agent�­ Http�service�plugin

2.�XLog 항목에 id로 추가$ctx.login(userId);

Agent�Plugin을 통한 사용자ID�프로파일

Page 48: Opensource APM SCOUTER in practice

Java�Agent�­ Http�service�plugin

3.�Profile에 사용자 정의 문장 기입$ctx.profile(“Login�ID�=�”�+�userId);

Agent�Plugin을 통한 사용자ID�프로파일

Page 49: Opensource APM SCOUTER in practice

$ctx.login(userId);

$ctx.profile(“###�It’s�user�defined�…”�+�userId);

Agent�Plugin을 통한 사용자ID�프로파일

데모!

Page 50: Opensource APM SCOUTER in practice

Agent�Plugin을 통한 Parameter�debugging

Page 51: Opensource APM SCOUTER in practice

Agent�Plugin을 통한 Parameter�debugging

A서비스가 가끔 에러가 발생하거나 느려지는데…파라미터 확인만 되면 해결할 수 있을 듯…근데 로깅 불가… 재기동 불가…

Page 52: Opensource APM SCOUTER in practice

Agent�Plugin을 통한 Parameter�debugging

Capture�plugin+�hook_args_patterns+�redefine�class

Page 53: Opensource APM SCOUTER in practice

Agent�Plugin을 통한 Parameter�debugging

데모로 보자!

Page 54: Opensource APM SCOUTER in practice

사용자 요청을 받는 Front�Service에서1)�테넌트ID를 추출하여 프로파일 하고Backend�2)�Service로 호출시 테넌트ID를 전달하고 싶다.Backend�Service들 에서도3)�전달된 테넌트 ID를 프로파일 하고 지속적으로 전달하고 싶다.그리고 특정 프로파일 정보는 4)�자체 집계 시스템으로 모으고 싶다.

Plugin 활용사례

Page 55: Opensource APM SCOUTER in practice

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 활용사례

Page 56: Opensource APM SCOUTER in practice

Scouter-Alert-Telegram

Built-in�Plugin

Scouter-Influxdb

Page 57: Opensource APM SCOUTER in practice

Scouter-Alert-Telegram

https://github.com/scouter-project/scouter-plugin-server-alert-telegram

Telegram�Bot으로 Alert 전송

Page 58: Opensource APM SCOUTER in practice

Scouter-Alert-Telegram

Page 59: Opensource APM SCOUTER in practice

Influxdb-plugin

https://github.com/scouter-project/scouter-plugin-server-influxdb

성능 카운터를 Influxdb로 전송

Page 60: Opensource APM SCOUTER in practice

Influxdb-plugin

Influxdb ­ 시계열 database

Grafana ­ 시계열 대시보드 작성

Page 61: Opensource APM SCOUTER in practice

Influxdb-plugin

Scouter�->�InfluxDB ->�Grafana연동해 보기 참고 url

https://goo.gl/fSd8Dd

Page 62: Opensource APM SCOUTER in practice

Influxdb-plugin

Demohttp://demo.scouterapm.com:3000

Page 63: Opensource APM SCOUTER in practice

Influxdb-plugin

Demohttp://demo.scouterapm.com:3000

Page 64: Opensource APM SCOUTER in practice

Built-In�Plugin�제작

1. scouter.plugin.server 패키지로 시작2. Method�annotation�명시3.�jar로 만든 후 ./lib�디렉토리에 넣는다.

*�Dependency- scouter.common- scouter.server

Page 65: Opensource APM SCOUTER in practice

Built-In�Plugin�제작

Page 66: Opensource APM SCOUTER in practice

Built-In�Plugin�제작

Guide�문서https://github.com/scouter-

project/scouter/blob/master/scouter.document/main/Plugin-Guide.md

Page 67: Opensource APM SCOUTER in practice

질문 있으신가요?

Page 68: Opensource APM SCOUTER in practice

Application�모니터링Application�TuningPlugin- debugging,�사용자정의 프로파일- 다른 오픈소스와 결합, 확장

정리해 보자 !

Page 69: Opensource APM SCOUTER in practice

그리고..Plugin을 활용하여Centralized�logging�/�monitoring

물론 Application의 수정 없이…

SCOUTER의 확장

Page 70: Opensource APM SCOUTER in practice

조만간 …

slack-Pluginkafka-plugin�elasticsearch-Plugin

Redis-Agent

Page 71: Opensource APM SCOUTER in practice

올해안에 가능하면 …

Nodejs agent

Page 72: Opensource APM SCOUTER in practice

SCOUTER가 하고 싶은 것

오픈 소스 중심의 통합 모니터링node.js(w/�express.js)Apache�HTTPD��Redis /�memcachedNoSQL(Mongo�DB…)��Opensource RDB�(Maria,�Cubrid…)Client�side�monitoring(script�error,�dom rendering)

Page 73: Opensource APM SCOUTER in practice

쉬운것 부터…

다양한 형태의 Contribution을 기다립니다~

매뉴얼Plugin간단한 Agent

Page 74: Opensource APM SCOUTER in practice

SCOUTER에 기여하기

Githubhttps://github.com/scouter-project/scouter

Facebook�사용자 모임https://www.facebook.com/groups/scouterapm

Page 75: Opensource APM SCOUTER in practice

감사합니다Q&A�or�Later

[email protected]