Upload
jemin-huh
View
4.986
Download
1
Embed Size (px)
Citation preview
서비스 모니터링 구현 사례 공유
Realtime Log Monitoring & Analytics Platform – Planet Mon 을 지탱하는 기술
허제민 , System Software 개발팀 , 2016.
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…
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
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
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 - 시각화를 통한 데이터 분석
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
7
Planet Mon 을 지탱하는 기술
1. Collection– 수천대의 서버에서 System Metric 과 Log File 데이터를 수집하는 Agent 관리
LogFileAgent(CNXLog)
SystemAgent
• Collection - SystemAgent : System
Metric 정보를 수집하기 위해collectd 를 관리할 수 있도록
추가 개발- LogFileAgent : 수집 Log
파일을 감시하기 위해NXLog 에 관리기능과
Kafka 전송 기능을 추가
8
Planet Mon 을 지탱하는 기술
2. Transport– Kafka 와 Logstash 를 활용한 데이터 센터간 안정적인 데이터 전송
LogFileAgent(CNXLog)
SystemAgent
• Collection - SystemAgent : System
Metric 정보를 수집하기 위해collectd 를 관리할 수 있도록
추가 개발- LogFileAgent : 수집 Log
파일을 감시하기 위해NXLog 에 관리기능과
Kafka 전송 기능을 추가
• Transport - Kafka 를 사용하여 센터
내데이터를 Buffering 하여
제공 - Logstash 를 사용하여 pull 방식으로 데이터를 중앙으로 전송 하고 최종
데이터를 스토리지에 저장
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)
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)
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)
12
PMon Log Stream Analytics
Open Source Solution ?
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
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
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 단위로만 순서가 보장 된다
• 먼저 데이터를 전송했다고 해서 먼저 읽는 것은 아님
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));
17
Log Stream Analytics Server
Spring Boot• Actuator
• Http endpoints (Rest API), JMX, remote shell 등을 이용하여구체적인 동작 ( 관리와 모니터링 ) 으로 변환하는 기능을 말함 .
• http://www.slideshare.net/JeminHuh/spring-boot-backend
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
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
20
기술적 내용이 참 많은데…
PMon 에 관해 참으로 놀랄 만한 개발 , 운영 노하우를 보유하였으나 ,그것을 다 설명하기에는 @tech 시간이 너무나 짧다 .
- 수천대의 서버에 설치되는 System Metric, Log 수집 Agent 관리 방법- 데이터 센터간의 안정적인 데이터 전송을 위한 Kafka, Logstash 를 활용한 운영
방법- Timeseries DB 로 사용하는 Elasticsearch 운영 방법- 일 5TB 로그가 실시간으로 쌓이는 Elasticsearch 운영 방법- PMon, LogMon Frontend 개발 방법- Stream Data 처리 이슈 관리
- 정말 너무 많이 들어오면…- 장애시 데이터를 복구를 할 수 있나 ?
21
Q & A