82
[email protected] SCOUTER commiter Gunhee Lee Monitoring application performance With scouter

Opensource apm scouter in practice

Embed Size (px)

Citation preview

Page 1: Opensource apm scouter in practice

[email protected]

SCOUTER commiter

Gunhee Lee

Monitoring application performance

With scouter

Page 2: Opensource apm scouter in practice

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

LG CNS software architect

LG CNS APM 개발자

Scouter commiter

KOSSA 오픈프론티어

제 10회 공개소프트웨어 대회 멘토

발표자 소개

그래서 구글서 검색 안됨

Page 3: Opensource apm scouter in practice

UXM NMS

EMS

SMS

Profiler

APM Database Mon.

Intranet

& Security

Gateway

& Firewall Browser Network

Web Server Web 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 performance

management

SCOUTER?

Page 11: Opensource apm scouter in practice

아키텍처는? Agent, Collector, Client

WAS

Java Agent

WEB

application

Host Agent

Scouter

Collector

Server

성능 정보 전송

성증정보 수집

Scouter

Client 성능정보

요청

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 memory

Slow 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 used

Object req. > Heap Histogram

Object req. > Heap dump

Too many record exception

--> 10,000 건 초과시

Page 26: Opensource apm scouter in practice

4. Resource leak

Get Connection

Connection Pool

Release connection

execute

execute

excecute

Missing !

Page 27: Opensource apm scouter in practice

4. Resource leak

Connection leak

Statement leak

ResulteSet 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 executions

evil 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 )

Request

Processing

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 tracing

6. SCOUTER for service architecture

Page 42: Opensource apm scouter in practice

Demo #1

Q&A #1

Page 43: Opensource apm scouter in practice

Scouter In Practice

Page 44: Opensource apm scouter in practice

Pulse is the platform for building

lightweight agent program

for many types of data

you want to enrich with Scouter.

Whether you’re interested in

system performance metrics.

Scouter PULSE

Page 45: Opensource apm scouter in practice

Http 프로토콜을 이용한 성능 카운터 수집 I/F

- 숫자로 이루어진 데이터의 수집

Scouter PULSE

Page 46: Opensource apm scouter in practice

- Pros

Scouter PULSE

- Cons

Simple한 Agent를 아주 쉽게 제작 가능

Http 사용가능한 Any 언어로~

전용 Protocol에 비해 부하 증가

( TCP/Binary <-> HTTP/JSON )

Page 47: Opensource apm scouter in practice

- Pros

Scouter PULSE

- Cons

Simple한 Agent를 아주 쉽게 제작 가능

Http 사용가능한 Any 언어로~

전용 Protocol에 비해 부하 증가

( TCP/Binary <-> HTTP/JSON )

Page 49: Opensource apm scouter in practice

- 활용 예시 #1

Scouter PULSE

Redis / Apache HTTPD 등의

perf stat 정보를 scouter로 전송하여 모니터링

- 활용 예시 #2

주요 Business 데이터를 Scouter로 전송하여 모니터링

Page 50: Opensource apm scouter in practice

# 데모로 봅시다 ~

Scouter PULSE

- 상품별 분당 주문량

- 상품별 일 누적 판매량

- 생방송 실시간 주문량

- 생방송 주문 실패

Page 51: Opensource apm scouter in practice

Simple Scripting Plugin

Built-in plugin

Scouter Plugin ******

Page 52: Opensource apm scouter in practice

1) Agent Plugin

2) Collector server Plugin

Scripting Plugin

Http Service plugin

Http Call Plugin

Capture(parameter, return value)

Page 53: Opensource apm scouter in practice

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

Java Agent – Http service plugin

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

$req.getSessionAttribute(“userId”);

Page 54: Opensource apm scouter in practice

Java Agent – Http service plugin

2. XLog 항목에 id로 추가

$ctx.login(userId);

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

Page 55: Opensource apm scouter in practice

Java Agent – Http service plugin

3. Profile에 사용자 정의 문장 기입

$ctx.profile(“Login ID = ” + userId);

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

Page 56: Opensource apm scouter in practice

$ctx.login(userId);

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

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

데모!

Page 57: Opensource apm scouter in practice

Agent Plugin을 통한 Parameter debugging

Page 58: Opensource apm scouter in practice

Agent Plugin을 통한 Parameter debugging

A서비스가 가끔 에러가 발생하거나 느려지는데…

파라미터 확인만 되면 해결할 수 있을 듯…

근데 로깅 불가… 재기동 불가…

Page 59: Opensource apm scouter in practice

Agent Plugin을 통한 Parameter debugging

Capture plugin

+ hook_args_patterns

+ redefine class

Page 60: Opensource apm scouter in practice

Agent Plugin을 통한 Parameter debugging

데모로 보자!

Page 61: Opensource apm scouter in practice

사용자 요청을 받는 Front Service에서

1) 테넌트ID를 추출하여 프로파일 하고

Backend 2) Service로 호출시 테넌트ID를 전달하고 싶다.

Backend Service들 에서도

3) 전달된 테넌트 ID를 프로파일 하고 지속적으로 전달하고 싶다.

그리고 특정 프로파일 정보는 4) 자체 집계 시스템으로 모으고 싶다.

Plugin 활용사례

Page 62: Opensource apm scouter in practice

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

Page 63: Opensource apm scouter in practice

Scouter-Alert-Telegram

Built-in Plugin

Scouter-Influxdb

Page 64: Opensource apm scouter in practice

Scouter-Alert-Telegram

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

Telegram Bot으로 Alert 전송

Page 65: Opensource apm scouter in practice

Scouter-Alert-Telegram

Page 66: Opensource apm scouter in practice

Influxdb-plugin

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

성능 카운터를 Influxdb로 전송

Page 67: Opensource apm scouter in practice

Influxdb-plugin

Influxdb – 시계열 database

Grafana – 시계열 대시보드 작성

Page 68: Opensource apm scouter in practice

Influxdb-plugin

Scouter -> InfluxDB -> Grafana

연동해 보기 참고 url

https://goo.gl/fSd8Dd

Page 70: Opensource apm scouter in practice

Influxdb-plugin

Demo

http://demo.scouterapm.com:3000

Page 71: Opensource apm scouter in practice

Built-In Plugin 제작

1. scouter.plugin.server 패키지로 시작

2. Method annotation 명시

3. jar로 만든 후 ./lib 디렉토리에 넣는다.

* Dependency - scouter.common

- scouter.server

Page 72: Opensource apm scouter in practice

Built-In Plugin 제작

Page 74: Opensource apm scouter in practice

질문 있으신가요?

Page 75: Opensource apm scouter in practice

Application 모니터링

Application Tuning

Plugin

- debugging, 사용자정의 프로파일

- 다른 오픈소스와 결합, 확장

정리해 보자 !

Page 76: Opensource apm scouter in practice

그리고..

Plugin을 활용하여

Centralized logging / monitoring

물론 Application의 수정 없이…

SCOUTER의 확장

Page 77: Opensource apm scouter in practice

조만간 …

kafka-plugin

elasticsearch-Plugin

Redis-Agent

Page 78: Opensource apm scouter in practice

올해안에 가능하면 …

Nodejs agent

Page 79: Opensource apm scouter in practice

SCOUTER가 하고 싶은 것

오픈 소스 중심의 통합 모니터링 node.js(w/ express.js)

Apache HTTPD

Redis / memcached

NoSQL(Mongo DB…) Opensource RDB (Maria, Cubrid…)

Client side monitoring(script error, dom rendering)

Page 80: Opensource apm scouter in practice

쉬운것 부터…

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

매뉴얼

Plugin

간단한 Agent

Page 81: Opensource apm scouter in practice

SCOUTER에 기여하기

Github https://github.com/scouter-project/scouter

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

Page 82: Opensource apm scouter in practice

감사합니다

Q&A or Later

[email protected]