У меня ELK установлен и работает на моей машине, но теперь я хочу сделать более сложную фильтрацию и добавление полей в зависимости от сообщений о событиях.
В частности, я хочу установить "id_error" и "descripcio" в зависимости от шаблона сообщения.
В файле "logstash.conf" я пытаюсь использовать много кодовых комбинаций, но я не могу получить ожидаемое поведение.
Может кто-нибудь сказать мне, что я делаю неправильно, что я должен делать, или если это невозможно? Спасибо заранее.
Это мой файл "logstash.conf" с последним тестом, который я сделал, в результате чего в Kibana не было событий:
input {
file {
path => "C:\xxx.log"
}
}
filter {
grok {
patterns_dir => "C:\elk\patterns"
match => [ "message", "%{ERROR2:error2}" ]
add_field => [ "id_error", "2" ]
add_field => [ "descripcio", "error2!!!" ]
}
grok {
patterns_dir => "C:\elk\patterns"
match => [ "message", "%{ERROR1:error1}" ]
add_field => [ "id_error", "1" ]
add_field => [ "descripcio", "error1!!!" ]
}
if ("_grokparsefailure" in [tags]) { drop {} }
}
output {
elasticsearch {
host => "localhost"
protocol => "http"
index => "xxx-%{+YYYY.MM.dd}"
}
}
Я также попробовал следующий код, в результате чего поля "id_error" и "descripcio" были как с vaules "[1,2]", так и "[error1!!!, error2!!!]" соответственно, в каждом совпадающем событие.
Как "break_on_match" по умолчанию установлено "true", я ожидаю получить только поля за соглашением, но этого не происходит.
input {
file {
path => "C:\xxx.log"
}
}
filter {
grok {
patterns_dir => "C:\elk\patterns"
match => [ "message", "%{ERROR1:error1}" ]
add_field => [ "id_error", "1" ]
add_field => [ "descripcio", "error1!!!" ]
match => [ "message", "%{ERROR2:error2}" ]
add_field => [ "id_error", "2" ]
add_field => [ "descripcio", "error2!!!" ]
}
if ("_grokparsefailure" in [tags]) { drop {} }
}
output {
elasticsearch {
host => "localhost"
protocol => "http"
index => "xxx-%{+YYYY.MM.dd}"
}
}