2013-11-21 2 views
2

Logstash를 사용하여 Glassfish 4 로그 파일을 ElasticSearch 싱크에 전달하고 있습니다. Logstash를 사용하여 메시지 필드에서 후행 줄 바꿈을 제거하려면 어떻게합니까?메시지 필드에서 후행 줄 바꿈을 제거하는 방법

내 이벤트는 다음과 같습니다

{ 
    "@timestamp" => "2013-11-21T13:29:33.081Z", 
    "message" => "[2013-11-21T13:29:32.577+0000] [glassfish 4.0] [INFO] [] [javax.resourceadapter.mqjmsra.lifecycle] [tid: _ThreadID=142 _ThreadName=Thread-43] [timeMillis: 1385040572577] [levelValue: 800] [[\n MQJMSRA_RA1101: GlassFish MQ JMS Resource Adapter stopped.]]\n", 
    "@version" => "1", 
    "tags" => ["multiline", "date_filtered"], 
    "host" => "myhost", 
    "path" => "../server.log" 
} 

답변

2

당신은 공백을 precending와 모든 라인 이전 라인에 속하는 것으로, logstash에게 올바른 패턴으로 여러 필터를 사용해야합니다. 이 행을 conf 파일에 추가하십시오.

filter{ 
    ... 
    multiline { 
    type => "gflogs" 
    pattern => "\[\#\|\d{4}" 
    negate => true 
    what => "previous" 
    } 
    ... 
} 

는 또한 타임 스탬프를 처리하고 색인에 beeing에서 불규칙한 선을 필터링 할 grok 수 플러그인을 포함 할 수 있습니다.

는 동일한 시스템

이 나를 위해 일
input { 
    stdin { 
    type => "stdin-type" 
    } 

    file { 
    path => "/path/to/glassfish/logs/*.log" 
    type => "gflogs" 
    } 
} 

filter{ 
    multiline { 
    type => "gflogs" 
    pattern => "\[\#\|\d{4}" 
    negate => true 
    what => "previous" 
    } 

    grok { 
    type => "gflogs" 
    pattern => "(?m)\[\#\|%{TIMESTAMP_ISO8601:timestamp}\|%{LOGLEVEL:loglevel}\|%{DATA:server_version}\|%{JAVACLASS:category}\|%{DATA:kv}\|%{DATA:message}\|\#\]" 
    named_captures_only => true 
    singles => true 
    } 

    date { 
    type => "gflogs" 
    match => [ "timestamp", "ISO8601" ] 
    } 

    kv { 
    type => "gflogs" 
    exclude_tags => "_grokparsefailure" 
    source => "kv" 
    field_split => ";" 
    value_split => "=" 
    } 
} 

output { 
    stdout { codec => rubydebug } 
    elasticsearch { embedded => true } 
} 

에 단일 logstash 인스턴스에 완전한 스택을 참조하십시오. 벼룩은 또한 logstash-usergroup에이 포스트를 본다. 나는 또한 위대한 최신 조언 logstash book 수 있습니다. Logstash 작성자의 작업을 지원하는 좋은 방법이기도합니다.

JUG-Berlin 이벤트에서 만나 뵙기를 바랍니다.

10

두 번째 솔루션은 mutate filter of Logstash을 사용하고 있습니다. 필드의 값을 제거 할 수 있습니다.

filter { 
    # Remove leading and trailing whitspaces (including newline etc. etc.) 
    mutate { 
    strip => "message" 
    } 
} 
+0

여러 줄 필터를 사용할 때 작동하지 않았습니다. \ r \ n (\ n 혼자 충분하지 않았습니다) 및 빈 문자열이있는 공백을 대체하기 위해 gsub을 사용했습니다. – LogicalKip