Я использую Logstash для анализа журналов postfix. Я в основном сосредоточен, чтобы получить отсканированные журналы электронной почты из журналов постфикса и хранить их в базе данных.
Чтобы получить журналы, сначала мне нужно найти идентификатор, сгенерированный postfix, соответствующий моему идентификатору сообщения, и используя этот идентификатор, мне нужно найти статус электронной почты. Для последующей настройки я могу получить журналы.
grok {
patterns_dir => "patterns"
match => [
"message", "%{SYSLOGBASE} %{POSTFIXCLEANUP}",
"message", "%{SYSLOGBASE} %{POSTFIXBOUNCE}"
]
named_captures_only => true
}
Я использую следующее условие для хранения журналов, соответствующих шаблонам:
if "_grokparsefailure" not in [tags] {
#database call
}
Как вы видели, я использую два шаблона для поиска соответствующих двух разных журналов из одного файла журнала.
Теперь я хочу различать оба шаблона на основе тегов. Поэтому я изменил свою конфигурацию следующим образом:
grok {
patterns_dir => "patterns"
match => [
"message", "%{SYSLOGBASE} %{POSTFIXBOUNCE}"
]
add_tag => ["BOUNCED"]
remove_tag => ["_grokparsefailure"]
named_captures_only => true
}
grok {
patterns_dir => "patterns"
match => [
"message", "%{SYSLOGBASE} %{POSTFIXCLEANUP}"
]
add_tag => ["INTIALIZATION"]
remove_tag => ["_grokparsefailure"]
named_captures_only => true
}
Теперь он хранит журналы шаблонов% {POSTFIXCLEANUP}. Если я отменил порядок, он сохранит шаблон% {POSTFIXBOUNCE}.
поэтому, после удаления этого условия if, я обнаружил, что сообщение, обрабатываемое из первого фильтра, имеет тег "_grokparsefailure" и первый тег фильтра, и из-за этого он не сохраняет эту запись.
Может ли кто-нибудь сказать мне, что нужно сделать, чтобы исправить это? Я ошибаюсь?