“데이터,
 데이터,
 데이터”
 참지
 못하고
 그는
 외쳤다.
 
“흙도
 없이
 벽돌을
 만들
 수는
 없잖아!”
 
 
- 셜록 홈즈, 너도밤나무집 中
WzDat과 Pandas를 통
한 로그 데이터 분석
과학의 패러다임 변천
- from Jim Gray on eScience
•

수 천년 전 - 경험에 의해

•

수 백년 전 - 이론에 의해

•

수 십년 전 - 계산에 의해

•

현재 - 데이터 탐사에 의해
데이터 탐사의 단계
!

1. 데이터를 수집
2. 데이터를 선별
3. 정보의 형태로 저장
4. 전문가가 분석
빅 데이터?
•

하둡
•
•

•

~TB 단위의 분석에 적합
셋팅 및 MR코딩의 비용

GB 단위는 다양한 방법이 가능
•

SQL, NoSQL, 스크립트 등

•

저비용, Try  Discover에 유리
로그 (= 데이터?)
로그의 장점
•

개발자라면 누구나 사용

•

NoSQL 원조 - 추가, 수정에 용이.

•

파일은 생각보다 안정적

•

문제 발생 후 사후 분석에 최적

•

장기간 보존이 필요 없다 - “Big Stream”
로그의 단점
•

여러개의 머신, 파일로 흩어져 있다.

•

하나의 타임 라인으로 보기 힘들다.

•

정규화 되어있지 않다.
로그가 데이터가 되려면
•

흩어져 있는 로그 파일들 - 수집

•

서로 다른 파일 들 - 하나의 타임라인으로 통합

•

정규화 되지 않은 로그 메시지들 - 선별 및 정규화
바람직한 로그
•

로그 파일 생성시 파일(경로)명에 필요한 정보
•
•

로그를 생성한 서버의 종류

•
•

로그가 발생한 일시

로그를 생성한 서버의 번호

로그 파일 내용에 필요한 할 정보
•
•

•

로그 메시지를 출력한 일시 (년:월:일 - 시:분:초)
로그 메시지의 레벨 (크리티컬, 에러, 워닝, 정보, 디버그)

로그가 수집될 때 파일(경로)에 필요한 할 정보
•

로그를 생성한 노드(머신) 이름 - 지역 정보 포함 권장
•

좋은 로그 파일명
C:/APPNAME-KR/GS101/AgentServer_2013-01-28.log

•

부족한 로그 파일명
C:/log.txt
•

좋은 로그 메시지

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
로그 수집
로그 수집
•

분산되어 있는 로그를 한 곳으로 모으는 과정

•

기존 프로젝트 로그 수집
•

•

서비스 중인(파일기반) 로그 집중화의 목적

새로운 프로젝트 로그 수집
•

최신 솔루션 선택이 가능
Node
Apps
Log

Apps
Log

rsync
Log Node

Node
Apps
Log

Apps

rsync

Log

Log

Node
Apps
Log

Apps
Log

rsync

Log
로그 선별, 저장 - WzDat
“What’s That?”
WzDat
•

로그에서 의미 있는 데이터를 쿼리

•

단순하지만 강력한 파이썬 구문 형식

•

다량의 비 정규화된 로그 파일을 선별 후,
•

보거나

•

변환하거나 (- Pandas 구조체)

•

저장(다운로드)
WzDat
WzDat 셀렉터
뒤에 ~s가 붙은 복수형 단어, 각괄호 [ ] 로 조건 기술
•

files - 파일 선택

•

nodes - 노드(머신) 선택

•

servers - 서버(앱) 선택

•

dates - 일시(Date Time) 선택
files
•

모든 파일을 선택
files

•

첫 번째, 마지막 파일
files[0], files[-1]

•

100번째 에서 10개 파일
files[100:110]

•

앞에서 10개, 뒤에서 10개
files[:10], files[-10:]
dates
•

파일이 있는 모든 일시를 선택
dates

•

파일이 있는 첫 번째, 마지막 일시
dates[0], dates[-1]

•

같은 식으로
dates[100:110], dates[:10], date[-10:]
nodes
•

파일을 만든 모든 노드(머신)를 선택
nodes

•

파일을 만든 첫 번째, 마지막 노드
nodes[0], nodes[-1]

•

같은 식으로
nodes[100:110], nodes[:10], nodes[-10:]
servers
•

파일을 만든 모든 서버(앱)을 선택
servers

•

파일을 만든 첫 번째, 마지막 서버
servers[0], servers[-1]

•

같은 식으로
servers[100:110], servers[:10], servers[-10:]
WzDat 상수
•

‘카테고리 . 이름’의 형식

•

파일 분석과정에서 자동으로 정의

•

상수의 카테고리는 공통, 이름은 프로젝트 별로 다양하다. (아
래는 C9의 예)
•

node.ASIA_1 # 아시아 1번 서버 머신

•

server.GameServer # 게임서버

•

date.D2013_07_11 # 2013년 7월 11일
상수로 필터링
•

2013년 7월 11일 파일만
files[date.D2013_07_11]

•

게임 서버 파일만
files[server.GameServer]

•

ASIA-1 노드에서 파일이 발생한 일시만
dates[node.ASIA_1]
상수 매칭
•

상수의 앞 문자열만 맞으면 모두 매칭
# node.ASIA_1, node.ASIA_2, … 식으로 여럿 있을 때
files[node.ASIA] # 모든 아시아 노드의 파일이 매칭
셀렉터의 결과로 필터링
•

마지막 날의 파일만 선택
files[dates[-1]]

•

마지막 날 파일을 만든 노드만 선택
nodes[dates[-1]]

•

아시아 지역의 마지막 날 파일만 선택
files[dates[node.ASIA][-1]]
복합 조건 필터링
•

마지막 날의 게임서버 파일만
files[dates[-1], server.GameServer]

•

7월 12일의 게임/인증 서버 파일중 마지막 10개만

files[date.D2013_07_12, server.GameServer,
server.AuthServer][-10:]
파일 병합, 단어 검색
•

조건에 맞는 파일들을 합쳐 하나의 임시파일에 저장
files[…].merge()

•

파일들에서 ‘ERR’단어를 포함한 줄만 찾아 임시파일에 저장
files[…].find(‘ERR’)

•

검색 결과 내 재검색
files[…].find(‘ERR’).find(‘OnClose’)
결과 보기
•

선택 결과 파일 앞, 뒤 보기

files[…].head(), files(…).tail()
files[…][:-10], files[…].[-10:]
•

파일 내용 앞, 뒤 보기

files[…].merge().head(), files(…).find(‘ERR”).tail()
files[…].merge()[0:10], files(…).find(‘ERR”).[-10:]
DataFrame으로 변환
!

•

병합,찾은 결과를 Pandas의 DataFrame으로 변환
files[…].find(…).to_frame()

•

find, merge는 여러 파일을 합쳐주지만, 아직 타
임 라인 소팅은 되지 않은 상태

•

DataFrame으로 만들어 질 때 비로소 시간 순서대로
정렬된다.
WzDat 어댑터와 파일타입
•

프로젝트 별로 다르다
•

•

파일 경로명, 파일 종류, 내용 기록 방식등

공용 인터페이스를 위한 프로젝트 어댑터 작성 필요
•

하나 이상의 파일 타입 모듈을 작성
•

c9.log - C9의 로그 파일 모듈 (*.txt)

•

c9.dump - C9 덤프 파일 모듈 (*.dmp)

More Related Content

PDF
하둡 (Hadoop) 및 관련기술 훑어보기
PDF
하둡 HDFS 훑어보기
PDF
KEY
Linux introduction
PPT
Hadoop Introduction (1.0)
PDF
하둡관리
PDF
Hadoop발표자료
PDF
Hive 입문 발표 자료
하둡 (Hadoop) 및 관련기술 훑어보기
하둡 HDFS 훑어보기
Linux introduction
Hadoop Introduction (1.0)
하둡관리
Hadoop발표자료
Hive 입문 발표 자료

What's hot (20)

PDF
20180714 하둡 스터디 종료 보고 및 연구과제 발표자료
PDF
hadoop ch1
PPTX
하둡 타입과 포맷
PDF
HBase 훑어보기
PPTX
An introduction to hadoop
PDF
하둡 좋은약이지만 만병통치약은 아니다
PDF
Apache hive
PPTX
하둡 설치(의사분산모드)
PPT
PPTX
about hadoop yes
KEY
Distributed Programming Framework, hadoop
PDF
Hive begins
PPTX
Hadoop distributed file system rev3
PDF
서울 하둡 사용자 모임 발표자료
PDF
하둡완벽가이드 Ch9
PDF
Hadoop overview
PPTX
아파치 쓰리프트 (Apache Thrift)
PDF
PostgreSQL 이야기
PDF
Linux tutorial
PDF
알고 쓰자! HBase | Devon 2012
20180714 하둡 스터디 종료 보고 및 연구과제 발표자료
hadoop ch1
하둡 타입과 포맷
HBase 훑어보기
An introduction to hadoop
하둡 좋은약이지만 만병통치약은 아니다
Apache hive
하둡 설치(의사분산모드)
about hadoop yes
Distributed Programming Framework, hadoop
Hive begins
Hadoop distributed file system rev3
서울 하둡 사용자 모임 발표자료
하둡완벽가이드 Ch9
Hadoop overview
아파치 쓰리프트 (Apache Thrift)
PostgreSQL 이야기
Linux tutorial
알고 쓰자! HBase | Devon 2012
Ad

Viewers also liked (8)

PDF
Interactive fiction
PDF
Deploying flask with nginx & uWSGI
PDF
파이썬 TDD 101
PDF
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
PDF
Python 게임서버 안녕하십니까 : RPC framework 편
PDF
쿠키런 1년, 서버개발 분투기
PDF
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
PDF
파이썬으로 나만의 강화학습 환경 만들기
Interactive fiction
Deploying flask with nginx & uWSGI
파이썬 TDD 101
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
Python 게임서버 안녕하십니까 : RPC framework 편
쿠키런 1년, 서버개발 분투기
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
파이썬으로 나만의 강화학습 환경 만들기
Ad

Similar to WzDat과 Pandas를 통한 로그 데이터 분석 (20)

PDF
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
PDF
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
PDF
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유 (2부)
PDF
weather-data-processing-using-python
PDF
Spark Day 2017@Seoul(Spark Bootcamp)
PDF
데브시스터즈 데이터 레이크 구축 이야기 : Data Lake architecture case study (박주홍 데이터 분석 및 인프라 팀...
PPTX
DeView2013 Big Data Platform Architecture with Hadoop - Hyeong-jun Kim
PDF
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
PDF
[PyCon KR 2018] 땀내를 줄이는 Data와 Feature 다루기
PDF
Real-time Big Data Analytics Practice with Unstructured Data
PDF
주니어 개발자의 서버 로그 관리 개선기
PDF
[H3 2012] 로그속 사용자 발자국 들여다보기
PDF
Python MySQL을 활용한 대용량 데이터 수집
PDF
빅데이터, big data
PDF
Rankwave MOMENT™ (Korean)
PDF
게임의 성공을 위한 Scalable 한 데이터 플랫폼 사례 공유 - 오승용, 데이터 플랫폼 리더, 데브시스터즈 ::: Games on AW...
PDF
고성능 빅데이터 수집 및 분석 솔루션 - 티맥스소프트 허승재 팀장
PDF
Log design
PDF
기술6기 3조
PDF
데이터 레이크 알아보기(Learn about Data Lake)
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유 (2부)
weather-data-processing-using-python
Spark Day 2017@Seoul(Spark Bootcamp)
데브시스터즈 데이터 레이크 구축 이야기 : Data Lake architecture case study (박주홍 데이터 분석 및 인프라 팀...
DeView2013 Big Data Platform Architecture with Hadoop - Hyeong-jun Kim
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
[PyCon KR 2018] 땀내를 줄이는 Data와 Feature 다루기
Real-time Big Data Analytics Practice with Unstructured Data
주니어 개발자의 서버 로그 관리 개선기
[H3 2012] 로그속 사용자 발자국 들여다보기
Python MySQL을 활용한 대용량 데이터 수집
빅데이터, big data
Rankwave MOMENT™ (Korean)
게임의 성공을 위한 Scalable 한 데이터 플랫폼 사례 공유 - 오승용, 데이터 플랫폼 리더, 데브시스터즈 ::: Games on AW...
고성능 빅데이터 수집 및 분석 솔루션 - 티맥스소프트 허승재 팀장
Log design
기술6기 3조
데이터 레이크 알아보기(Learn about Data Lake)

WzDat과 Pandas를 통한 로그 데이터 분석

  • 14.  
  • 15.   - 셜록 홈즈, 너도밤나무집 中
  • 16. WzDat과 Pandas를 통 한 로그 데이터 분석
  • 17. 과학의 패러다임 변천 - from Jim Gray on eScience • 수 천년 전 - 경험에 의해 • 수 백년 전 - 이론에 의해 • 수 십년 전 - 계산에 의해 • 현재 - 데이터 탐사에 의해
  • 18. 데이터 탐사의 단계 ! 1. 데이터를 수집 2. 데이터를 선별 3. 정보의 형태로 저장 4. 전문가가 분석
  • 19. 빅 데이터? • 하둡 • • • ~TB 단위의 분석에 적합 셋팅 및 MR코딩의 비용 GB 단위는 다양한 방법이 가능 • SQL, NoSQL, 스크립트 등 • 저비용, Try Discover에 유리
  • 21. 로그의 장점 • 개발자라면 누구나 사용 • NoSQL 원조 - 추가, 수정에 용이. • 파일은 생각보다 안정적 • 문제 발생 후 사후 분석에 최적 • 장기간 보존이 필요 없다 - “Big Stream”
  • 22. 로그의 단점 • 여러개의 머신, 파일로 흩어져 있다. • 하나의 타임 라인으로 보기 힘들다. • 정규화 되어있지 않다.
  • 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
  • 28. 로그 수집 • 분산되어 있는 로그를 한 곳으로 모으는 과정 • 기존 프로젝트 로그 수집 • • 서비스 중인(파일기반) 로그 집중화의 목적 새로운 프로젝트 로그 수집 • 최신 솔루션 선택이 가능
  • 30. 로그 선별, 저장 - WzDat “What’s That?”
  • 31. WzDat • 로그에서 의미 있는 데이터를 쿼리 • 단순하지만 강력한 파이썬 구문 형식 • 다량의 비 정규화된 로그 파일을 선별 후, • 보거나 • 변환하거나 (- Pandas 구조체) • 저장(다운로드)
  • 32. WzDat
  • 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
  • 51. 로그 분석 - Pandas
  • 52. Pandas • 사용이 편리한 파이썬 데이터 분석 툴 • 다양한 데이터 조작 방식 - R에서 영감을 받음 • 대량의 데이터를 고속으로 처리 (C/C++, MMF) • 높은 수준의 분석을 위해 꼭 필요 • numpy, matplotlib 사용
  • 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