2017-12-07 14 views
0

예를 들어 <key>:<value>-<key>:<value>.log과 같은 형식의 파일 이름이 있습니다. pr:64-author:mxinden-platform:aws.log은 테스트 실행의 로그를 포함합니다.Logstash : 파일 이름을 기반으로 한 동적 필드 이름

나는 파일의 각 라인을 logstash를 통해 elasticsearch로 스트리밍하려고합니다. 각 줄은 별도의 문서로 취급되어야합니다. 각 문서는 파일 이름에 따라 필드를 가져와야합니다. 그래서 예. 위의 예에서 로그 라인 17-12-07 foo something happened barpr 값이 64이고 author 값이 mxinden이고 platform 값이 aws 인 경우를 가정 해 봅시다.

logstash 구성을 작성한 시점에서 필드의 이름을 모른다 ().

파일 이름에 포함 된 필드를 기반으로 각 행에 필드를 어떻게 동적으로 추가합니까?

정적 접근 방식은 지금까지입니다 : 파일 이름 구조에

filter { 
    mutate { add_field => { "file" => "%{[@metadata][s3][key]}"} } 
    else { 
    grok { match => { "file" => "pr:%{NUMBER:pr}-" } } 
    grok { match => { "file" => "author:%{USERNAME:author}-" } } 
    grok { match => { "file" => "platform:%{USERNAME:platform}-" } } 
    } 
} 

변경이 괜찮

.

+0

귀하의 질문을 이해한다면 100 % 확신 할 수는 없지만 [여기] (https://stackoverflow.com/questions/22916200/logstash-how-to-add)에 설명 된대로 파일 경로와 일치시킬 수는 없습니다. -file-name-as-a-field? rq = 1). % {WORD : author} - % {WORD} : {{{{경로}, % {GREEDYDATA} % {단어} : % {번호 : pr} - % {단어} : % {WORD : platform} .log "] } }'당신을 위해 일할 수 있습니다. ... – Phonolog

+0

@Phonolog하지만 그건 내가 알기에 파일 이름에있는 키를 의미합니다. 나는 예를 들어 키를 모른다. 'author','platform','pr', ..., 그 시점에서. 나는 열쇠를 동적으로 결정하고 싶다. 사용 사례는 Logstash 구성을 변경하지 않고 파일 이름에 새 필드를 추가 할 수 있기를 원합니다. – mxinden

+2

내가 할 방법은 전체 파일 이름을 필드 (.log 제외)로 가져온 다음 kv 필터를 사용하여 해당 필드에서 split = "-"필드와 split = ":"로 분할하는 것입니다. –

답변

0

@ 단 - 그리피스 comment에 따라 내 자신의 질문에 대답 :

filter { 
    kv { 
     source => "file" 
     field_split => "," 
    } 
    } 

file가에서 추출한 필드 : pr=64,author=mxinden,platform=aws.log 같은 파일에 대한

해결하는 것은 예를 들어 같은 Elasticsearch kv filter을 사용하는 것입니다 AWS S3 입력 플러그인을 통한 파일 이름.