[1B3]모바일 앱 크래시 네이버에서는...

44

description

DEVIEWI 2014 [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

Transcript of [1B3]모바일 앱 크래시 네이버에서는...

Page 1: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요
Page 2: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

유성덕 선임연구원 / 분산시스템개발랩 / 서비스플랫폼G Naver Labs

모바일 앱 크래시!! 네이버에서는 어떻게 수집하고 보여줄까요?

Page 3: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

이미지 출처: https://github.com/CodingGene/JIRA-Mobile-Connect

모바일 앱 크래시?

Page 4: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

서비스 개발 출시

튕기고 / 멈추고

사용자 감소 / 리뷰 별점 테러

매출 하락

Page 5: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

프로젝트 시작 (벤치마킹)

SNS 개발팀의 요구사항에서 시작

Page 6: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

Function List

Crash Report 수집 및 분석 1.  크래시 리포트 수집 : iOS / Android SDK

2.  기간별 Crash 발생 수 / 그래프 3.  최초 / 최근 발생 시간

4.  Crash 발생한 사용자 수 5.  Stack Trace 정보 6.  OS/App ver., Device, Carrier, Network(3G,Wi-Fi), 국가정보, 로케일

Page 7: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

Function List

Crash 이슈 관리 1.  이슈 상태 관리

- Crash 이슈 별 상태 변경 및 검색 기능

2.  코멘트 작성

- Crash 이슈에 관한 코멘트 입력 기능

3.  태깅 - Crash 이슈 별 태깅하여 태그별 이슈 관리

4.  이슈 연동 - Crash 이슈를 외부 서비스에 등록하여 이슈 관리

Page 8: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

Function List

ETC 1.  커스텀 키값 / 세션ID 수집

2.  실시간 크래시 발생 모니터링 3.  모바일 앱 트렌드 분석

4.  비정상적인 크래시 패턴 감지 5.  일일 리포트

Page 9: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

nCrazer ?

Naver Mobile App

Crash Analyzer

Page 10: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

nCrazer - Main

Page 11: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

nCrazer 사용 앱

Page 12: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

이슈 조회

이슈 1.  Exception Type : 크래시 발생 Exception - NSObjectInaccessibleException

2.  Location : 크래시가 발생한 함수(파일:라인) – main (main.m:55) 3.  Version : 해당 앱 버젼 – v3.3.0

Page 13: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

이슈 조회

1 2

3 4

Page 14: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

이슈 조회

1

3

2

4

Page 15: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

이슈 조회

Page 16: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

이슈 조회

Page 17: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

이슈 통계

Page 18: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

이슈 트렌드

Page 19: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

실시간 모니터링

Page 20: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

오픈소스

Page 21: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

구성

App Log

Collector

Crash

Kafka

Symbolicator

Elastic Search MongoDB

Web Server

Symbol

Normal

Crash Collector Abnormal Pattern Detector

Daily Reporter

Page 22: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

SDK

SDK 1.  지원 플랫폼 : iOS / Android (NDK)

2.  수집 항목 1.  크래시 리포트

1.  앱 정보 / 디바이스 정보 2.  OS 버젼, 앱 버젼, 디바이스 모델 명, 메모리 사용량, 스토리지 사용량, 이통사 정보,

네트워크 상태, 국가 코드 정보, 로케일

Page 23: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

Apache Kafka

사용 목적 1.  노드간 데이터 전송에 사용

2.  로그 폭주시 데이터 유실 방지

특징 1.  Fast

2.  Scalable 3.  Durable

App Log

Collector

Crash

Kafka

Symbolicator

Elastic Search MongoDB

Symbol

Normal

Crash Collector Hadoop

Page 24: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

MongoDB

특징 1.  Scalability

2.  Replication & High Availability 3.  Document-Based Object

4.  Aggregation Crash

Collector Crash

Collector

Mongos

mongod master

mongod slave

mongod arbiter

mongod master

mongod slave

mongod arbiter

Mongo Config

Mongo Config

Mongo Config

Page 25: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

MongoDB

MongoDB 1.  크래시 발생 집계 정보 저장

2.  프로젝트 마다 여러 collection 존재 1.  이슈 collection

2.  분 / 시간 / 일 별 collection 분리 3.  crash 발생 user collection

3.  map/reduce 보다는 aggregation 을 활용

4.  초당 약 900건의 크래시 처리

Page 26: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

Elasticsearch

사용 목적 1.  전사 로그 데이터 수집

2.  실시간 검색

특징 1.  분산 환경 지원

2.  Schema Free 3.  Multi tenancy

4.  확장성 5.  유연성 6.  Full Text Search

Page 27: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

Symbolicator

Symbolicator 1.  iOS : 메모리 주소로 되어있는 Crash Report 를 심볼 정보로 변경

Page 28: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

Symbolicator

Symbolicator 1.  iOS : 메모리 주소로 되어있는 Crash Report 를 함수(파일:라인)으로 변경

2.  Android : Proguard , Google Breakpad

Page 29: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

Symbolicatecrash

Symbolicatecrash 1.  iOS Crash Report 변환하기 위해 필요한 툴

2.  Xcode 설치 필요

Page 30: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

Symbolicatecrash

Symbolicatecrash 1.  iOS Crash Report 변환하기 위해 필요한 툴

2.  Xcode 설치 필요 3.  iOS 계열 장비에서 Symbol 추출

Page 31: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

Symbolicatecrash

Symbolicatecrash 1.  iOS Crash Report 변환하기 위해 필요한 툴

2.  Xcode 설치 필요 3.  iOS 계열 장비에서 Symbol 추출

4.  Application Symbol 준비

Page 32: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

Symbolicatecrash

Symbolicatecrash 1.  iOS Crash Report 변환하기 위해 필요한 툴

2.  Xcode 설치 필요 3.  iOS 계열 장비에서 Symbol 추출

4.  Application Symbol 준비 5.  성능 ??

Page 33: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

Symbolicatecrash

Symbolicatecrash 1.  매우 낮은 성능

2.  Mac 서버 에서만 동작 3.  TestFlight 의 성공사례

- http://help.testflightapp.com/customer/portal/articles/852175-testflig

ht-and-crash-symbolication

Page 34: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

Symbolicatecrash

Symbolicatecrash 1.  사용하는 binary

1.  mdfind - finds files matching a given query 2.  mdls - lists the metadata attributes for the specified file

3.  lipo - create or operate on universal files 4.  size - print the size of the sections in an object file 5.  otool - object file displaying tool

6.  atos - convert numeric addresses to symbols of binary images or processes

Page 35: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

atos

atos 1.  convert numeric addresses to symbols of binary images or processes

12 nCrazer 0x000a4e3b 0x98000 + 52795

12 nCrazer 0x000a4e3b main (main.m:57)

Page 36: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

atos

Mach-O File Format

이미지 출처: https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/MachORuntime/Reference/reference.html

fat_header

fat_arch mach_header

uuid_command

segment_command

Page 37: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

atos

DWARF 1.  DWARF : Debugging With Attributed Record Formats

- http://www.dwarfstd.org/

2.  DWARF is a widely used, standardized debugging data format.

-  http://en.wikipedia.org/wiki/DWARF

Page 38: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

구현 결과

구현 결과 1.  약 15 배 정도의 성능 향상

Page 39: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

향후 계획

Symbolicator 고도화 1.  node.js c/c++ 모듈화로 1.5 배 성능 향상 기대

2.  Android tools 고도화 1.  Proguard

2.  google-breakpad (Android NDK)

Page 40: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

향후 계획

크래시 지표 지원 1.  그룹 / 프로젝트 별 크래시 지표 제공

Page 41: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요
Page 42: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요
Page 43: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

Q&A

Page 44: [1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요

THANK YOU