2017-02-14 7 views
1

Grok 파일러를 사용하는 동안 문제가 발생했습니다. 다음은 클래스 이름에 $가 없을 때까지 예상대로 작동하는 필터입니다. 스레드 이름이 인 경우 PropertiesReader $이 실패합니다. 특수 문자로 클래스 이름을 파싱 할 수 있도록 사용할 수있는 다른 방법은 무엇입니까?

filter { 
     grok { 
      match => [ "message", "%{TIMESTAMP_ISO8601:LogDate} %{LOGLEVEL:loglevel} %{WORD:threadName}:%{NUMBER:ThreadID} - %{GREEDYDATA:Line}" ] 
     } 
     json { 
      source => "Line" 
     } 
     mutate { 
      remove_field => [ "Line" ] 
     } 
} 

답변

0

특수 문자가없는 threadname의 패턴으로 WORD을 사용하고 있습니다. 이를 확인하려면 다음 패턴을 살펴 보겠습니다. WORD \b\w+\b

맞춤 패턴을 사용하십시오.

MYPATTERN ([A-z]+\$?) 

그런 다음이처럼 설정에서 사용할 수 있습니다 : 당신은 docs

+0

감사합니다. – BobCoder

2

grok 패턴 이름으로 제한되지 않습니다. 모든 정규식을 수행 할 수 있습니다. 예를 들어 %{WORD:threadName} 대신 :이 아닌 문자와 일치하는 (?<threadName>[^:]+)을 넣고 threadName에 할당 할 수 있습니다.

0

에서 정의 패턴에 대한 자세한 정보를 찾을 수 있습니다

grok { 
    patterns_dir => ["/path/to/pattern/dor"] 
    match => [ "message", "%{TIMESTAMP_ISO8601:LogDate} %LOGLEVEL:loglevel} %{MYPATTERN:threadName}:%{NUMBER:ThreadID} - %GREEDYDATA:Line}" ] 
    } 

다만이 같은 파일을 descibe threadName에 공백이나 콜론이 포함되지 않는 경우 %{WORD:threadName} 대신 %{DATA:threadName}으로 시도 할 수도 있습니다.