【问题标题】:How to format date in Logstash Configuration如何在 Logstash 配置中格式化日期
【发布时间】:2016-06-06 07:46:13
【问题描述】:

我正在使用 logstash 从输入日志文件中解析日志条目。

日志线:

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"
}

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

【问题讨论】:

  • 你确定2016-05-30T23:02:02:602?不应该是 2016-05-30T23:02:02.602 ,即毫秒前的句点。

标签: regex logstash logstash-grok logstash-configuration


【解决方案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", ",", "."
    ]
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 2011-01-31
    • 2014-04-18
    • 2011-06-17
    相关资源
    最近更新 更多