使用 Logstash 支持不同类型的日志
supporting different kind of logs with Logstash
我正在尝试使用 Logstash 收集日志,其中我在同一个文件中有不同类型的日志。
我想提取某些字段,如果它们存在于日志中,否则做其他事情。
input{
file {
path => ["/home/ubuntu/XXX/XXX/results/**/log_file.txt"]
start_position => "beginning"
}
}
filter {
grok{
match => { "message" => ["%{WORD:logger} %{SPACE}\-%{SPACE} %{LOGLEVEL:level} %{SPACE}\-%{SPACE} %{DATA:message} %{NUMBER:score:float}",
"%{WORD:logger} %{SPACE}\-%{SPACE} %{LOGLEVEL:level} %{SPACE}\-%{SPACE} %{DATA:message}"]}
}
}
output{
elasticsearch {
hosts => ["X.X.X.X:9200"]
}
stdout { codec => rubydebug }
}
例如日志类型1是:
root - 信息 - 最佳成绩:35.732
类型 2 是:
root - 信息 - 开始实验
我面临的一个问题是,当消息不包含数字时,该字段在创建的 JSON 中仍然作为 null 存在,这使我无法在 Kibana 中使用所需的功能。
一个选项是在未定义字段时在 logstash 上添加一个标签,以便能够在 kibana 端轻松进行过滤。 null值只在elasticsearch中插入时设置(在logstash端,该字段未定义)
在你的情况下,这个解决方案看起来像这样:
filter {
grok{
match => { "message" => ["%{WORD:logger} %{SPACE}\-%{SPACE} %{LOGLEVEL:level} %{SPACE}\-%{SPACE} %{DATA:message} %{NUMBER:score:float}",
"%{WORD:logger} %{SPACE}\-%{SPACE} %{LOGLEVEL:level} %{SPACE}\-%{SPACE} %{DATA:message}"]}
}
if ![score] {
mutate { add_tag => [ "score_not_set" ] }
}
}
我正在尝试使用 Logstash 收集日志,其中我在同一个文件中有不同类型的日志。 我想提取某些字段,如果它们存在于日志中,否则做其他事情。
input{
file {
path => ["/home/ubuntu/XXX/XXX/results/**/log_file.txt"]
start_position => "beginning"
}
}
filter {
grok{
match => { "message" => ["%{WORD:logger} %{SPACE}\-%{SPACE} %{LOGLEVEL:level} %{SPACE}\-%{SPACE} %{DATA:message} %{NUMBER:score:float}",
"%{WORD:logger} %{SPACE}\-%{SPACE} %{LOGLEVEL:level} %{SPACE}\-%{SPACE} %{DATA:message}"]}
}
}
output{
elasticsearch {
hosts => ["X.X.X.X:9200"]
}
stdout { codec => rubydebug }
}
例如日志类型1是: root - 信息 - 最佳成绩:35.732
类型 2 是: root - 信息 - 开始实验
我面临的一个问题是,当消息不包含数字时,该字段在创建的 JSON 中仍然作为 null 存在,这使我无法在 Kibana 中使用所需的功能。
一个选项是在未定义字段时在 logstash 上添加一个标签,以便能够在 kibana 端轻松进行过滤。 null值只在elasticsearch中插入时设置(在logstash端,该字段未定义)
在你的情况下,这个解决方案看起来像这样:
filter {
grok{
match => { "message" => ["%{WORD:logger} %{SPACE}\-%{SPACE} %{LOGLEVEL:level} %{SPACE}\-%{SPACE} %{DATA:message} %{NUMBER:score:float}",
"%{WORD:logger} %{SPACE}\-%{SPACE} %{LOGLEVEL:level} %{SPACE}\-%{SPACE} %{DATA:message}"]}
}
if ![score] {
mutate { add_tag => [ "score_not_set" ] }
}
}