[출처 : http://www.imp17.com/tc/myevan/231]


서버 로그는 여러명의 사용자가 엄청난 양을 만들어내기 때문에
눈으로만 분석하기는 많이 어렵습니다. 

로그 분석기를 만들어서 체크하는 것이 좋은데;
문자열 처리가 빈약한 c/c++ 보다는 강력한 문자열 처리 기능을 제공하는 스크립트 언어를 사용하는 것이 좋습니다.

Jan 30 03:20:37 new connection from [192.168.1.1] to fd: 10
위와 같은 로그는 사람이 읽기에는 쉽지만, 컴퓨터에게 이해시키기란 조금 어렵습니다.

가장 무식한 방법은 글자수 센다음 파싱하는 것입니다.
하지만 이런 코드는 로그 형식이 조금만 바뀌어도 고치기가 어려워지죠;

다른 방법으로는 split 과 find 를 사용하는 방법이 있습니다.
아무리 간단하게 작성한다해도 하나의 형식에 5~10줄 정도의 코드가 나오게 됩니다.
문제는 이런 코드들은 나중에 재활용도 쉽지않은 정크 코드인지라; 매번 새로 작성해야합니다.
인터프리터 언어의 특성상 느리기까지 하죠.

로그를 분석하는 가장 좋은 방법은 정규 표현식이라 할 수 있습니다 -_-)/


import re

NEW_CONNECTION
= re.compile("new connection from \[(\d+.\d+.\d+.\d+)\] to fd: (\d+)")

if __name__ == "__main__":
    newConnection
= NEW_CONNECTION.search("new connection from [192.168.1.1] to fd: 10")
   
if newConnection:
       
print "ip:", newConnection.group(1)
       
print "fd:", newConnection.group(2)


파싱 코드는 re.compile("new connection from \[(\d+.\d+.\d+.\d+)\] to fd: (\d+)") 한줄로 끝나게 됩니다.
로그 형식이 바뀌더라도 정규 표현식 문구만 바꾸어주면 되죠 : )

+ Recent posts