Bonjour à tous =)
Je vous fais part de ce message car j'ai un comportement que je n'arrive pas à comprendre, ce qui m'énerve !! ^^
Actuellement, je récupère des logs (zimbra) depuis un serveur via Filebeat que j'envoie vers mon serveur Logstash où la configuration suivante est appliquée:
`###########################################################################
input {
beats {
port => "5045"
type => "ouessant-zimbra-log"
}
}
###########################################################################
filter {
mutate {
remove_tag => [ "beats_input_codec_plain_applied" ]
}
if [type] == "ouessant-zimbra-log" {
if [message] =~ "poor" {
mutate {
add_tag => [ "poor" ]
}
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:[%{POSINT:syslog_pid}])?: %{GREEDYDATA:syslog_message}" }
}
}
else if [message] =~ "blocked" {
mutate {
add_tag => [ "blocked" ]
}
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:[%{POSINT:syslog_pid}])?: %{GREEDYDATA:syslog_message}" }
}
}
else if [message] =~ "warning" {
mutate {
add_tag => [ "warning" ]
}
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:[%{POSINT:syslog_pid}])?: %{GREEDYDATA:syslog_message}" }
}
}
else {
mutate {
add_tag => [ "information" ]
}
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:[%{POSINT:syslog_pid}])?: %{GREEDYDATA:syslog_message}" }
}
}
}
###########################################################################
output {
if [type] == "ouessant-zimbra-log" {
elasticsearch {
hosts => "IP"
index => "ouessant-zimbra-log-%{+YYYY.MM.dd}"
template => "/etc/logstash/template_mapping/ouessant-zimbra-log.json"
template_name => "ouessant-zimbra-log"
}
}
stdout {
codec => rubydebug
}
}
`
Comme indiqué, j'utilise un template de mapping simple qui me permet de ne pas analyser les champs:
Le tout est envoyé vers ElasticSearch qui indexe sans problème:
C'est à partir d'ici que je ne comprend pas. Lorsque je créer une visualisation de type "Data table" sous Kibana avec filtre sur le champs [tags], j'ai bien mes deux valeurs 'warning' et 'blocked' qui s'affiche:
Mais dès que je rajoute un filtre de type 'term' sur le champ 'syslog_message.raw' ou 'message.raw', je n'ai que le [tags] 'warning' qui apparaît:
Alors que je devrai avoir les deux [tags] ...
Par contre, si je rajoute un filtre de type 'term' sur le champ 'syslog_message' ou 'message', cela fonctionne (mais ne peut être utilisé dans mon cas car les champs sont analysés):
Auriez-vous quelques idées pour résoudre mon problème ?
J'espère avoir été clair et précis
Cordialement,
Benjamin