NDC2016-게임에 특화된 덤프 분석 시스템

Post on 07-Jan-2017

286 views 12 download

Transcript of NDC2016-게임에 특화된 덤프 분석 시스템

게임에 특화된 덤프 분석 시스템넥슨 통합 덤프 자동화 분석 시스템 구축 및 운영

넥슨 코리아

김상기

발표에 앞서발표자는 누구고 어떤 내용의 발표인지 ..

NDC 발표 경력 : 2 회 (2014, 2016)

발표자 소개

김상기 : 프로그래머

넥슨그룹 입사 5 년차2011-2014, 던전앤파이터2014 - , 인프라기술팀

( spivy@naver.com )

프로그래머 또는 프로젝트 매니저

사전지식이 있다면 더 많은 정보를 얻어갈 수 있는 세션물론 사전지식이 없이 들어도 무리 없는 튜토리얼 형식의 세션

대상

덤프 디버깅 스킬이나 코드 작성에 대한 내용이 아님

방법론적인 내용 + 구축 사례 위주의 발표

발표내용 : 사례위주

게임에 특화된

넥슨 통합 덤프 자동화 분석 시스템

세션 제목

크래시리포터 시스템 소개기본 시스템 설계 및 구축게임에 특화된 덤프 분석시스템내부 서비스 운영 노하우

세션 포인트

크래시리포터 시스템 소개기본 시스템 설계 및 구축게임에 특화된 덤프 분석시스템내부 서비스 운영 노하우

크래시리포터는 게임에서 발생하는

크래시를 수집하고 ,개발자들에게 정보를 제공하는 시스템입니다 .

수집게임 클라이언트

이쯤되면 궁금한 개발 동기…

저건 원래 다 하는거 아닌가 ?

게임 프로젝트마다 너무나도 다르게 사용되던

덤프 분석 시스템

네네 ~ 좋네요 ~그럼

크래시리포터부터시작해볼까요 ?

팀원분들 잘 부탁해용~

던파에서 잘 구축된 시스템을

넥슨에 통합시스템으로 구축해보는 것은

어떨까요 ?

2014 년 어느 날 ..

S 모 실장님

K 모 본부장님

K 모 파트장님 본인

기존 라이브게임의 사전 리서치부터

시작 해보겠습니다 .

그 중에 대표적인 사례에 대해서 먼저 공유해보고자 합니다 .

덤프분석시스템 내부 리서치

크래시 덤프 수집

개발자 덤프 분석개발자에게 덤프 제공

공유에 앞서 덤프 분석 시스템 기본 동작

1. 게임 서버에 덤프 수집을 하는 경우

기존 덤프 분석 시스템

게임서버에 TCP 패킷으로 데이터 전송가장 간단히 구현된 케이스 개발비용 가장 적음

TCP

client

게임서버

DumpDumpDUMP

아 몰랑 ~

독립적인 웹 서버 (HTTP)( 상용 라이브러리 : 버그트랩 )게임에 영향없음 : Good!

가장 많이 사용했던 방식

HTTP

Client

2. 독립적인 웹 서버를 구축하여 덤프 수집을 하는 경우

기존 덤프 분석 시스템

게임서버덤프수집서버

DUMPDUMPDUMP

개발자

분석툴 : 전체 덤프 가져오기 + 덤프 분석 결과 반환

Report

Dump

Dump

DUMP

3. 독립적인 웹서버에 덤프 수집 + 수동 분석 툴

기존 덤프 분석 시스템

개발자

덤프수집서버

HTTP

Tool

Dump

Dump

DUMP

4. 덤프 수집안함 .. 그런거 왜 함 ?기존 덤프 분석 시스템

4. 사실은… 안하는게 아니라 못하는 경우가 더 많죠…

기존 덤프 분석 시스템

미친듯이 바쁜 라이브 일정 ( 매 주 패치 )

누구나 만들 수 있는 시스템이지만 통합 시스템으로 제작

일정에 바쁜 개발팀에 편의를 제공해보자 !

구축 및 운영 과정에서 고민하고 , 시도한 것들에 대해서 발표

크래시리포터 시스템 소개

기본 시스템 설계 및 구축게임에 특화된 덤프 분석시스템내부 서비스 운영 노하우

크래시 덤프 수집

개발자 덤프 분석개발자에게 덤프 제공

다시보는 덤프 분석 시스템 기본 동작

크래시 덤프 수집

덤프 분석 개발자에게 덤프 제공

넥슨 통합 크래시리포터 동작 방식

크래시 덤프 수집

개발자 덤프 분석개발자에게 덤프 제공

크래시 덤프 즉시 수집

(HTTP 웹서버 구축 )

덤프 자동 분석( 개발자 수동 처리 X)

개발자에게 웹서비스 제공

( 추세 그래프 , 덤프 다운로드 )

넥슨 통합 크래시리포터 동작 방식

실시간 자동 분석 후 웹페이지 제공

즉각적인 안정성 확인 및 대응 가능

크래시 덤프 수집

개발자 덤프 분석개발자에게 덤프 제공

덤프 수집 서버

DumpDumpDump

웹 서비스

분석 서버

자동분석툴

넥슨 통합 크래시리포터 구조도

덤프 수집 서버

DumpDumpDump

웹 서비스

분석 서버

자동분석툴

크래시리포터 : 클라이언트 모듈 ( 라이브러리 )

클라이언트 모듈 : 클라이언트에 적용할 라이브러리

C/C++ 기반 라이브러리 자체 개발 HTTP 데이터 통신 : Wininet 사용 static-library VS. dynamic-library

static library 로 적용시프로젝트마다 빌드환경을 모두 맞춰줘야한다…

DebugReleaseRelease_HackShieldShippingShipping_NoHackShiled….

덤프 수집 서버

DumpDumpDump

웹 서비스

분석 서버

자동분석툴

크래시리포터 : 덤프 수집 서버

덤프 수집 서버 : 유저의 덤프를 수집

HTTP/S 웹 서버

덤프 수집 서버

DumpDumpDump

웹 서비스

분석 서버

자동분석툴

크래시리포터 : 분석 서버분석서버 : 실제로 모든 분석 처리가 이뤄지는 서버

내부 분석 툴 자체 개발 (C#)cdb.exe ( 커맨드용 디버깅 툴 )dat.exe ( 덤프 분석 툴 created by veblush)

웹 서비스 (flask / bootstrap / highcharts)DB : MariaDB (10.0.1)

관리 주체

덤프 수집 서버

Dump

Dump

Dump

웹 서비스

분석 서버

자동분석툴 개발팀에는 라이브러리 이식 작업만 해주면 끝 !!

개발 팀 편의를 돕기위해 모든 서버는 지원 ( 운영 ) 팀에서 관리

모든 서버 관리는 지원팀에서 운영 / 관리이로써 통합시스템으로 운영 가능

개발팀 입장에서는 신경안써서 좋고지원팀입장에서는 관리가 쉬워져서 좋으며 장비 ( 비용 ) 도 적게 들어서 누군가는 엄청 좋아함가장 좋은 것은 개발팀에 약팔때 최고 !

크래시리포터 : 웹 페이지

덤프 다운로드추세 그래프 확인 등

크래시리포터 시스템 소개기본 시스템 설계 및 구축 게임에 특화된 덤프 분석시스템내부 서비스 운영 노하우

사실 이것만으로도 훌륭한 동작

좀 더 개선할 것이 없는지 고민

C- Runtime Error (purecall, invalid_parameter, new 등등 ..)

CRT Error 는 기본적으로 크래시리포터에서 핸들링 되지 않는다 .

크래시리포터 : UnhandledExceptionFilter(…)

CRT Error Handling

C-Runtime Error 는 제각기 다른 핸들러가 존재하기 때문

CRT Error Handling

더 간단한 방법으로는각 핸들러에서 강제 크래시를 발생 !!!(RaiseException)

크래시가 발생하면 크래시리포터에서 예외 핸들링되는 방식( 약간의 꼼수같지만 대부분 라이브러리에서 사용하는 방식 )

라이브러리에서 CallBack 함수 제공

덤프 생성

크래시 발생

덤프 전송

클라이언트 종료

콜백함수

콜백함수

라이브러리로 제작시 여러가지 CallBack API 제공 !!

크래시시점에 덤프 발생 전 : BeforeCallBack덤프 전송 완료 후 : AfterCallBack

HTTPS 를 사용시엔 NGINX

해외 서버 적용시엔 HTTPS 사용

웹서버를 여러대 두는 방안보다는 Nginx 로 SSL 인증 처리 후 프록시 설정

NEXON KOREA

HTTP

HTTPSHTTP Web-

Server(SSL)

client

Game Server

LoginServer

Center

Server

해외 법인

풀 덤프가 필요한 경우

풀덤프는 서버적용시에만 사용

서버 용량 문제 , 내부 콜스택 분석까지는 미니덤프만으로 충분하기 때문

크래시리포터에서는 기본적으로 미니덤프만 수집풀 덤프가 필요할 경우 로컬에 저장

보안솔루션 (themida) 사용시 후처리는 필수

보안솔루션 ( 더미다 ) 으로 인해 파일 정보 변경이 원인 !!

CVK K

보안솔루션 사용되어 배포 되는 바이너리로 생성된 덤프는 덤프 분석이 안됨 !

디버깅정보 누실

자세한 내용은 아래 발표 참고NDC-2012 덤프 파일을 통한 사후 디버깅 실용 테크닉 –김이선 님( 툴 제공 : dat.exe)

보안솔루션 (themida 등 ) 사용할 경우 후처리 필요

CVK

KDMP

KT T T클라이언트 (원본 )

클라이언트 (배포버전 )

Tool(dat.exe)DMP

KT

DMP

CVK

T

라이브 운영에 필요한 기능을 추가기본 시스템 제작 완료

운영의 시작은 추세 그래프 확인

끓는 물에 개구리 삶기 (boiling frog syndrome)서서히 증가하는 크래시는 확인하기가 어렵다 .

추세 그래프는 주 단위로 비교하며 확인지난주 ( 지 지난주 )와 비교해서 수치 확인

사례로 확인해보는 추세 그래프

문제 확인 및 수정

?!?!?!! ?!?!?!!

수정 패치를 진행하였음에도 불구하고 크래시 수 증가

유저가 많아 지면 자연스럽게 덤프도 많아지는데 ..

대규모 패치로 평균 접속 유저 수 증가

이런 상황에서 클라이언트 안정성이 낮아졌다고 할 수 있을까 ?

크래시 수접속한 유저 수

새로운 데이터 ( 수치 ) 를 만들어보자 !

크래시 율 (%) = 시간당 크래시 수 / 시간당 유저의 평균 접속자 수 (평접 )

“ 유저 수에 따른 크래시 변화”와 “실제 안정성으로 인해 발생하는 크래시 수 변화”를 구분

클라이언트 안정성은 크래시율로 확인 !

단순 크래시 수 크래시 율

크래시 율 (%) = 단위 시간당 크래시 수 / 단위 시간당 평접

기존과 비교해서 얼마나 늘고있는지 동향 파악하기

콜스택별 시간당 발생률버전별 덤프 순위

덤프 (콜스택 ) 동향파악

기존 크래시리포터 시스템을 적용했을때 대부분 종료팅만 확인되는 문제가 있음 .그런 경우를 대비해 시급하지 않은 덤프는 분류 (종료팅 )

시급하지 않은 덤프 (종료팅 ) 은 분류종료팅은 별도로 표시하여 시급한 이슈와 분류( 아예 수집을 안하는 기능도 옵션으로 제공 )

종료팅

일반팅

1000

접속한 유저 수

2000

0

3000

국가마다 유저의 규모가 다르므로 생길 수 있는 이슈유저가 규모가 클 경우 덤프 수도 많다 Ver2접속한 유저 수

20000

40000

0

60000

80000

0

2000

4000

6000

100

200

300

400

0

크래시 수

프로젝트 한 개가 시간당 4000 개 덤프가 발생하면서버에서는 4000 * 55 개 ( 프로젝트 55 개 ) 덤프 분석이 이뤄져야함 ..

서버부하

해외 적용 시 반드시 필요한 기능해외를 위해 넣은 기능이지만 가끔은 국내도… 쓰는게 함정 ..

유저의 규모가 클경우 샘플링하여 수집

덤프 수집 비율을 서버에서 실시간 변경 ( 덤프 수집서버에서 설정 )

샘플링하더라도 크래시율로 보면 클라이언트 안정성은 동일

단순 크래시 수 크래시율 ( 단위시간당 크래시 )

추가 로그 적재 기능

크래시시점에 여러가지 로그를 남길 수 있도록 API 를 제공

json

개발팀에서 크래시 시점 정보 삽입캐릭터 직업마지막 스테이지마지막 위치마지막 던전 /맵등등…

클라이언트 로그 파일도 함께 적재

보안 이슈가 있을 만한 것은 암호화 / 복호화

로그 뿐만 아니라 ..

log

log

log

클라이언트 로그로 유저의 흐름을 인지할 수 있다

맵 로딩 하는 과정에서 죽은 케이스 ㅎㅎ

넥슨 크래시리포터에서는

마지막 시점 스크린샷까지 첨부 가능 !!

맵 로딩시점에문제가있음 .jpg

마지막 시점의 스크린샷은 많은 도움이 된다 !실제로 콜스택 / 로그만으로 확인이 어려운 경우

퀴즈 : 아래 스크린샷을 보고 버그로 의심되는 부분을 찾으시오 .

해외서비스에도 크래시리포터 도입하기

손쉽게

해외 서비스에 필요한 것은 덤프 수집 서버

실제로 유저가 접속하는 덤프 수집서버는 해외에 설치하자 !

덤프 수집서버

덤프 수집서버

덤프 수집서버

분석서버

Dump

Dump

Dump

분석 서버는 우리가 관리

해외서비스는 클라우드 서비스가 해법

AWS(Amazon Web Services)EC2 활용으로 간단하게 해결

값 싼 t2.micro 만으로도 충분

크래시리포터 시스템 소개기본 시스템 설계 및 구축게임에 특화된 덤프 분석시스템

내부 서비스 운영 노하우

참고 : 여기서 말하는 운영은 게임 라이브 운영이 아니라 내부 개발자 서비스 운영을 말합니다 .

안정성 문제발생시 내부 알림실제 라이브 서비스에 도움이 될 만한 내부 운영 기능 제공

패치 후 일정 시간 이후 알림 메일 ( 패치 후 2 시간 )다양한 자동 알림

정신없는 패치때 모니터링을 하지 않아도 메일로 필요한 안정성 확인 메일

패치 이후 문제가 있다면 강력 푸쉬 !크래시 수 (율 ) 이 급증한 경우도 푸쉬

• 패치 후 2 시간 이후 알림 메일• 크래시수가 급증할 때 알림• 덤프 발생시마다 알림 메일 ( 서버 )• 덤프가 일정 시간동안 수집 안될 경우 알림

• 덤프매칭 실패가 되었을때 알림• 일일 보고 메일 ( 일주일치 / 전날과

비교 )• 주간 보고 메일 ( 일주일치 비교 )

다양한 자동 알림 리스트

상시 모니터링 진행

수동 모니터링도 어느정도 필요

모든 부분을 자동화 할 수는 없으니

여러 프로젝트의 안정성을 한눈에 확인GameServerDedicatedServer…

관리자 페이지로 모든 프로젝트 안정성을 한눈에 조감하자

덤프 분석 실패의 경우 그래프로 표시

덤프 분석 실패는 디테일하게 분류

대부분 심볼이 없어서 안맞는 이슈이지만 특이한 동향이 파악될 때도 있다 . ex) 작업장

모니터링 후 개발팀과 꾸준한 커뮤니케이션

덤프를 검색할 수 있도록 하자 !

검색기능은 작업장 흐름도 확인할 수 있다 .

통계 데이터 제공

Jupyter (ipython-notebook) 활용

웹 페이지로 모든 것을 나타낼 수는 없다 .

Jupyter 를 이용하면 대시보드에 없는 통계 분석도 파이썬 몇 줄로 바로 구해 차트로 볼 수 있음

Jupyter 활용 :

원하는 쿼리를 날려 데이터를 여러가지 가공할 수는 없을까 ?!

통계 서버를 이용한 통계 리포터 작성

DB개발자

Report(R-Markdown)

통계용 서버 더 나아가 통계 언어인 R 을

활용하여통계 리포트 작성(R-Markdown 형식의 레포트 )

사실 이 부분은 아직 작업 중 ..

이렇게 해서 만들어진 크래시리포터 웹 페이지 공개

개발팀으로부터 수 많은 피드백

세션 정리 및 결론

게임에 특화된

넥슨 통합 덤프 분석 시스템

넥슨이 잘한다는라이브 게임 서비스를 오래 지속하는 비결 중 하나

덤프 분석 시스템이 없다면

바로 도입하는 것을 추천

덤프 분석 시스템이 있다면

게임에 특화되게 변경을 추천

그리고 , 넥슨 관계사 분들은 저희 팀에 연락 주시는 것을 추천…

Q & A

special thanks to강 대현님송 창규님강 덕원님

감사합니다 .