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

Post on 29-Nov-2014

1.794 views 0 download

description

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

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

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

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

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

모바일 앱 크래시?

서비스 개발 출시

튕기고 / 멈추고

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

매출 하락

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

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

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), 국가정보, 로케일

Function List

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

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

2.  코멘트 작성

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

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

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

Function List

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

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

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

nCrazer ?

Naver Mobile App

Crash Analyzer

nCrazer - Main

nCrazer 사용 앱

이슈 조회

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

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

이슈 조회

1 2

3 4

이슈 조회

1

3

2

4

이슈 조회

이슈 조회

이슈 통계

이슈 트렌드

실시간 모니터링

오픈소스

구성

App Log

Collector

Crash

Kafka

Symbolicator

Elastic Search MongoDB

Web Server

Symbol

Normal

Crash Collector Abnormal Pattern Detector

Daily Reporter

SDK

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

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

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

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

Apache Kafka

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

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

특징 1.  Fast

2.  Scalable 3.  Durable

App Log

Collector

Crash

Kafka

Symbolicator

Elastic Search MongoDB

Symbol

Normal

Crash Collector Hadoop

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

MongoDB

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

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

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

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

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

Elasticsearch

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

2.  실시간 검색

특징 1.  분산 환경 지원

2.  Schema Free 3.  Multi tenancy

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

Symbolicator

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

Symbolicator

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

2.  Android : Proguard , Google Breakpad

Symbolicatecrash

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

2.  Xcode 설치 필요

Symbolicatecrash

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

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

Symbolicatecrash

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

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

4.  Application Symbol 준비

Symbolicatecrash

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

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

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

Symbolicatecrash

Symbolicatecrash 1.  매우 낮은 성능

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

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

ht-and-crash-symbolication

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

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)

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

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

구현 결과

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

향후 계획

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

2.  Android tools 고도화 1.  Proguard

2.  google-breakpad (Android NDK)

향후 계획

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

Q&A

THANK YOU