2017-10-27 27 views
1

Grok가 이미 정의 된 필드에서 필드를 저장할 수있는 방법이 있습니까? "log_message"결과Logstash는 필드 내의 필드를 정의합니다

grok { 
    match => [ "message", "\[%{TIMESTAMP_ISO8601:timestamp}\]\s+\[%{DATA:homebridge_app}\]\s+%{GREEDYDATA:log_message}" ] 
} 

이 같은 것들로 채워지 :

Current temperature for Entryway Thermostat is: 20.5 C 
Current humidity for Entryway Thermostat is: 60% 
Current temperature for Entryway Thermostat is: 21 C 
Current temperature for Entryway Thermostat is: 21.5 C 
Current humidity for Entryway Thermostat is: 61% 

나는 다음과 같은 필터가 있습니다. 거기에 다른 데이터가있을 수 있지만 위의 내용은 제가 관심있는 라인입니다.

시간대에 따라 습도와 온도를 차트에 표시 할 수 있기를 원하지만 log_message에 위와 같이 전체 문자열. 그 필드를 두 개로 분할하지 않고도 log_message 필드에서 정수를 저장할 수있는 방법이 있습니까? 내가 사용

전체 스택 당신은 log_message 필드에 두 번째 grok 수 필터를 추가 할 수 있습니다 Filebeat-> Logstash-> Elasticsearch-> 키바

답변

2

입니다 :

grok { 
    match => { "log_message" => [ 
     "%{NUMBER:humidity}%$", 
     "%{NUMBER:temperature} C$" 
    ] } } 
} 

참조 the grok plugin documentation :

단일 입력란에 대해 여러 패턴을 일치시켜야하는 경우 값은 패턴 배열

가 될 수 있습니다. 10
filter { 
    grok {  
     match => { "message" => [ "Duration: %{NUMBER:duration}", "Speed: %{NUMBER:speed}" ] } 
    } 
} 
+0

정확히 내가 무엇을 찾고 있었는지; 감사! 물론,이 작업을 수행하려면 break_on_match => false로 설정해야합니다. – RCross

+0

@RCross 나는이 옵션에 대해 몰랐습니다. 그러나 왜 'break_on_match'가 필요한지 이해하지 못합니다. 왜냐하면 첫 번째 패턴과 일치하는 것이 있다면 두 번째 패턴과 일치하지 않을 것이기 때문입니다. 아니면 뭔가를 놓친 것 같습니다. – baudsp

+0

죄송합니다 - 어떻게 설명 상자에 명령을 강조 표시 해야할지 모르겠지만 깨끗하지는 않았지만 요점이 'false'로 설정되어 첫 번째 일치 항목이 참일 때 Logstash가 중단되지 않도록합니다. 기본적으로 Logstash는 일치하는 즉시 표시를 중단합니다. https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html#plugins-filters-grok-break_on_match – RCross