2016년 8월 7일 일요일

VIM 사용 설명서(secure 로그 분석 - 3rd)

이제 secure 로그를 테이블로 만들어보자. '헬로 데이터 과학'편에서 이미 확인했듯이 '호스트명'까지는 일정한 길이로 구분되어 있기 때문에 쉽다.


엑셀에 로그를 복붙한 후 '데이터 > 텍스트 나누기' 기능을 이용하면 쉽게 열과 행의 구조를 갖는 테이블 형태로 만들 수 있다.


이때 놀라운 건 '너비가 일정함' 조건으로 텍스트 나누기를 시도하면 일정 길이로 구분되는 필드만을 인식해서 자동으로 나눠준다는 것이다. 엑셀이 필드 구분의 규칙성을 파악한 것. (알파고 뺨치는 엑셀)

너무 정확해서 날짜 정보까지 월과 일 단위로 나눠버린다. 원하지 않는 구분선이니 더블클릭으로 없애버리자. (구분선 추가를 원한다면 해당 영역 더블클릭)


필드 구분 결과에 필드별로 제목을 추가한 후, 제목행에 '홈 > 정렬 및 필터 > 필터(CTRL+SHIFT+L)' 기능을 적용한 결과는 다음과 같다.

제목 행 추가

필터 기능 적용

이제 나머지로 분류된 필드에서 프로세스와 메시지 정보를 구분해야 하는데 얘네들은 길이 구분이 다르기 때문에 텍스트 나누기 기능을 이용하려면 길이 구분선이 아닌 구분 기호가 필요하다.

나머지 영역에서 쓸만한 구분기호를 찾아보자. 가장 먼저 할 일은 프로세스명과 메시지의 구분 규칙을 찾는 것이다. 너무 쉽다. 한 눈에 봐도 구분 기호는 ':'이다. ('공백'도 가능)


그런데 :(또는 '공백'은) 메시지 영역에서도 중복 사용되고 있다. 이 상태에서 :을 구분 기호로 사용하면 어떤 일이 벌어질까?

구분 기호 ':' 기준 텍스트 나누기

메시지 영역이 6개의 필드로 쪼개져버렸다. 확인해보면 알겠지만 각 필드별 데이터는 일관성도 없다. 같은 필드에 다른 성격의 데이터가 섞여 있다는 얘기.

'VIM 사용 설명서 - 2nd' 편에서 얘기했듯이 데이터 분석의 첫 번째 조건은 유효한 데이터가 중복되지 않는 필드에 저장된 테이블을 만드는 것이다.


결국 프로세스명과 메시지 영역을 온전하게 분리하려면 중복되지 않는, 유일한 구분 기호를 만들어줘야 한다. VIM의 문자열 치환 기능이 능력을 발휘할 때가 온 것.

:을 'ㅋ'으로 바꿔보자. 치환 명령어 ':%s/://'는 프로세스명과 메시지 사이에 위치한 첫 번째 :만을 'ㅋ'으로 바꿔준다. (전부 다 바꾸고 싶다면 'g' 옵션)


왜 하필 'ㅋ'일까? (일단 지겨운 로그가 왠지 친근해보이는 효과를 주고^^;) 무엇보다도 로그에 한글이 들어갈 일은 별로 없다. 설령 들어간다 해도 자음이나 모음만 들어갈 일은 더욱 없을테고.

'중복되지 않는, 유일한 구분 기호'라는 조건만 충족한다면 아무거나 상관 없다는 얘기. 결과는 다음과 같다.


pid 값 때문에 프로세스 통계 분석이 어렵다. pid 값을 지워주자. 이정도는 엑셀에서도 간단히 할 수 있다.

윈도우에서는 '['로 시작, ']'로 끝나는 모든 문자열을 의미하는 (살짝 기형적인) 정규표현식 '[*]'를 이용해서 pid 값만을 지울 수 있다. VIM에서는 '[.*]'.

다시는 엑셀을 우습게 보지 마라

결과는 이렇다.


이제 전체 데이터를 선택한 후, '삽입 > 피벗 테이블' 기능을 이용하면 통계 분석을 할 수 있다.


필드를 적당히 조합하면 일시별 프로세스의 발생 추이 추적도 가능하다.


9월에 무슨 일이 있었는지는 다음에~~

관련 글

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스