2016-06-01 200 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} 

神交模式:

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

的神交模式是工作的罚款。现在我想以转换的方式将此解析的输出发送到我的休息服务。

预期输出:

{ 
    "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中,我还可以添加一些硬编码值并使用解析日志时获得的值。

以下是我logstash-conf的文件:

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配置文件的一部分。

回答

1

要向事件添加字段(可能包括从事件解析的数据),您可能需要使用大多数Logstash过滤器实现的add_field功能。

要做到这一点,最简单的方法是通过添加一个mutate过滤器和任何你想要的add_field函数。

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

Here's the official reference

相关问题