我使用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"
}
有人可以指导我,我必须在我的过滤器或输出映射中添加哪些更改才能实现此目标。
答案 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", ",", "."
]
}
}