23. 로그가 데이터가 되려면
•
흩어져 있는 로그 파일들 - 수집
•
서로 다른 파일 들 - 하나의 타임라인으로 통합
•
정규화 되지 않은 로그 메시지들 - 선별 및 정규화
24. 바람직한 로그
•
로그 파일 생성시 파일(경로)명에 필요한 정보
•
•
로그를 생성한 서버의 종류
•
•
로그가 발생한 일시
로그를 생성한 서버의 번호
로그 파일 내용에 필요한 할 정보
•
•
•
로그 메시지를 출력한 일시 (년:월:일 - 시:분:초)
로그 메시지의 레벨 (크리티컬, 에러, 워닝, 정보, 디버그)
로그가 수집될 때 파일(경로)에 필요한 할 정보
•
로그를 생성한 노드(머신) 이름 - 지역 정보 포함 권장
26. •
좋은 로그 메시지
2013/06/28-13:07:59 [ERR] - File Open Error
2013/06/28-13:08:00 [WRN] - Player Log Out
!
•
부족한 로그 메시지
6/28 File Open Error
Player Log Out
33. WzDat 셀렉터
뒤에 ~s가 붙은 복수형 단어, 각괄호 [ ] 로 조건 기술
•
files - 파일 선택
•
nodes - 노드(머신) 선택
•
servers - 서버(앱) 선택
•
dates - 일시(Date Time) 선택
34. files
•
모든 파일을 선택
files
•
첫 번째, 마지막 파일
files[0], files[-1]
•
100번째 에서 10개 파일
files[100:110]
•
앞에서 10개, 뒤에서 10개
files[:10], files[-10:]
35. dates
•
파일이 있는 모든 일시를 선택
dates
•
파일이 있는 첫 번째, 마지막 일시
dates[0], dates[-1]
•
같은 식으로
dates[100:110], dates[:10], date[-10:]
36. nodes
•
파일을 만든 모든 노드(머신)를 선택
nodes
•
파일을 만든 첫 번째, 마지막 노드
nodes[0], nodes[-1]
•
같은 식으로
nodes[100:110], nodes[:10], nodes[-10:]
37. servers
•
파일을 만든 모든 서버(앱)을 선택
servers
•
파일을 만든 첫 번째, 마지막 서버
servers[0], servers[-1]
•
같은 식으로
servers[100:110], servers[:10], servers[-10:]
38. WzDat 상수
•
‘카테고리 . 이름’의 형식
•
파일 분석과정에서 자동으로 정의
•
상수의 카테고리는 공통, 이름은 프로젝트 별로 다양하다. (아
래는 C9의 예)
•
node.ASIA_1 # 아시아 1번 서버 머신
•
server.GameServer # 게임서버
•
date.D2013_07_11 # 2013년 7월 11일
39. 상수로 필터링
•
2013년 7월 11일 파일만
files[date.D2013_07_11]
•
게임 서버 파일만
files[server.GameServer]
•
ASIA-1 노드에서 파일이 발생한 일시만
dates[node.ASIA_1]
40. 상수 매칭
•
상수의 앞 문자열만 맞으면 모두 매칭
# node.ASIA_1, node.ASIA_2, … 식으로 여럿 있을 때
files[node.ASIA] # 모든 아시아 노드의 파일이 매칭
41. 셀렉터의 결과로 필터링
•
마지막 날의 파일만 선택
files[dates[-1]]
•
마지막 날 파일을 만든 노드만 선택
nodes[dates[-1]]
•
아시아 지역의 마지막 날 파일만 선택
files[dates[node.ASIA][-1]]
42. 복합 조건 필터링
•
마지막 날의 게임서버 파일만
files[dates[-1], server.GameServer]
•
7월 12일의 게임/인증 서버 파일중 마지막 10개만
files[date.D2013_07_12, server.GameServer,
server.AuthServer][-10:]
43. 파일 병합, 단어 검색
•
조건에 맞는 파일들을 합쳐 하나의 임시파일에 저장
files[…].merge()
•
파일들에서 ‘ERR’단어를 포함한 줄만 찾아 임시파일에 저장
files[…].find(‘ERR’)
•
검색 결과 내 재검색
files[…].find(‘ERR’).find(‘OnClose’)
44. 결과 보기
•
선택 결과 파일 앞, 뒤 보기
files[…].head(), files(…).tail()
files[…][:-10], files[…].[-10:]
•
파일 내용 앞, 뒤 보기
files[…].merge().head(), files(…).find(‘ERR”).tail()
files[…].merge()[0:10], files(…).find(‘ERR”).[-10:]
45. DataFrame으로 변환
!
•
병합,찾은 결과를 Pandas의 DataFrame으로 변환
files[…].find(…).to_frame()
•
find, merge는 여러 파일을 합쳐주지만, 아직 타
임 라인 소팅은 되지 않은 상태
•
DataFrame으로 만들어 질 때 비로소 시간 순서대로
정렬된다.
46. WzDat 어댑터와 파일타입
•
프로젝트 별로 다르다
•
•
파일 경로명, 파일 종류, 내용 기록 방식등
공용 인터페이스를 위한 프로젝트 어댑터 작성 필요
•
하나 이상의 파일 타입 모듈을 작성
•
c9.log - C9의 로그 파일 모듈 (*.txt)
•
c9.dump - C9 덤프 파일 모듈 (*.dmp)
47. 덤프 파일의 경우
하나 이상의 파일타입이 있으면 각각 다른 이름으로 임포트
예) import log as l, import dump as d
•
최근 덤프가 발생한 일시
d.dates[-1]
•
최근 덤프가 발생한 서버 (d는 dump 모듈)
d.servers[d.files[-1]]
48. 이종 파일간 셀렉트
•
서로 다른 종류의 파일을 참고하여 셀렉트
•
예) 덤프 파일(d)로 로그 파일(l) 선택
# 마지막 덤프의 노드, 서버, 일시에 일치하는
# 로그 파일만 선택
l.files[d.files[-1]]
49. WzDat 로그 저장
•
파일 다운로드 링크 출력
files[…].link
•
압축된 파일 다운로드 링크 출력
files[…].zlink
52. Pandas
•
사용이 편리한 파이썬 데이터 분석 툴
•
다양한 데이터 조작 방식 - R에서 영감을 받음
•
대량의 데이터를 고속으로 처리 (C/C++, MMF)
•
높은 수준의 분석을 위해 꼭 필요
•
numpy, matplotlib 사용
53.
54. Series
•
인덱스를 가지는 배열같은 구조체
!
In [3]: s = Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
!
In [4]: s
Out[4]:
a
1
b
2
c
3
d
4
dtype: int64
55. DataFrame
•
인덱스와 컬럼을 가지는 구조체
•
엑셀의 테이블과 유사
!
In [1]: d = DataFrame(np.random.randn(3, 4), index=['one', 'two',
'three'], columns=['a', 'b', 'c', 'd'])
!
In [2]: d
Out[2]:
a
b
c
one
-0.513031 -0.687210 -0.433650
two
0.233899 -0.000048 0.637124
three 0.803571 -1.093059 0.450721
d
0.483474
1.004753
0.044777
56. 열 선택, 평균 구하기
•
!
열의 이름으로 선택
•
!
(열 기준) 평균 구하기
In [7]: d['a']
Out[7]:
one
-0.008556
two
0.669164
three
-1.033598
Name: a, dtype: float64
In [4]: d.mean()
Out[4]:
a
0.174813
b
-0.593439
c
0.218065
d
0.511002
dtype: float64
57. 그래프 그리기
•
내부적으로 matplotlib을 사용
•
구조체 인스턴스의 plot메소드
!
In [3]: d.plot()
Out[3]: matplotlib.axes.AxesSubplot at 0x105c99dd0
58. 시연
•
서버별 로그 크기 그래프
•
용량이 많은 에러 종류 Top 10
•
‘Long time Dispatch’ 경고 시간별 평균 그래프
60. 참고 링크
•
Pandas - pandas.pydata.org
•
10 Minutes to Pandas - pandas.pydata.org/pandasdocs/dev/10min.html
•
IPython - ipython.org
•
Don’t use Hadoop - your data isn’t that big -
www.chrisstucchio.com/blog/2013/hadoop_hatred.html
•
파이썬 라이브러리를 활용한 데이터 분석 - www.yes24.com/
24/goods/11043328?scode=032OzSrank=1