1일 수천대의 서버에서 발생하는 30~50억건의 Log와 Metric을 처리하는 Planet Mon 을 지탱하는 기술인 Collection(Collectd, NXlog), Transport(Kakfa, Logstash), Log Stream Analytics, Storage(Elasticsearch), Visualization을 구성하는 Architecture에 대해 설명드리고 제가 개발한 Log Stream Analytics 서버들의 구현 기술에 대해 좀더 상세히 설명합니다.
1. 서비스 모니터링 구현 사례 공유
Realtime Log Monitoring & Analytics Platform – Planet Mon을 지탱하는 기술
허제민, System Software 개발팀, 2016.
2. 1
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, S
yrup Fashion, Syrup AD, O2O Solution, API Management Platform, FIDO, Search, EventOn
e, 통합쿠폰서비스, OneID, ATMOS, IMPAY, TCloud, TSmartsafe, DMP, PlaceDB, MarketingPl
us…
3. 2
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. 3
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. 4
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. 5
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. 6
Planet Mon 을 지탱하는 기술
1. Collection
– 수천대의 서버에서 System Metric과 Log File 데이터를 수집하는 Agent 관리
LogFileAgent
(CNXLog)
SystemAgent
• Collection
- SystemAgent : System
Metric 정보를 수집하기 위해
collectd 를 관리할 수 있도록
추가 개발
- LogFileAgent : 수집 Log
파일을 감시하기 위해
NXLog에 관리기능과
Kafka 전송 기능을 추가
8. 7
Planet Mon 을 지탱하는 기술
2. Transport
– Kafka와 Logstash를 활용한 데이터 센터간 안정적인 데이터 전송
LogFileAgent
(CNXLog)
SystemAgent
• Collection
- SystemAgent : System
Metric 정보를 수집하기 위해
collectd 를 관리할 수 있도록
추가 개발
- LogFileAgent : 수집 Log
파일을 감시하기 위해
NXLog에 관리기능과
Kafka 전송 기능을 추가
• Transport
- Kafka를 사용하여 센터 내
데이터를 Buffering 하여 제
공
- Logstash를 사용하여 pull
방식으로 데이터를 중앙으
로 전송 하고 최종 데이터를
스토리지에 저장
9. 8
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. 9
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 데이터를
aggregation하여 제공
- 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. 10
LogFileAgent
(CNXLog)
SystemAgent
Planet Mon 을 지탱하는 기술
5. Visualization
– Metric Data기반으로 화려하고 다양한 그래프와 Dashboard를 동적으로 생성
– 각 서버의 로그를 통합하여 버벅임 없이 검색할 수 있는 Browser 기반의 Log Viewer
2ndMon
PlanetMon
Frontend
LogMon
Frontend
Metric Storage
Indexed Log Storage
• Visualization
- PlanetMon Frontend : 서비
스별로 데쉬보드를 확인하고 각
종 알람 설정과 트랜드를 분석 할
수 있도록 제공 함
- LogMon Frontend : 원본 Log
를 통합하여 검색할 수있도록 제
공
• Storage
- Metric Storage : Time
Series DB 기능으로
Metric 데이터를
aggregation하여 제공
- 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)
13. 12
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. 13
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. 14
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. 15
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(() ->
longRunningTask(params));
17. 16
Log Stream Analytics Server
Spring Boot
• Actuator
• Http endpoints (Rest API), JMX, remote shell 등을 이용하여구체적인 동작(관리와 모니터링)
으로 변환하는 기능을 말함.
• http://www.slideshare.net/JeminHuh/spring-boot-backend
18. 17
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} - %{message: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별로 표준 통계를 추출하여 데이터를 생성하는 방법에 관한 특허
Input
LogLine
KeyType
Expression
Statistics
Accumulator
Output
DataBuilder
Metric
Exporter
20. 19
기술적 내용이 참 많은데…
PMon 에 관해 참으로 놀랄 만한 개발, 운영 노하우를 보유하였으
나,
그것을 다 설명하기에는 @tech 시간이 너무나 짧다.
- 수천대의 서버에 설치되는 System Metric, Log 수집 Agent 관리 방법
- 데이터 센터간의 안정적인 데이터 전송을 위한 Kafka, Logstash를 활용한 운영 방법
- Timeseries DB 로 사용하는 Elasticsearch 운영 방법
- 일 5TB 로그가 실시간으로 쌓이는 Elasticsearch 운영 방법
- PMon, LogMon Frontend 개발 방법
- Stream Data 처리 이슈 관리
- 정말 너무 많이 들어오면…
- 장애시 데이터를 복구를 할 수 있나?
스토리지 중심의 아키텍처임 엘라스틱에서 저장과 분석을 함 엘라스틱이 많이 필요함
수백대 서버 규모에서는 가능함
서버 resource 사용 문제 때문에 c로 개발된 opensource 기반
Opensouce를 사용하지 않고 직접 개발 함
제가 구현한 Pmon의 Log Stream Analytics 부분에 대해 상세하게 알아보기 전에
왜 Opensource를 쓰지 않았을까?
필요로 하는 요구사항이 글로벌하게 연관관계를 분석하거나 하지 않음
고민을 함
scala 배워야하나?
Yarn 으로 관리 해야하나?
Java에서 Lambda 표기법은 Method가 하나인 Anonymous Class (익명 클래스) 구현을 간단하게 바꿨다고 생각하면 이해하기 편하다.
summaryStatistics 좋다.
스트림으로 들어오는 데이터를 시간 기준으로 Reduction(축소) 하여 1분단위의 표준 통계 형태로 저장 함
표준 통계는 일종의 DW/BI 쪽에서 말하는 Dada cube aggregation 이라고도 볼 수 있는 형태임
Lambda Architecture 에서 스트림 부분
LinkedIn - Kafka를 만듬 , 스트림 분야 기술을 이끌고 있음
Kafka로 1.4 trillion message (1조) per day 를 전송 중임 – 우리의 200배 수준 https://engineering.linkedin.com/blog/2016/04/kafka-ecosystem-at-linkedin
Kappa 아키텍처를 2014년에 나옴 https://www.oreilly.com/ideas/questioning-the-lambda-architecture
그리스어에서 따옴