Sto utilizzando Logstash per analizzare i registri postfix. Sono principalmente concentrato per ottenere i log delle email rimbalzati dai log postfix e archiviarli nel database.Filtri di Grok multipli che non memorizzano il primo record di corrispondenza del filtro
Per ottenere i registri, innanzitutto devo trovare l'ID generato da postfix corrispondente al mio id-messaggio e, utilizzando quell'Id, devo trovare lo stato di un'e-mail. Per la seguente configurazione, sono in grado di ottenere i registri.
grok {
patterns_dir => "patterns"
match => [
"message", "%{SYSLOGBASE} %{POSTFIXCLEANUP}",
"message", "%{SYSLOGBASE} %{POSTFIXBOUNCE}"
]
named_captures_only => true
}
Sto usando seguente se la condizione per memorizzare i log che corrispondono ai modelli:
if "_grokparsefailure" not in [tags] {
#database call
}
Come avete visto, io sto usando due modelli per trovare corrispondenti due diversi registri da un file di log.
Ora, voglio differenziare entrambi i modelli in base ai tag. Così ho modificato la mia configurazione come segue:
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
}
adesso, è unico negozio% {} POSTFIXCLEANUP logs modello. Se inverto l'ordine, memorizza solo il pattern% {POSTFIXBOUNCE}.
così, dopo aver rimosso quella condizione se, ho trovato che il messaggio che viene analizzato dal primo filtro ha tag "_grokparsefailure" e il primo tag filtro, e per questo non sta archiviando quel record.
Qualcuno può dirmi che cosa si deve fare per rettificare questo? Sto facendo qualche errore?
abbastanza sicuro che il remove_tag unica viene fatto se corrisponde l'evento, così che è probabile che il problema – Alcanzar
Allora, che cosa devo fare per raggiungere i risultati desiderati? –