Configuration du plugin logstash-output-email

Bonjour,
j'essaye actuellement de configurer le plugin logstash-output-email afin de remonter par email tout log portant un tag particulier, mais je n'y parvient pas. J'ai essayé plusieurs type de configuration mais rien n'y fait. J'utilise le tag et non pas le contenu du champ "severity" car j'ai lu qu'il y avais des soucis avec l'option match du plugin email.
J'utilise la version 4.0.3 du plugin, sur la version 5.1.2 de ELK.

Du coup, je me posais une question toute bête car ce n'est précisé sur aucune doc ou aucun forum mais est ce que un client mail ( sendmail par exemple ) doit être configuré sur le serveur ELK pour que cela fonctionne ? Ou est ce que le plugin embarque son propre client ?

Voici ma configuration en sortie :

filter {
        grok {
                match => { "severity" => "warning" }
                add_tag => ["warning"]
                }
}


output {
		if "warning" in [tags] {
                email {
                        to => "technicien@entreprise.com"
                        address => "mail.entreprise.com"
                        port => "465"
                        via => "smtp"
                        use_tls => "true"
                        username => "elk@entreprise.com"
                        password => "passwordelk@entreprise.com"
                        from => "elk@entreprise.com"
                        subject => "critical event spotted by ELK from : %{host}"
                        body => "%{message,_id}"
                }
        }

        else {
                stdout {
                        codec => rubydebug
                }
        }
}

Les logs qui m’intéressent prennent bien le tag "warning", mais lorsqu’un log avec ce tag arrive, j'ai le message d'erreur suivant sur le stdout :

[[main]>worker1] ERROR logstash.outputs.email - Something happen while delivering an email {:exception=>#<Timeout::Error: Timeout::Error>}

Du côté du /var/log/mail.log, j'ai le message suivant :

Feb 13 17:22:06 elk sm-mta[26039]: v1DGM3j6026039: to=elk@entreprise.com, delay=00:00:03, xdelay=00:00:01, mailer=esmtp, pri=30000, relay=mx1.entreprise.com. [X.X.X.X], dsn=2.0.0, stat=Sent (Ok: queued as 3vMW651wTKz12YL)

Cela indique que le mail est passé en file d'attente sur le serveur mail mais j'ai du mal à y croire, étant donné le message d'erreur sur le stdout de logstash ... De plus, je n'ai pas la main sur le serveur mail Postfix pour vérifier.

Est ce que quelqu’un aurait une idée ? quelque chose cloche dans ma conf ?
Merci.

@colinsurprenant une idée ?

Merci @dadoonet de ton aide une fois de plus !

en effet [[main]>worker1] ERROR logstash.outputs.email - Something happen while delivering an email {:exception=>#} n'est pas très informatif :stuck_out_tongue:

Je vais regarder pourquoi le detail de l'exception n'est pas correctement rapporté.

Vous pourriez démarrer logstash en mode debug en utilisant l'option --debug et noter les informations sur les details du email.

Bonjour, merci encore de ton aide.

En fait, j'ai également posté sur logstash et on m'a mis la puce à l'oreille sur un fait à vérifier mais j'utilise en serveur sortant SMTPS sur le port 465 donc, et des doutes ont été émis sur la compatibilité du plugin avec le protocole SMTPS. Je ne sais pas ce qu'il en est, mais ça expliquerait pas mal de choses ...

j'ai lancé LS en mode debug, voila les infos concernant l'output.email ( modifié à certains endroits par mes soins pour des raisons de confidentialité, et j'ai remplacé les @ par arobase car il les interprétait en tant que mention )

debug mail :

11:32:07.569 [LogStash::Runner] DEBUG logstash.plugins.registry - On demand addi
ng plugin to the registry {:name=>"email", :type=>"output", :class=>LogStash::Ou
tputs::Email}

...

11:32:07.575 [LogStash::Runner] DEBUG logstash.outputs.email - config LogStash::
Outputs::Email/"arobase"to = "technicien"arobase"entreprise.com"
11:32:07.575 [LogStash::Runner] DEBUG logstash.outputs.email - config LogStash::
Outputs::Email/"arobase"address = "mail.entreprise.com"
11:32:07.576 [LogStash::Runner] DEBUG logstash.outputs.email - config LogStash::
Outputs::Email/"arobase"port = 465
11:32:07.576 [LogStash::Runner] DEBUG logstash.outputs.email - config LogStash::
Outputs::Email/"arobase"via = "smtp"
11:32:07.576 [LogStash::Runner] DEBUG logstash.outputs.email - config LogStash::
Outputs::Email/"arobase"username = "elk"arobase"entreprise.com"
11:32:07.576 [LogStash::Runner] DEBUG logstash.outputs.email - config LogStash::
Outputs::Email/"arobase"password = "passwordELKmailuser"
11:32:07.576 [LogStash::Runner] DEBUG logstash.outputs.email - config LogStash::Outputs::Email/"arobase"from = "elk"arobase"entreprise.com"
11:32:07.576 [LogStash::Runner] DEBUG logstash.outputs.email - config LogStash::Outputs::Email/"arobase"domain = "entreprise.com"
11:32:07.576 [LogStash::Runner] DEBUG logstash.outputs.email - config LogStash::Outputs::Email/"arobase"subject = "test"
11:32:07.576 [LogStash::Runner] DEBUG logstash.outputs.email - config LogStash::Outputs::Email/"arobase"body = "test"
11:32:07.576 [LogStash::Runner] DEBUG logstash.outputs.email - config LogStash::Outputs::Email/"arobase"id = "940d3375b56c043a69eda7c033867122e7137515-171"
11:32:07.576 [LogStash::Runner] DEBUG logstash.outputs.email - config LogStash::Outputs::Email/"arobase"enable_metric = true
11:32:07.576 [LogStash::Runner] DEBUG logstash.outputs.email - config LogStash::Outputs::Email/"arobase"codec = "plain_18c4998b-3dd3-4b80-9a50-b16481f6d205", enable_metric=>true, charset=>"UTF-8">
11:32:07.576 [LogStash::Runner] DEBUG logstash.outputs.email - config LogStash::Outputs::Email/"arobase"workers = 1
11:32:07.576 [LogStash::Runner] DEBUG logstash.outputs.email - config LogStash::Outputs::Email/"arobase"use_tls = false
11:32:07.576 [LogStash::Runner] DEBUG logstash.outputs.email - config LogStash::Outputs::Email/"arobase"debug = false
11:32:07.576 [LogStash::Runner] DEBUG logstash.outputs.email - config LogStash::Outputs::Email/"arobase"htmlbody = ""
11:32:07.576 [LogStash::Runner] DEBUG logstash.outputs.email - config LogStash::Outputs::Email/"arobase"attachments = []
11:32:07.576 [LogStash::Runner] DEBUG logstash.outputs.email - config LogStash::Outputs::Email/"arobase"contenttype = "text/html; charset=UTF-8"

11:32:11.784 [[main]-pipeline-manager] DEBUG logstash.outputs.email - Email Output Registered! {:config=>{:address=>"mail.entreprise.com", :port=>465, :domain=>"entreprise.com", :user_name=>"elk"arobase"entreprise.com", :password=>passwordELKmailuser, :authentication=>nil, :enable_starttls_auto=>false, :debug=>false}, :via=>"smtp"}

11:32:22.378 [[main]>worker1] DEBUG logstash.outputs.email - Creating mail with these settings : {:via=>"smtp", :options=>nil, :from=>"elk"arobase"entreprise.com", :to=>"technicien"arobase"entreprise.com", :cc=>nil, :subject=>"test", :body=>"test", :content_type=>"text/html; charset=UTF-8", :htmlbody=>"", :attachments=>[]}
11:32:22.685 [pool-2-thread-2] DEBUG logstash.instrument.collector - Collector: Sending snapshot to observers {:created_at=>2017-02-16 11:32:22 +0300}
11:32:22.927 [[main]>worker1] DEBUG logstash.outputs.email - Sending mail with these values : {:from=>["elk"arobase"entreprise.com"], :to=>["technicien"arobase"entreprise.com"], :cc=>[], :subject=>"test"}

11:32:22.927 [[main]>worker1] DEBUG logstash.outputs.email - Sending mail with these values : {:from=>["elk"arobase"entreprise.com"], :to=>["technicien"arobase"entreprise.com"], :cc=>[], :subject=>"test"}

11:33:23.097 [[main]>worker1] ERROR logstash.outputs.email - Something happen while delivering an email {:exception=>#}
11:33:23.098 [[main]>worker1] DEBUG logstash.outputs.email - Processed event: (évènement ayant provoqué l'envoi de mail)

Puis il reprends le même cycle pour le prochain envoi.
Je constate que l'heure n'est pas bonne, elle avance exactement de deux heures, alors que la commande date m'indique la bonne heure ( CET 2017). ça ne pourrait pas être ça qui poserait problème ?

c'est vraiment bête car nous n'avons pas le détail de l'exception. Je n'ai pas pu encore investiguer ce problème.

Autrement, l'option use_tls => "true" active le mode SMTP STARTTLS. Je ne crois pas en effet que la librairies email utilisée par le plugin logstash-output-email support le protocole legacy SMTPS. Ce protocole n'est plus officiellement supporté.

J'assume que si votre serveur SMTP ne parle que SMTPS, ceci dois etre la cause du probleme.
Est-ce votre seule option?

Etrange. Je n'arrive pas à reproduire le message d'exception manquant. J'ai testé avec logstash 5.1.2 et logstash-output-mail 4.0.3.

Sur quelle plateforme utilisez vous logstash?

J'ai déjà essayé l'option use_tls =true mais elle ne change rien...
Je n'ai ( à ma connaissance, je viens d'arriver dans cette boite) pas d autres solutions que d utiliser SMTPS. Par contre, j ai cru comprendre qu'on pouvais utiliser sendmail au lieu de SMTP, du coup je me dis qu'il y a peut être quelque chose à faire avec ça en dernier recours ...
Mon elk est sur une Ubuntu 12.04.

En effet use_tls=true active le protocole STARTTLS de SMTP ce qui n'est pas la même chose que le protocol SMTPS qui n'est plus un protocole supporté.

Si vous êtes en mesure d'installer sendmail localement sur la machine ca serait probablement la meilleure solution.

Je ne l'ai jamais fait, mais je vais me renseigner sur cette solution. Merci pour votre aide.

Bonjour,
J'ai pu résoudre mon problème en passant par un relail Sendmail installé sur mon serveur ELK. Mon fichier de conf Logstash comporte donc l'output suivant :

 if "critical" in [tags] {
                email {
                        to => "technicien@entreprise.com"
                        address => "smtp.entreprise.com"
                        port => "465"
                        via => "sendmail"
                        username => "elk@entreprise.com"
                        password => "passwordELKUser"
                        from => "elk@entreprise.com"
                        domain => "entreprise.com"
                        subject => "critical event spotted by ELK from : %{host}"
                        body => "%{message}"
                        }
        }

Pour la configuration de Sendmail, j'ai suivi le tuto suivant : https://doc.ubuntu-fr.org/ssmtp
Si ça peut en aider d'autres utilisant des protocoles hostiles :slight_smile:

Merci pour votre aide @colinsurprenant, @dadoonet

2 Likes

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.