2014-09-14 6 views
4

필드를 구분하는 구분 기호가없는 고정 된 위치 (열) 파일이 있습니다. 각 필드에는 자체 시작 위치와 길이가 있습니다. (-) 실제 필드 스키마에서 허용 된보다 짧은 경우 상기 데이터의 샘플을 보여주고, 실제 파일 공간을 포함Logstash 그루크 필터 도움말 - 고정 위치 파일

520140914191193386---------7661705508623855646---1595852965---133437--the lazy fox jumping over-----------------------212.75.12.85--- 

I 대시를 사용하면서이 다음은 데이터의 예이다.

이 경우 스키마는 다음과 같습니다 이상적으로

UsedID (start position 1, length 27) 
SystemID (start position 28, length 22) 
SampleID (start position 50, length 13) 
LineID (start position 63, length 8) 
Text (start position 71, length 48) 
IP (start position119, length 15) 

, 나는이 종류의 파일과 구문 분석하려면 어떻게 (후행 공백없이) logstash에

UsedID:520140914191193386 
SystemID:7661705508623855646 
SampleID:1595852965 
LineID:133437 
Text:the lazy fox jumping over 
IP:212.75.12.85 

을 다음 필드 값을 얻을 것 그로 크?

답변

7

내가 두 단계 프로세스 가고 싶어 : 필드에

  • 분할 데이터의 각 필드

의 끝에서

  • 스트립 빈 데이터 각 필드가 알려진 길이를 가지고 있기 때문에, .{27}과 같은 정규식 패턴을 사용하여 일치시킬 수 있습니다. (?<user_id>.{27})

    당신은 grok debugger에서 전체 패턴을 테스트 할 수 있지만이 같은 뭔가 길이 기반의 분할을 달성해야합니다 :

    grok 수에서, 당신과 같이 필드의 이름을 지정할 수 있습니다

    (?<user_id>.{27})(?<system_id>.{22})(?<sample_id>.{13})(?<line_id>.{8})(?<text>.{48})(?<ip>.{15}) 
    

    당신 추가 문자는 모두 공백 문자이므로 mutate filterstrip option을 사용하여 정리할 수 있습니다.

    filter { 
        grok { 
         match => ["message", "(?<user_id>.{27})(?<system_id>.{22})(?<sample_id>.{13})(?<line_id>.{8})(?<text>.{48})(?<ip>.{15})"] 
        } 
    
        mutate { 
         strip => [ 
          "user_id", 
          "system_id", 
          "sample_id", 
          "line_id", 
          "text", 
          "ip" 
         ] 
        } 
    } 
    
    : 다음과 같이 보일 수 모두 함께

    ,