2012-04-13 4 views
2

로그 파일을 보면서 나는 종종 같은 오류 메시지를 여러 번 보게됩니다. 물론 두 줄은 타임 스탬프, 사용자 이름, IP 주소 등으로 인해 결코 동일하지 않습니다.로그 파일의 백분율 차이

"퍼센트 차이"를 설정하는 방법을 찾고 90 %와 비슷한 이미보고 된 오류 메시지 또 다른 생각은 입니다. 항상도 타임 스탬프 차이를 무시합니다.

절차 :

  1. 사용자 입력 검색어 (들) (정규 표현식 또는 간단한 텍스트 중 하나)의 차이에 대한
  2. 사용자 입력을 허용
    [시작]
  3. 그렙 문자열 일치하는 검색어를 찾아 전송 새 텍스트 파일
  4. Grep이 로그 검색을 계속하고 같은 오류 메시지를 찾습니다. 차이점은 시간 소인, 날짜 및 가능하면 사용자 이름 일 수 있습니다. grep은 이미 새 파일에있는 내용과 90 % 이상 유사하기 때문에 grep을 복사하여 검색을 계속하지 않습니다.
  5. Grep은 검색어와 일치하는 줄을 찾습니다. 라인이 90 % 미만이기 때문에 새로운 파일로 복사되고 grep이 미래의 결과와 일치하는 또 다른 라인이됩니다.

* 편집 : 처음으로 삭제하지 못해 죄송합니다. 필요한 경우 기꺼이 더 설명해 드리겠습니다.

감사합니다.

  • Log.1 - DD : MM : YYYY의 HH : MM : SS : MS 오류 - 사용자가 IPADDRESS
  • Log.1에 로그인하는 데 실패 - DD : MM : YYYY의 HH를 : MM : SS : MS 하드웨어
  • Log.2 부팅시 실패 - DD를 : MM : YYYY의 HH : MM : SS : MS 자원이 뻗어있다 얇은 경고 - 확인 RAM
+1

여기에 어떤 질문이 있습니까? – zigdon

+0

어떤 Perl 함수 또는 함수 조합을 사용하면 텍스트 줄 간의 백분율 차이를 식별 할 수 있습니까? Grep이 오류 메시지를 찾고 새 파일로 복사합니다. Grep은 동일한 오류 메시지를 표시하지만 시간 스탬프가 다릅니다. 오류 메시지는 90 % 이상 유사하므로 무시하고 계속 진행합니다. 반복, 반복, 반복. –

+0

@ r.misc : 질문을 편집하여 추가 정보를 추가하고 원하는 내용을 설명해야합니다. – Borodin

답변

3

내가 어떤 전체 밖으로 외 잘 모르는 것 같아요 the-box solution 그러나 Text::Levenshtein 및 유사한 알고리즘을 사용하면 비슷한 일반적인 문자열을 다른 문자열과 유사하게 만들 수 있습니다.

+0

그건 내가 찾고있는 것과 꽤 비슷해 보인다. 나는 단지 그것이 충분히 강력하지 않다는 것을 두려워한다. 그리고 추가 mod를 다운로드 할 필요가 없다면 좋을 것입니다. 기본 패키지와 비슷한 것을 어떻게 구현할 수 있습니까? –

+0

levenshtein 알고리즘을 직접 작성할 수 있습니다. 그것의 끔찍하게 복잡하지 않습니다. wikipedia artice를 참조하십시오 : http://en.wikipedia.org/wiki/Levenshtein_distance – bot403

+0

텍스트 줄을 비교하는 즉시 사용 가능한 해결책에 가장 가까운 것이 있다면, 제가 취해 보겠습니다. 제 3 자 이외의 모든 것을 유지하기 위해 몇 줄을 더 써도 상관 없습니다. –

2

또 다른 아이디어는 로그 메시지를 타임 스탬프로 캐시하는 것이므로 마지막 분, 즉 분에 본 메시지를 반복하지 않아도됩니다.

my %msg_cache =(); 
sub log_filter { 
    my $msg = shift; 
    if (defined($msg_cache{$msg}) && $msg_cache{$msg} < time-60) { 
     # we've logged this message in the last minute - skip 
     return; 
    } 
    $msg_cache{$msg} = time; 
    return 1; 
} 
+0

그건 너무 깔끔한 생각입니다. 내가 생각했던 또 다른 뭔가는 각각의 고유 한 오류 메시지 앞뒤에 3-5 줄을 채우는 것입니다. 이 방법을 통해 우리는 메시지가 무엇인지 알아낼 수있었습니다. –