2012-10-27 6 views
1

이것은 R을 사용하여 로그 파일을 구문 분석하는 가장 좋은 방법입니다.R을 사용하여 웹 서버 로그를 구문 분석하는 방법은 무엇입니까?

- - - [20/Nov/2011:01:16:29 +0100] "POST /csw/servlet/cswservlet HTTP/1.1" 200 279 
- - - [20/Nov/2011:01:16:29 +0100] "GET /DescargaFenomenos/index.jsp HTTP/1.1" 200 11769 
- - - [20/Nov/2011:01:16:29 +0100] "GET /IDEE-ServicesSearch/ServicesSearch.html?locale=es HTTP/1.1" 200 1665 
- - - [20/Nov/2011:01:16:29 +0100] "GET /search/indexLayout.jsp?PAGELANGUAGE=es HTTP/1.1" 200 9874 
- - - [20/Nov/2011:01:16:29 +0100] "GET /clientesIGN/wmsGenericClient/index.html?lang=ES HTTP/1.1" 200 12058 
- - - [20/Nov/2011:01:16:30 +0100] "POST /csw/servlet/cswservlet HTTP/1.1" 200 258038 
- - - [20/Nov/2011:01:17:09 +0100] "GET //DescargaFenomenos/index.jsp HTTP/1.1" 200 11769 
- - - [20/Nov/2011:01:17:33 +0100] "GET //DescargaFenomenos/index.jsp HTTP/1.1" 200 11769 
- - - [20/Nov/2011:01:17:33 +0100] "GET //show.do?to=pideep_pidee.ES HTTP/1.1" 200 26647 
192.168.69.10, 62.97.81.202 - - [20/Nov/2011:01:17:34 +0100] "POST /csw/?locale=es HTTP/1.0" 200 2536 
192.168.69.10, 62.97.81.202 - - [20/Nov/2011:01:17:34 +0100] "GET /DescargaFenomenos/index.jsp HTTP/1.0" 200 11769 
192.168.69.10, 62.97.81.202 - - [20/Nov/2011:01:17:34 +0100] "GET /clientesIGN/wmsGenericClient/index.html?lang=ES HTTP/1.0" 200 12058 
- - - [20/Nov/2011:01:17:39 +0100] "GET //csw/servlet/cswservlet?request=GetCapabilities&service=CSW&version=2.0.2 HTTP/1.1" 200 8867 
- - - [20/Nov/2011:01:17:46 +0100] "GET //csw/servlet/cswservlet?request=GetCapabilities&service=CSW&version=2.0.2 HTTP/1.1" 200 8867 
- - - [20/Nov/2011:01:18:10 +0100] "GET //show.do?to=pideep_pidee.ES HTTP/1.1" 200 26647 
- - - [20/Nov/2011:01:19:01 +0100] "GET //DescargaFenomenos/index.jsp HTTP/1.1" 200 11769 

두 줄의 IP를 한 줄 (내외부)에 갖는 것과 같은 경계 사례를 고려해야합니다.

감사합니다.

+0

. 내 질문은 결국 데이터를 어떻게 보이게할까요? –

+0

bitchy regex 작성 준비. 태그 된 표현식과'gsub'는 친구입니다. – aL3xa

+0

당신의 삶을 더 편하게하고 싶다면 아파치는 로그 파일의 모습을 매우 융통성있게 지정합니다. 이 "Common Log"형식은 공간적으로 분리 된 것들이 절반이고, 나머지 절반은 대괄호로 구분되고 나머지 반은 인용되며 나머지 반은 쉼표로 구분되므로 고통이 따른다. 단지 추가하지 않는다. 쪽으로. 재구성하고 로그를 정상적으로 만드는 방법은 http://httpd.apache.org/docs/1.3/logs.html을 참조하십시오 (웹 서버에 대한 액세스 권한이 있다고 가정). – Spacedman

답변

3

이 예의 경우 선행 대시를 두 개의 NA로 바꾸고 쉼표를 공백으로 바꾸면됩니다. Spacedman이 날짜 구문 분석에 대한 질문 read.table()

datlog <- readLines(textConnection('- - - [20/Nov/2011:01:16:29 +0100] "POST /csw/servlet/cswservlet HTTP/1.1" 200 279 
- - - [20/Nov/2011:01:16:29 +0100] "GET /DescargaFenomenos/index.jsp HTTP/1.1" 200 11769 
- - - [20/Nov/2011:01:16:29 +0100] "GET /IDEE-ServicesSearch/ServicesSearch.html?locale=es HTTP/1.1" 200 1665 
- - - [20/Nov/2011:01:16:29 +0100] "GET /search/indexLayout.jsp?PAGELANGUAGE=es HTTP/1.1" 200 9874 
- - - [20/Nov/2011:01:16:29 +0100] "GET /clientesIGN/wmsGenericClient/index.html?lang=ES HTTP/1.1" 200 12058 
- - - [20/Nov/2011:01:16:30 +0100] "POST /csw/servlet/cswservlet HTTP/1.1" 200 258038 
- - - [20/Nov/2011:01:17:09 +0100] "GET //DescargaFenomenos/index.jsp HTTP/1.1" 200 11769 
- - - [20/Nov/2011:01:17:33 +0100] "GET //DescargaFenomenos/index.jsp HTTP/1.1" 200 11769 
- - - [20/Nov/2011:01:17:33 +0100] "GET //show.do?to=pideep_pidee.ES HTTP/1.1" 200 26647 
192.168.69.10, 62.97.81.202 - - [20/Nov/2011:01:17:34 +0100] "POST /csw/?locale=es HTTP/1.0" 200 2536 
192.168.69.10, 62.97.81.202 - - [20/Nov/2011:01:17:34 +0100] "GET /DescargaFenomenos/index.jsp HTTP/1.0" 200 11769 
192.168.69.10, 62.97.81.202 - - [20/Nov/2011:01:17:34 +0100] "GET /clientesIGN/wmsGenericClient/index.html?lang=ES HTTP/1.0" 200 12058 
- - - [20/Nov/2011:01:17:39 +0100] "GET //csw/servlet/cswservlet?request=GetCapabilities&service=CSW&version=2.0.2 HTTP/1.1" 200 8867 
- - - [20/Nov/2011:01:17:46 +0100] "GET //csw/servlet/cswservlet?request=GetCapabilities&service=CSW&version=2.0.2 HTTP/1.1" 200 8867 
- - - [20/Nov/2011:01:18:10 +0100] "GET //show.do?to=pideep_pidee.ES HTTP/1.1" 200 26647 
- - - [20/Nov/2011:01:19:01 +0100] "GET //DescargaFenomenos/index.jsp HTTP/1.1" 200 11769')) 
datlog <- gsub("^-", "NA NA", datlog) 
datlog <- sub("\\,", " ", datlog) 
datlog<-read.table(text=datlog, fill=TRUE) 
datlog 

과 그런 다음 구문 분석 할 수 있습니다 : 정규 표현식은 아마 당신이 펄에서하는 것과 유사한이, 구문 분석하는 데 사용할 수 있습니다

datlog[['dtime']] <- as.POSIXct(paste(sub("\\[", "", datlog[[5]]), 
             sub("\\]", "", datlog[[6]])), 
           format="%d/%b/%Y:%H:%M:%S %z") 
+0

쿼리에 쉼표가 있으면 실패합니까? 나는 그들이 도망 갈 필요가 있다고 생각하지 않는다. 분명히 날짜를 파싱하는 작업이 아직 남아 있습니다. – Spacedman

+0

정규식 패턴을 의미하는 경우 이스케이프 처리가 필요하지 않지만 많은 다른 불필요한 이스케이프 처리와 달리 오류가 발생하지 않습니다. "파싱"에 대한 요청은 막연합니다. 또한 HTML 요청에서 정보를 추출하려고한다고 상상할 수도 있습니다. –

+0

아니요, \t GET 경로에 쉼표가 없습니다. 로그 형식은 대시 또는 하나 이상의 쉼표 공백으로 구분 된 IP 주소, 세 번 반복, 대괄호로 묶은 날짜, 인용 된 요청, 상태 코드, 크기입니다. 피들리! – Spacedman

관련 문제