在 space 上为 grok 模式拆分日志消息
Split log message on space for grok pattern
我刚接触 grok
和 ELK
两天。
我正在努力分解基于 space 的日志消息,并使它们在 logstash
.
中显示为不同的字段
我的输入模式是:
2022-02-11 11:57:49 - app - INFO - function_name=add elapsed_time=0.0296 input_params=6_3
我想在 logstash/kibana 中看到 function_name
、elapsed_time
和 input_params
的不同字段。
目前我有一个关注.conf
input{
file{
path => "/path/to/log/file"
start_position => "beginning"
}
}
filter{
grok{
match => {"message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:log-level} %{(?<function_name>[^.]*)\.(?<elapsed_time>[^.]*)\.(?<input>[^.]*)}"}
}
date {
match => ["timestamp", "ISO8601"]
}
function_name {
match => ["function_name", "DATA"]
}
elapsed_time {
match => ["elapsed_time", "BASE16FLOAT"]
}
input {
match => ["input", "DATA"]
}
}
output{
elasticsearch{
hosts => ["localhost:9200"]
index => "math_apis"
}
stdout{codec => rubydebug}
}
但这只会在 logstash
中产生以下消息
{
"host" => "hostname",
"@timestamp" => 2022-02-11T06:27:49.404Z,
"message" => "2022-02-11 11:57:49 - app - INFO - function_name=add elapsed_time=0.0296 input_params=6_3",
"path" => "path/to/log/file",
"@version" => "1",
"tags" => [
[0] "_grokparsefailure"
]
}
您可以使用以下模式:
%{TIMESTAMP_ISO8601:timestamp} - \S+ - %{LOGLEVEL:log_level} - function_name=%{NOTSPACE:function_name} elapsed_time=%{NOTSPACE:elapsed_time} input_params=%{NOTSPACE:input}
详情:
%{TIMESTAMP_ISO8601:timestamp}
- timestamp
字段
-
- 文字字符串
\S+
- 任何一个或多个 non-whitespace 个字符
-
- 文字字符串
%{LOGLEVEL:log_level}
- LOGLEVEL
模式
- function_name=
- 文字字符串
%{NOTSPACE:function_name}
- function_name
一个或多个 non-whitespace 个字符的字段
elapsed_time=
- space 和 elapsed_time=
字符串
%{NOTSPACE:elapsed_time}
- elapsed_time
一个或多个 non-whitespace 个字符的字段
input_params=
- 文字字符串
%{NOTSPACE:input}
- input
一个或多个 non-whitespace 个字符的字段。
详细了解 Grok patterns here。
测试输出:
{
"timestamp": [
[
"2022-02-11 11:57:49"
]
],
"YEAR": [
[
"2022"
]
],
"MONTHNUM": [
[
"02"
]
],
"MONTHDAY": [
[
"11"
]
],
"HOUR": [
[
"11",
null
]
],
"MINUTE": [
[
"57",
null
]
],
"SECOND": [
[
"49"
]
],
"ISO8601_TIMEZONE": [
[
null
]
],
"log_level": [
[
"INFO"
]
],
"function_name": [
[
"add"
]
],
"elapsed_time": [
[
"0.0296"
]
],
"input": [
[
"6_3"
]
]
}
我刚接触 grok
和 ELK
两天。
我正在努力分解基于 space 的日志消息,并使它们在 logstash
.
我的输入模式是:
2022-02-11 11:57:49 - app - INFO - function_name=add elapsed_time=0.0296 input_params=6_3
我想在 logstash/kibana 中看到 function_name
、elapsed_time
和 input_params
的不同字段。
目前我有一个关注.conf
input{
file{
path => "/path/to/log/file"
start_position => "beginning"
}
}
filter{
grok{
match => {"message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:log-level} %{(?<function_name>[^.]*)\.(?<elapsed_time>[^.]*)\.(?<input>[^.]*)}"}
}
date {
match => ["timestamp", "ISO8601"]
}
function_name {
match => ["function_name", "DATA"]
}
elapsed_time {
match => ["elapsed_time", "BASE16FLOAT"]
}
input {
match => ["input", "DATA"]
}
}
output{
elasticsearch{
hosts => ["localhost:9200"]
index => "math_apis"
}
stdout{codec => rubydebug}
}
但这只会在 logstash
{
"host" => "hostname",
"@timestamp" => 2022-02-11T06:27:49.404Z,
"message" => "2022-02-11 11:57:49 - app - INFO - function_name=add elapsed_time=0.0296 input_params=6_3",
"path" => "path/to/log/file",
"@version" => "1",
"tags" => [
[0] "_grokparsefailure"
]
}
您可以使用以下模式:
%{TIMESTAMP_ISO8601:timestamp} - \S+ - %{LOGLEVEL:log_level} - function_name=%{NOTSPACE:function_name} elapsed_time=%{NOTSPACE:elapsed_time} input_params=%{NOTSPACE:input}
详情:
%{TIMESTAMP_ISO8601:timestamp}
-timestamp
字段-
- 文字字符串\S+
- 任何一个或多个 non-whitespace 个字符-
- 文字字符串%{LOGLEVEL:log_level}
-LOGLEVEL
模式- function_name=
- 文字字符串%{NOTSPACE:function_name}
-function_name
一个或多个 non-whitespace 个字符的字段elapsed_time=
- space 和elapsed_time=
字符串%{NOTSPACE:elapsed_time}
-elapsed_time
一个或多个 non-whitespace 个字符的字段input_params=
- 文字字符串%{NOTSPACE:input}
-input
一个或多个 non-whitespace 个字符的字段。
详细了解 Grok patterns here。
测试输出:
{
"timestamp": [
[
"2022-02-11 11:57:49"
]
],
"YEAR": [
[
"2022"
]
],
"MONTHNUM": [
[
"02"
]
],
"MONTHDAY": [
[
"11"
]
],
"HOUR": [
[
"11",
null
]
],
"MINUTE": [
[
"57",
null
]
],
"SECOND": [
[
"49"
]
],
"ISO8601_TIMEZONE": [
[
null
]
],
"log_level": [
[
"INFO"
]
],
"function_name": [
[
"add"
]
],
"elapsed_time": [
[
"0.0296"
]
],
"input": [
[
"6_3"
]
]
}