如何在Logstash配置中格式化日期

时间:2016-06-06 07:46:13

标签: regex logstash logstash-grok logstash-configuration

我使用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模式运行正常。我将这些解析条目发送到我自己创建的rest base api。

配置:

output {
    stdout { }
     http {
        url => "http://localhost:8086/messages"
        http_method => "post"
        format => "json"
        mapping => ["TimeStamp","%{TimeStamp}","CorrelationId","986565","Severity","NORMAL","MessageType","%{MessageType}","MessageTitle","%{MessageTitle}","Message","%{Message}"]
    }
}

在当前输出中,我从日志中获取日期:

当前输出:

{ 
"TimeStamp": "2016-05-30 23:02:02,602"
}

问题陈述:

但问题是我的API不期望这种格式的日期,它期望通用xsd类型的日期,即日期时间格式。另外,如下所述:

预期输出:

{ 
"TimeStamp": "2016-05-30T23:02:02:602"
}

有人可以指导我,我必须在我的过滤器或输出映射中添加哪些更改才能实现此目标。

1 个答案:

答案 0 :(得分:1)

为了改造

2016-05-30 23:02:02,602

到XSD日期时间格式

2016-05-30T23:02:02.602

您只需添加mutate/gsub filter即可将空格字符替换为T,替换为.

filter {
  mutate {
    gsub => [
      "TimeStamp", "\s", "T",
      "TimeStamp", ",", "."
    ]
  }
}