2016-06-01 9 views
0

logstashを使用して入力ログファイルからログエントリを解析しています。フォーマット方法HTTPリクエストを送信する前にlogstash内のメッセージ

LogLine:

TID: [0] [] [2016-05-30 23:02:02,602] INFO {org.wso2.carbon.registry.core.jdbc.EmbeddedRegistryService} - Configured Registry in 572ms {org.wso2.carbon.registry.core.jdbc.EmbeddedRegistryService} 

GROKパターン:

TID:%{SPACE}\[%{INT:SourceSystemId}\]%{SPACE}\[%{DATA:ProcessName}\]%{SPACE}\[%{TIMESTAMP_ISO8601:TimeStamp}\]%{SPACE}%{LOGLEVEL:MessageType}%{SPACE}{%{JAVACLASS:MessageTitle}}%{SPACE}-%{SPACE}%{GREEDYDATA:Message} 

GROKパターンが正常に動作しています。今、私は、この構文解析の出力を変換された方法で私の休憩サービスに送りたいと思っています。

予想される出力:

{ 
    "MessageId": "654656", 
    "TimeStamp": "2001-12-31T12:00:00", 
    "CorrelationId": "986565", 
    "Severity": "NORMAL", 
    "MessageType": "INFO", 
    "MessageTitle": "TestTittle", 
    "Message": "Sample Message", 
    "MessageDetail": { 
    "SourceSystemId": "65656", 
    "ServerIP": "192.168.1.1", 
    "HostName": "wedev.101", 
    "ProcessId": "986", 
    "ProcessName": "JAVA", 
    "ThreadId": "65656", 
    "MessageComponentName": "TestComponent" 
    } 
} 

問題文:

私は私の残りの部分ベースのサービスに送信されたJSONメッセージは、上記のformat.Isで可能であることを望みますlogstashではハードコーディングされた値をいくつか追加し、その値を使ってログを解析することもできます。

input { 

    file { 
     path => "C:\WSO2Environment\wso2esb-4.8.1\repository\logs\wso2carbon.log" 
     type => "wso2" 
     codec => multiline { 
      charset => "UTF-8" 
      multiline_tag => "multiline" 
      negate => true 
      pattern => "^%{YEAR}\s%{MONTH}\s%{MONTHDAY}\s%{TIME}:\d{3}\s%{LOGLEVEL}" 
      what => "previous" 
     } 

    } 
} 

filter { 

    if [type] == "wso2" { 
     grok { 
      match => [ "message", "TID:%{SPACE}\[%{INT:SourceSystemId}\]%{SPACE}\[%{DATA:ProcessName}\]%{SPACE}\[%{TIMESTAMP_ISO8601:TimeStamp}\]%{SPACE}%{LOGLEVEL:MessageType}%{SPACE}{%{JAVACLASS:MessageTitle}}%{SPACE}-%{SPACE}%{GREEDYDATA:Message}" ] 
      add_tag => [ "grokked" ]   
     } 
     if !("_grokparsefailure" in [tags]) { 
      date { 
       match => [ "log_timestamp", "yyyy MMM dd HH:mm:ss:SSS" ] 
       add_tag => [ "dated" ] 
      } 
     } 
    } 
    if ("multiline" in [tags]) { 
     grok { 
      match => [ "message", "Service:(?<log_service>\s[\w]+)[.\W]*Operation:(?<log_operation>\s[\w]+)" ] 
      add_tag => [ "servicedetails" ] 
      tag_on_failure => [ "noservicedetails" ]   
     } 
    } 
} 

output { 
# stdout { } 
    http { 
     url => "http://localhost:8087/messages" 
     http_method => "post" 
     format => "json" 
    } 
} 

注:以下の

は私logstash-confのファイルです

私はまだので、私のlogstash構成ファイルでその部分を無視してください、複数行の書式を設定する必要があります。

答えて

1

イベントにフィールドを追加する場合は、イベントから解析されたデータを含む可能性があります。ほとんどのLogstashフィルタで実装されているadd_field機能を使用することをお勧めします。

これを行う最も簡単な方法は、必要なadd_field関数でmutateフィルタを追加することです。

mutate { 
    add_field => { 
    "foo_%{somefield}" => "Hello world, from %{host}" 
    } 
} 

Here's the official reference

関連する問題