#logstash #logstash-grok
#logstash #logstash-grok
Вопрос:
Мой фильтр logstash настроен следующим образом:
filter {
grok {
patterns_dir => ["/usr/share/logstash/pipeline/patterns/"]
match => {
"[message]" => "%{TIMESTAMP_ISO8601:timestamp} %{THREAD:thread} %{LOGLEVEL:level} %{LOGGER:logger} %{CONTEXT:context} - %{GREEDYDATA:message}"
}
}
mutate {
rename => { "[fields][index]" => "application" }
rename => { "[host][name]" => "instance" }
remove_field => ["@version","agent.ephemeral_id","agent","ecs","fields","input","tags"]
}
}
Отладчик Grok предполагает, что все в порядке, и для строки ошибки:
2020-10-28 05:14:41,282 [Worker-5] DEBUG Amount - calculate operation: [1], useCurrencyCodeOfPosition: [false]
Я получаю следующий результат:
{
"level": "DEBUG",
"logger": "Amount",
"context": "",
"thread": "Worker-5",
"message": "calculate operation: [1], useCurrencyCodeOfPosition: [false]",
"timestamp": "2020-10-28 05:14:41,282"
}
Шаблоны определяются следующим образом:
THREAD [(?<thread>[^]]*)]
LOGGER (?<logger>[^ ]*)
CONTEXT (?<context>[^-]*)
Теперь каждое значение, созданное фильтром grok, дублируется, как показано в примере ниже:
"logger" => [
[0] "Amount",
[1] "Amount"
],
"thread" => [
[0] "[Worker-5]",
[1] "Worker-5"
В чем здесь проблема?
Я просто не могу понять это.
Это мой первый фильтр :).
Я работаю с Logstash 7.9.2 (dockerized)
Комментарии:
1. Это должно иметь какое-то отношение к моим пользовательским шаблонам… просто пока не знаю, что :/
2. «Встроенные» шаблоны работают так, как ожидалось, но я бы не подумал, что это предпочтительный способ :/
Ответ №1:
Я думаю, что есть проблемы с пользовательскими шаблонами в фильтре. То, что вы хотите, также может быть достигнуто простым использованием готовых шаблонов, как показано ниже
filter{
grok {
match => {
"message" => "%{TIMESTAMP_ISO8601:timestamp}%{SPACE}[%{DATA:thread}]%{SPACE}%{LOGLEVEL:level}%{SPACE}%{NOTSPACE:logger} %{DATA:context}-%{SPACE}%{GREEDYDATA:message}"
}
overwrite => [ "message" ]
}
mutate {
rename => { "[fields][index]" => "application" }
rename => { "[host][name]" => "instance" }
remove_field => ["@version","agent.ephemeral_id","agent","ecs","fields","input","tags"]
}
}
Проверьте эту ссылку шаблонов grok по умолчанию. Если вам нужно провести анализ временных рядов по этим событиям, я бы посоветовал вам переопределить @timestamp
timestamp
или, по крайней мере, применить фильтр даты timestamp
.
Если вы ожидаете фиксировать многострочные ошибки трассировки стека, рассмотрите возможность использования многострочного фильтра в плагине ввода.
Комментарии:
1. Спасибо за это. Что не так с моими шаблонами, ты? Должно быть, я что-то упускаю.
2. @ m0rt1m3r Регулярное выражение, используемое для пользовательских шаблонов, не соответствует требуемым шаблонам в вашем журнале. Пожалуйста, проголосуйте — примите ответ, если он разрешает ваш запрос :).
3. Я не согласен. На выходе вы можете четко видеть, что извлекаются значения, то есть регулярные выражения в порядке. Я просто не понимаю, почему мои пользовательские шаблоны не работают (они находят значения, но значения дублируются). Я что-то делаю неправильно.
4. О, да, теперь я понимаю. ваши шаблоны на самом деле отвечают за несколько совпадений. Попробуйте их в автономном режиме в регулярном выражении101.
5. Да, как упоминалось ранее. Встроенные регулярные выражения работают нормально. Я просто хочу понять, что я делаю не так с пользовательскими шаблонами. 🙂