21
서서서 서서서서 서서 서서 서서 Realtime Log Monitoring & Analytics Platform – Planet Mon 서 서서서서 서서 허허허 , System Software 허허허 , 2016.

서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 지탱하는 기술

Embed Size (px)

Citation preview

Page 1: 서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 지탱하는 기술

서비스 모니터링 구현 사례 공유

Realtime Log Monitoring & Analytics Platform – Planet Mon 을 지탱하는 기술

허제민 , System Software 개발팀 , 2016.

Page 2: 서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 지탱하는 기술

2

SK Planet Log 현황 (2016. 8. 18)

• 1 일 로그 수집 량• 30~50 억 건 (3~5 Billion lines)

• Web Access log 10 억 건 이상 , Application Log 20 억 건 이상• 2~5TB• 주요 서비스 – Syrup Wallet 10~20 억 건 , OCB – 1~3 억 건

• 수집 대상 서버 수 (agent 설치 서버 )• 전체 서버 7041 대 ( 일산 843 대 , 커머스 6198 대 )• Log 수집 중인 서버 – 1676 대 ( 일산 188 대 , 커머스 1488 대 )

• 실시간으로 Log 를 수집하고 있는 파일 수 – 7370 개

• 적용된 서비스• OCB, SyrupWallet, SyrupPay, Gifticon, SyrupStore, Syrup Table, Syrup Order, Syrup

Style, Syrup Fashion, Syrup AD, O2O Solution, API Management Platform, FIDO, Search, EventOne, 통합쿠폰서비스 , OneID, ATMOS, IMPAY, TCloud, TSmartsafe, DMP, PlaceDB, MarketingPlus…

Page 3: 서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 지탱하는 기술

3

Trend

Modern Log Monitoring & Analytics Platform• Log 기반 모니터링 - 중앙에서 실시간으로 각 서버의 Log 를 수집하고 분석하고 통합 뷰

제공 • Access Log, Application Log, 통합 Log Viewer• Pattern Alarm, Log Analytics, Visualizations

이미지 출처 - https://dzone.com/articles/getting-started-splunk 이미지 출처 - https://www.sumologic.com/

이미지 출처 - http://www.philipotoole.com/resume/loggly-ui/ 이미지 출처 - https://www.elastic.co/kr/blog/kibana-4-literally

Page 4: 서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 지탱하는 기술

4

Planet Mon (PMon)

SK Planet 전사 서비스 모니터링 플랫폼 https://pmon.skplanet.com/• Realtime Log Monitoring & Analytics Platform

• Monitoring - Access Log, Application Log, OS System• Alarm - Pattern Detection, System Metric, Health Check• Log Viewer - 통합 로그 검색 , Tailing

Page 5: 서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 지탱하는 기술

5

Planet Mon 을 지탱하는 기술

Reference Architecture • ELK (Elasticsearch – Logstash – Kibana)• www.elastic.co

• Collection - OS System 정보 , Log

파일

• Preprocessing &Transport - 데이터를 표준 Format 으로 변경하거나

Derived Field 추출과 생성

• Storage & Analytics - 분산 , 확장 , 고가용성 보장하는

데이터 저장- TF-IDF, Aggregation 통계를 동적

생성- RESTful API 를 통한 QueryDSL

지원

• Visualization - 시각화를 통한 데이터 분석

Page 6: 서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 지탱하는 기술

6

Planet Mon 을 지탱하는 기술

1. Collection– 수천대의 서버에서 System Metric 과 Log File 데이터를 수집하는 Agent 관리

2. Transport– Kafka 와 Logstash 를 활용한 데이터 센터간 안정적인 데이터 전송

3. Log Stream Analytics– 적정한 기술을 사용한 Log Stream Analytics 서버 개발– Stream Analytics 결과 기반 실시간 Alarm Detection 서버 개발

4. Storage– Elasticsearch 를 Timeseries DB 와 같은 Metric Data 저장소로 사용– Elasticsearch 를 검색 가능한 Log 데이터 통합 저장소로 사용

5. Visualization– Metric Data 기반으로 이미 정의된 다양한 그래프와 Dashboard 를 동적으로 생성– 각 서버의 로그를 통합하여 버벅임 없이 검색할 수 있는 Browser 기반의 Log Viewer

Page 7: 서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 지탱하는 기술

7

Planet Mon 을 지탱하는 기술

1. Collection– 수천대의 서버에서 System Metric 과 Log File 데이터를 수집하는 Agent 관리

LogFileAgent(CNXLog)

SystemAgent

• Collection - SystemAgent : System

Metric 정보를 수집하기 위해collectd 를 관리할 수 있도록

추가 개발- LogFileAgent : 수집 Log

파일을 감시하기 위해NXLog 에 관리기능과

Kafka 전송 기능을 추가

Page 8: 서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 지탱하는 기술

8

Planet Mon 을 지탱하는 기술

2. Transport– Kafka 와 Logstash 를 활용한 데이터 센터간 안정적인 데이터 전송

LogFileAgent(CNXLog)

SystemAgent

• Collection - SystemAgent : System

Metric 정보를 수집하기 위해collectd 를 관리할 수 있도록

추가 개발- LogFileAgent : 수집 Log

파일을 감시하기 위해NXLog 에 관리기능과

Kafka 전송 기능을 추가

• Transport - Kafka 를 사용하여 센터

내데이터를 Buffering 하여

제공 - Logstash 를 사용하여 pull 방식으로 데이터를 중앙으로 전송 하고 최종

데이터를 스토리지에 저장

Page 9: 서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 지탱하는 기술

9

Planet Mon 을 지탱하는 기술

3. Log Stream Analytics– 적정한 기술을 사용한 Log Stream Analytics 서버 개발– Stream Analytics 결과 기반 실시간 Alarm Detection 서버 개발

LogFileAgent(CNXLog)

SystemAgent

ServiceMon

SystemMon

LogMon

AlarmMon

• Collection - SystemAgent : System

Metric 정보를 수집하기 위해collectd 를 관리할 수 있도록

추가 개발- LogFileAgent : 수집 Log

파일을 감시하기 위해NXLog 에 관리기능과

Kafka 전송 기능을 추가

• Transport - Kafka 를 사용하여 센터

내데이터를 Buffering 하여

제공 - Logstash 를 사용하여 pull 방식으로 데이터를 중앙으로 전송 하고 최종

데이터를 스토리지에 저장

• Log Stream Analytics - ServiceMon : access log,

application log 분석 - SystemMon : System Metric

데이터 분석- AlarmMon : 알람을 전송할지

최종 판단하여 여러 체널로 전송- LogMon : 원본 Log 를 검색이 잘

될 수 있도록 처리 (Multi-Line)

Page 10: 서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 지탱하는 기술

10

Planet Mon 을 지탱하는 기술

4. Storage– Elasticsearch 를 Timeseries DB 와 같은 Metric Data 저장소로 사용– Elasticsearch 를 검색 가능한 Log 데이터 통합 저장소로 사용

LogFileAgent(CNXLog)

SystemAgent

2ndMon

Metric Storage

Indexed Log Storage

ServiceMon

SystemMon

LogMon

AlarmMon

• Storage - Metric Storage : Time

Series DB 기능으로 Metric 데이터를 aggre-

gation 하여 제공- Indexed Log Storage : NoSQL 저장소로 원본 Log 를 indexing 하여 저장하고 검색을 제공

• Collection - SystemAgent : System

Metric 정보를 수집하기 위해collectd 를 관리할 수 있도록

추가 개발- LogFileAgent : 수집 Log

파일을 감시하기 위해NXLog 에 관리기능과

Kafka 전송 기능을 추가

• Transport - Kafka 를 사용하여 센터

내데이터를 Buffering 하여

제공 - Logstash 를 사용하여 pull 방식으로 데이터를 중앙으로 전송 하고 최종

데이터를 스토리지에 저장

• Log Stream Analytics - ServiceMon : access log,

application log 분석 - SystemMon : System Metric

데이터 분석- AlarmMon : 알람을 전송할지

최종 판단하여 여러 체널로 전송- LogMon : 원본 Log 를 검색이 잘

될 수 있도록 처리 (Multi-Line)- 2ndMon : Batch Job 수행

(service, hourly, daily)

Page 11: 서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 지탱하는 기술

11

LogFileAgent(CNXLog)

SystemAgent

Planet Mon 을 지탱하는 기술

5. Visualization– Metric Data 기반으로 화려하고 다양한 그래프와 Dashboard 를 동적으로 생성– 각 서버의 로그를 통합하여 버벅임 없이 검색할 수 있는 Browser 기반의 Log Viewer

2ndMon

PlanetMonFrontend

LogMonFrontend

Metric Storage

Indexed Log Storage

• Visualization - PlanetMon Frontend : 서비스별로 데쉬보드를

확인하고 각종 알람 설정과 트랜드를 분석 할 수 있도록

제공 함- LogMon Frontend : 원본

Log 를 통합하여 검색할 수있도록 제공

• Storage - Metric Storage : Time

Series DB 기능으로 Metric 데이터를 aggre-

gation 하여 제공- Indexed Log Storage : NoSQL 저장소로 원본 Log 를 indexing 하여 저장하고 검색을 제공

• Collection - SystemAgent : System

Metric 정보를 수집하기 위해collectd 를 관리할 수 있도록

추가 개발- LogFileAgent : 수집 Log

파일을 감시하기 위해NXLog 에 관리기능과

Kafka 전송 기능을 추가

• Transport - Kafka 를 사용하여 센터

내데이터를 Buffering 하여

제공 - Logstash 를 사용하여 pull 방식으로 데이터를 중앙으로 전송 하고 최종

데이터를 스토리지에 저장

ServiceMon

SystemMon

LogMon

AlarmMon

• Log Stream Analytics - ServiceMon : access log,

application log 분석 - SystemMon : System Metric

데이터 분석- AlarmMon : 알람을 전송할지

최종 판단하여 여러 체널로 전송- LogMon : 원본 Log 를 검색이 잘

될 수 있도록 처리 (Multi-Line)- 2ndMon : Batch Job 수행

(service, hourly, daily)

Page 12: 서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 지탱하는 기술

12

PMon Log Stream Analytics

Open Source Solution ?

Page 13: 서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 지탱하는 기술

13

PMon Log Stream Analytics

Open Source Solution ?

요구 사항• Log Line 별로 기본 통계 추출

- 호스트 단위의 Log Line 에서 특정 값을 찾아서 word count, min, max, sum, avg 하는 수준

- 결과에 대한 실시간 Alarm

• 처리 성능의 수평확장과 안정성이 보장 되어야 함- Kafka Consumer Cluster

• 운영 편의성- Kafka Consumer Cluster

Page 14: 서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 지탱하는 기술

14

Planet Mon Log Stream Analytics

적정한 Log Stream Analytics Server 개발

• Opensource 솔루션을 사용하는 것이 맞는 것인가 ?• 해결하려는 것에 적절한 가 ?• Language, Framework 학습 시간은 ?• Production 에서 Service 를 제공할 수 있도록 운영 가능한가 ?• 자원은 충분 한가 ?

• 보유 기술 : Kafka Consumer Cluster, Modern Java, Spring Boot

출처 : http://blog.besunny.com/?p=20844

출처 : http://egloos.zum.com/cklist/v/5515377

Page 15: 서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 지탱하는 기술

15

Log Stream Analytics Server

Kafka Consumer Cluster

제공 기능• Scale-out - Partition 의 수만큼 Consumer 수를 늘려가며 병렬로 처리할 수 있다 .• Failover - Consumer 가 죽으면 다른쪽 Consumer 로 자동으로 보내준다 .• Exactly once - Consumer Group 내 consumer 중 1 명에게 1 번만 전달 한다 .

주의 사항• Kafka Producer 에서 메시지 전송시 순서 보장을 하려면 Message Key 를 동일 하게 지정해서 전송

해야만 한다• Consumer 에 Partition 이 할당 되어 전송한다 . 누군가 죽거나 추가 되면 그때부터는 다른 Consumer

가 Partition 을 할당 받게 됨• Partition 내에는 여러 서버에서 들어온 정보가 혼합 되기때문에 Producer 단위로만 순서가 보장 된다

• 먼저 데이터를 전송했다고 해서 먼저 읽는 것은 아님

Page 16: 서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 지탱하는 기술

16

Log Stream Analytics Server

Modern Java (Java 8 이후 )• Lambda

• x -> f(x)• Stream 중간에 넣어서 데이터를 가지고 새로운 데이터를 만들면서 처리

• Stream API• Aggregate operations

• filter, map, limit, reduce, find, match• sort 후 limit 을 사용하여 top 을 구할 수 있음

• [Int, Long, Double]SummaryStatistics• 숫자형 Stream 에서 바로 min, max, count, sum, average 를 구할 수 있음• combine 를 사용하여 다른 SummaryStatistics 와 쉽게 합칠 수 있음

• 예 - Arrays.asList(9, 10, 3, 4, 7, 3, 4).stream().mapToInt(i -> i*i).distinct().filter(i->i>4) .summaryStatistics();

• CompletableFuture• Lambda 와 함께 병렬로 처리할 것 같단하게 수행• 예 - CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> longRunning-

Task(params));

Page 17: 서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 지탱하는 기술

17

Log Stream Analytics Server

Spring Boot• Actuator

• Http endpoints (Rest API), JMX, remote shell 등을 이용하여구체적인 동작 ( 관리와 모니터링 ) 으로 변환하는 기능을 말함 .

• http://www.slideshare.net/JeminHuh/spring-boot-backend

Page 18: 서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 지탱하는 기술

18

Log Stream Analytics Server

ServiceMon Process

• InputLogLine• Kafka 에서 읽은 데이터를 Host 나 Type 별로 Line List 로 만듬

• KeyTypeExpression• Derived Field 추출과 동시에 데이터 Type 을 지정• Logstash 에서 사용하는 Grok 표기법에서 idea 를 얻음

• https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.htm• KeyTypeExpression 예 : %{id:WORD} \[%{logLevel:WORD}\] %{date:DATE} %{method:WORD} - %{mes-

sage:TEXT}• StatisticsAccumulator

• Derived Field 의 Type 에 따라 1 분단위로 표준 통계 형태로 저장 함• WORD - value 값 별로 count 함• TEXT - Statistics 에서는 버리는 거나 , Custom 하게 추가로 처리할 Field 에 지정 함• NUMBER - 입력되는 number List 를 수집하고 Aggregation 을 통해 통계값을 (min, max, sum, count, avg) 을

생성• DATE – 시간 Format 을 인식하여 처리 함

• Output Data• 1 분 단위로 생성된 통계를 활용해 여러가지 최종 Metric Data 를 생성 함

• Metric Exporter• Kafka Producer 로 Metric Data 를 Type 에 지정된 Kafka topic 으로 전송

  * 로그 데이터 분석 방법 및 장치 , 출원 번호 10-2015-0148452- KeyTypeExpression 과 Type 별로 표준 통계를 추출하여 데이터를 생성하는 방법에 관한

특허

InputLogLine

KeyTypeExpression

StatisticsAccumulator

OutputDataBuilder

MetricExporter

Page 19: 서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 지탱하는 기술

19

Planet Mon Architecture

Kappa Architecture• http://novoj.github.io/reveal.js/kappa-architecture.html

• Input : Kafka• Processing : SystemMon, ServiceMon, AlarmMon, LogMon• Serving : Elasticsearch• App : PMon Frontend, LMon Frontend

Page 20: 서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 지탱하는 기술

20

기술적 내용이 참 많은데…

PMon 에 관해 참으로 놀랄 만한 개발 , 운영 노하우를 보유하였으나 ,그것을 다 설명하기에는 @tech 시간이 너무나 짧다 .

- 수천대의 서버에 설치되는 System Metric, Log 수집 Agent 관리 방법- 데이터 센터간의 안정적인 데이터 전송을 위한 Kafka, Logstash 를 활용한 운영

방법- Timeseries DB 로 사용하는 Elasticsearch 운영 방법- 일 5TB 로그가 실시간으로 쌓이는 Elasticsearch 운영 방법- PMon, LogMon Frontend 개발 방법- Stream Data 처리 이슈 관리

- 정말 너무 많이 들어오면…- 장애시 데이터를 복구를 할 수 있나 ?

Page 21: 서비스 모니터링 구현 사례 공유 - Realtime log monitoring platform-PMon을 지탱하는 기술

21

Q & A