我有这个配置文件
input {
stdin {}
file {
type => "txt"
path => "C:\Users\Gck\Desktop\logsatash_practice\input.txt"
start_position=>"beginning"
}
}
filter {
grok {
match => [ "message", "%{DATE:timestamp} %{IP:client} %{WORD:method} %{WORD:text}"]
}
date {
match => [ "timestamp", "MMM-dd-YYYY-HH:mm:ss" ]
locale => "en"
}
}
output {
file {
path => "C:\Users\Gck\Desktop\logsatash_practice\op\output3.txt"
}
}
让我们说这是我的意见:
MAY-08-2015-08:00:00 55.3.244.1 GET hello
MAY-13-2015-13:00:00 56.4.245.2获取世界
运行之后,我收到一条消息:grokparse失败。
这是输出:
{ “消息”: “MAY-08-2015-08:00:00 \ t55.3.244.1 \ thello \ r”, “@版本”: “1”, “@时间戳”:“2015-05 -11T12:51:05.268Z “ ”类型“: ”TXT“, ”宿主“: ”用户-PC“, ”路径“: ”C:\用户\ GCK \桌面\ logsatash_practice \ input.txt中“,” 标签“:[” _ grokparsefailure“]}
{ “消息”: “MAY-13-2015-13:00:00 \ t56.4.245.2 \ t世界\ r”, “@版本”: “1”, “@时间戳”:“2015-05 -11T12:51:05.269Z “ ”类型“: ”TXT“, ”宿主“: ”用户-PC“, ”路径“: ”C:\用户\ GCK \桌面\ logsatash_practice \ input.txt中“,” 标签“:[” _ grokparsefailure“]}
我做错了什么?
同样重要 - 是否有任何指南能够以清晰的方式总结这种过滤事物?弹性导轨不够详细。
答案 0 :(得分:1)
DATE grok模式的定义如下:
DATE %{DATE_US}|%{DATE_EU}
DATE_US和DATE_EU的定义如下:
DATE_US %{MONTHNUM}[/-]%{MONTHDAY}[/-]%{YEAR}
DATE_EU %{MONTHDAY}[./-]%{MONTHNUM}[./-]%{YEAR}
我可以继续,但已经很清楚,这与您的日志消息示例的实际内容不符:
MAY-08-2015-08:00:00 55.3.244.1 GET hello
没有与此日期格式匹配的库存格局模式,但很容易将自定义日期格式组合在一起。另请注意,日志消息中的标记之间的分隔符不是空格而是制表符。我们可以使用\s
来匹配任何空格字符。工作示例:
(?<timestamp>%{WORD}-%{MONTHDAY}-%{YEAR}-%{TIME})\s%{IP:client}\s%{WORD:method}\s%{WORD:text}
同样重要 - 是否有任何指南能够以清晰的方式总结这种过滤事物?弹性导轨不够详细。
除了特定于grok的%{PATTERN_NAME:variable}
表示法之外,这只是简单的正则表达式,并且有许多其他地方的介绍性指南。