Grok 重新创建时间戳和消息
Grok recreate timestamp and message
我正在尝试为以下格式创建 grok 模式:
October 27, 2015 03:44: lorem created a new project "lorem / ipsum"
October 27, 2015 03:48: lorem created a new project "lorem / ipsum-cp"
October 27, 2015 18:38: john created a new project "john / playgroud"
October 27, 2015 18:42: joseph created a new project "joseph / test-ci"
我找不到与完整日期匹配的单个表达式,因此我执行了以下操作:
grok {
match => { "message" => "%{MONTH:month}%{SPACE}%{NUMBER:day}, %{YEAR:year}%{SPACE}%{HOUR:hour} %{NUMBER:minute}"}
}
从而为日期时间戳的所有部分创建一组字段。现在我在想什么是处理该行其余部分和重新创建时间戳的最佳方法。
我正在考虑使用 mutate 将所有字段连接在一起并通过日期过滤器对其进行解析,但我是否应该将 message
参数重写为该行的其余部分?喜欢 lorem created a new project "lorem / ipsum"
还是保持原样以反映原始行?
要将行的其余部分放入字段中,请在模式末尾使用 GREEDYDATA:
%{GREEDYDATA:remainder}
由于我将前导数据放入一个新字段,我通常会将剩余数据放回 'message' 字段:
%{GREEDYDATA:message}
这还需要在 grok{} 上设置 'overwrite' 参数。
有几种方法可以获取单个日期。正如您所建议的那样,将它们合并到 logstash 中:
mutate {
add_field => {
"myDateField" => "%{myMonth} %{myDay} %{myYear}"
}
}
那么您需要一个匹配模式的日期{}过滤器。
如果您只想要一个日期字段,那么没有理由制作所有的小字段(月、日、年)。使用 grok 模式将你想要的所有内容都拉到一个字段中:
^(?<myDateField>[^:]+):
("from the beginning of the line, everything that's not a colon goes into a field called myDateField")
另一条评论:如果模式之间总是只有一个 space,请不要使用 %{SPACE}。这样更容易阅读:
%{YEAR:year} %{HOUR:hour}
不过,如果您可能有多个 space 或其他类型的白色 space,那么请务必使用 %{SPACE}。
我正在尝试为以下格式创建 grok 模式:
October 27, 2015 03:44: lorem created a new project "lorem / ipsum"
October 27, 2015 03:48: lorem created a new project "lorem / ipsum-cp"
October 27, 2015 18:38: john created a new project "john / playgroud"
October 27, 2015 18:42: joseph created a new project "joseph / test-ci"
我找不到与完整日期匹配的单个表达式,因此我执行了以下操作:
grok {
match => { "message" => "%{MONTH:month}%{SPACE}%{NUMBER:day}, %{YEAR:year}%{SPACE}%{HOUR:hour} %{NUMBER:minute}"}
}
从而为日期时间戳的所有部分创建一组字段。现在我在想什么是处理该行其余部分和重新创建时间戳的最佳方法。
我正在考虑使用 mutate 将所有字段连接在一起并通过日期过滤器对其进行解析,但我是否应该将 message
参数重写为该行的其余部分?喜欢 lorem created a new project "lorem / ipsum"
还是保持原样以反映原始行?
要将行的其余部分放入字段中,请在模式末尾使用 GREEDYDATA:
%{GREEDYDATA:remainder}
由于我将前导数据放入一个新字段,我通常会将剩余数据放回 'message' 字段:
%{GREEDYDATA:message}
这还需要在 grok{} 上设置 'overwrite' 参数。
有几种方法可以获取单个日期。正如您所建议的那样,将它们合并到 logstash 中:
mutate {
add_field => {
"myDateField" => "%{myMonth} %{myDay} %{myYear}"
}
}
那么您需要一个匹配模式的日期{}过滤器。
如果您只想要一个日期字段,那么没有理由制作所有的小字段(月、日、年)。使用 grok 模式将你想要的所有内容都拉到一个字段中:
^(?<myDateField>[^:]+):
("from the beginning of the line, everything that's not a colon goes into a field called myDateField")
另一条评论:如果模式之间总是只有一个 space,请不要使用 %{SPACE}。这样更容易阅读:
%{YEAR:year} %{HOUR:hour}
不过,如果您可能有多个 space 或其他类型的白色 space,那么请务必使用 %{SPACE}。