[ELK] Comportement que je n'arrive pas à expliquer!


(Benjamin Carriou) #1

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 :wink:

Cordialement,

Benjamin


(Benjamin Carriou) #2

Bonjour,

Je pense avoir trouvé la source du problème.
Il est mis dans le mapping de l'index que les champs "raw" non analysés ayant plus de 256 caractères sont ignorés:

"raw": {
ignore_above": 256
}

Du coup, certains "message.raw" ne dépassant pas ce seuil sont bien affichés lors de mes visualisations, et ceux dépassant ce seuil ne sont pas affichés.

L'augmentation de ce seuil résout le problème.

Cordialement,


(system) #3