surveillance du réseau par Nagios
Alertes par SMS et Email

sms par internet ou par modem GSM

 

 

Suite de la page consacrée à Nagios et pve-monitor et
de la page traitant des notifications et commandes par SMS:

- configuration des différentes notifications pour Nagios,

- notifications par Email
- notification par sms et internet (pour les clients Free)
- notification par SMS et modem GSM

 

 

Notifications par Email

ssmtp est obsolete et le package a été remplacé par msmtp aussi bien pour Debian Buster que pour Ubuntu.
msmtp est un client SMTP très simple et plus facile à configurer que ssmtp pour l'envoi de courriels ; il permet d'utiliser le serveur son FAI ce qui évite l'installation d'un serveur de courrier.,

- installation de msmtp après avoir mis le PI ou le PC à jour,
Sur Unbuntu 20.x si vous rencontrez cette erreur "bcm2711-rpi-4-b.dtb" non trouvé , voici la solution:

 

Sous Ubuntu : erreur concernant bcm2711-rpi-4-b.dt

 

nagios97

- télécharger ce fichier et copier le à son emplacement

nagios98

nagios99

nagios100

 

 

nagios75

Pour configurer l'envoi de courriels par le système, ouvrir ou créer (si il n'existe pas) le fichier /etc/msmtprc et renseigner les paramètres de connexion de votre compte de courrier :

 

Configuration de msmtprc

https://doc.ubuntu-fr.org/msmtp

Avec nano Ouvrir le fichier msmtprc

nagios76

# Valeurs par defaut pour tous les comptes.
defaults
auth           on
tls            on
tls_starttls   on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile        /var/log/msmtp.log

# Exemple pour un compte Gmail
account        gmail
auth           plain
host           smtp.gmail.com
port           587
from           xxxxxxx.michel@gmail.com
user           xxxxxxx.michel@gmail.com
password       zzzzzzzzzzzzzzz

# Exemple pour un compte GMX
#account        gmx
#host           mail.gmx.com
#port           587
#from           username@gmx.com
#user           username@gmx.com
#password       XXXXXXXXXX
#tls_nocertcheck

# Exemple pour un compte OVH
#account        ovh
#host           XXXXXX.ovh.net
#port           465
#from           username@example.com
#user           username@example.com
#password       XXXXXXXXXX

# Definir le compte par defaut
account default : gmail

Avec Google et l'autorisation en 2 étapes , voir à la fin de ce paragraphe

Important:
pour OVH dans les paramètres , il faut désactiver starttls (tls_starttls off)

nagios77

Il faut vérifier que le système utilise bien msmtp pour l'envoi de mail :

cette commande doit retourner :
lrwxrwxrwx 1 root root 12 nov. 28 2016 /usr/sbin/sendmail -> ../bin/msmtp

nagios78

Avant de configurer Nagios , on va vérifier le bon fonctionnement de msmtp:

nagios79

Si vous rencontrer une erreur "commande mail non trouvée , il suffit comme l'indique l'avertissement sur Ubuntu d'installer "mailutils";
sur PI OS , uniquement "commande introuvable" , mais il faut aussi installer "mailutils"

nagios101

nagios130

nagios80

Accéder aux logs:

Si vous rencontrez cette erreur :

nagios131

Lors de l' installation de msmtp, un utilisateur msmtp et un groupe msmtp sont crées.
Modifications à apporter au fichier journal et droits de lecture écriture pour le groupe et l'utilisateur:

nagios132

nagios133

l'extension .log n'est pas nécessaire mais si vous le souhaitez , il suffit de faire la même opération avec msmtp.log au lieu de msmtp.

 

Autorisation en 2 étapes de Google

Dès que l'on active cette option avec la config décrite ci-dessus , on obtient cette erreur :

rb48

J'ai choisi la solution la plus simple pour éviter cette erreur , utiliser SMTP d'Orange :

account orange
host smtp.orange.fr
protocol smtp
auth on
tls on
tls_starttls off
tls_certcheck on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
from xxxxx.xxxxxx@orange.fr
maildomain orange.fr
port 465
user xxxx.xxxxxxx@orange.fr
password xxxxxxxx

ne pas oublier
# Definir le compte par defaut
account default : orange

 

Pour tester l'envoi du message :

Résultat:

nagios137

Seul utilisateur je n'ai pas crée de fichier .msmtprc dans mon répertoire perso c'est pourquoi , comme on peut le voir sur la copie d'écran ci-dessus, /etc/msmtprc est utilisé par défaut,
le compte rendu complet de l'envoi:

maildomain = orange.fr
host = smtp.orange.fr
port = 465
source ip = (non défini)
proxy host = (non défini)
proxy port = 0
timeout = désactivé
protocol = smtp
domain = localhost
auth = automatique
user = xxxxxxxxxx@orange.fr
password = *
passwordeval = (non défini)
ntlmdomain = (non défini)
tls = activé
tls_starttls = désactivé
tls_trust_file = /etc/ssl/certs/ca-certificates.crt
tls_crl_file = (non défini)
tls_fingerprint = (non défini)
tls_key_file = (non défini)
tls_cert_file = (non défini)
tls_certcheck = activé
tls_min_dh_prime_bits = (non défini)
tls_priorities = (non défini)
auto_from = désactivé
maildomain = orange.fr
from = xxxxxxxxxx@orange.fr
add_missing_from_header = activé
add_missing_date_header = activé
remove_bcc_headers = activé
dsn_notify = (non défini)
dsn_return = (non défini)
logfile = /var/log/msmtp.log
logfile_time_format = (non défini)
syslog = (non défini)
aliases = (non défini)
lecture des destinataires depuis la ligne de commande et le courriel
TLS session parameters:
    (TLS1.2)-(RSA)-(AES-256-CBC)-(SHA1)
Information du certificat TLS :
    Propriétaire:
        Nom Usuel: smtp.orange.fr
        Organisation: Orange
        Localité: Paris
        État ou Province: Ile-de-France
        Pays: FR
    Émetteur:
        Nom Usuel: DigiCert TLS RSA SHA256 2020 CA1
        Organisation: DigiCert Inc
        Pays: US
    Validité:
        Date d'activation: mar. 06 avril 2021 01:00:00 BST
        Date d'expiration: mar. 15 mars 2022 23:59:59 GMT
    Empreintes:
        SHA256: D3:8E:0D:39:CB:E8:FB:50:F4:5C:A9:82:2F:5E:B8:56:D7:F4:32:42:EA:AA:A0:FC:36:56:15:EA:80:56:87:63
        SHA1 (deprecated): 6C:C6:0D:AC:CB:6C:69:E1:D2:14:03:C8:FF:35:BC:1B:DC:D8:17:F2
<-- 220 opmta1mto01nd1 smtp.orange.fr ESMTP server ready
--> EHLO localhost
<-- 250-opmta1mto01nd1 hello [82.64.33.148], pleased to meet you
<-- 250-HELP
<-- 250-AUTH LOGIN PLAIN
<-- 250-SIZE 46000000
<-- 250-ENHANCEDSTATUSCODES
<-- 250-8BITMIME
<-- 250 OK
--> AUTH PLAIN AG1pY2hlbC5ncmF2aWVyQG9yYW5nZS5mcgBGNEg5QVAydg==
<-- 235 2.7.0 ... authentication succeeded
--> MAIL FROM:<xxxxxxx@orange.fr>
<-- 250 2.1.0 <xxxxxxxx@orange.fr> sender ok
--> RCPT TO:<xxxxxxx@gmail.com>
<-- 250 2.1.5 <xxxxxxx@gmail.com> recipient ok
--> DATA
<-- 354 OK
--> From: xxxxxxxxxxx@orange.fr
--> Date: Mon, 24 Jan 2022 13:07:51 +0000
--> Subject: Un mail de test
-->
--> Envoyé via msmtp
--> .
<-- 250 2.0.0 Bz4Zn25dVBzeEBz4anXvgQ mail accepted for delivery
--> QUIT
<-- 221 2.0.0 opmta1mto01nd1 smtp.orange.fr closing connection
michel@raspberrypi:/etc $

 

 

Afin d'être notifié par mail d'un problème détecté par Nagios, il faut modifier le fichier contacts.cfg, et remplacer nagios@localhost par le mail de la personne autorisée
les options principales de notification :

d: Notifier sur les états d'hôte DOWN
u: Notifier sur les états d'accueil UNREACHABLE
r: Notifier sur la RÉCUPÉRATION de l'hôte (états UP)

 

nagios81

define contact {

    contact_name  nagiosadmin             ; Short name of user
    use           generic-contact         ; Inherit default values
    alias         Nagios Admin            ; Full name of user
    #email        nagios@localhost ; <<** CHANGE THIS TO YOUR EMAIL ADDRESS **
    email         michel.xxxxxx@orange.fr
host_notifications_enabled 1
host_notification_options d,u,r, service_notification_commands notify-service-by-email,notify-service-by-sms host_notification_commands notify-host-by-email,notify-host-by-sms }

La notification par SMS nous sera utile aussi on indique également ce mode

Pour les notifications par mail les commandes existent déjà dans le fichier /usr/local/nagios/etc/objects/commands.cfg , il faut simplement les modifier pour utiliser msmtp

nagios82

nagios82a

la réception d'un Email :
pour simuler un problème j'ai stoppé une VM.

nagios90

 

 

Notification par SMS

Si vous êtes client chez Free,vous pouvez effectuer gratuitement l'envoi de SMS depuis une URL Web.
Je vais donc développer 2 solutions :
- l'envoi par internet (avec Free ou autres ..)
- l'envoi par SMS avec un modem GSM

Pour être notifié par SMS, il faut ajouter deux entrées dans le fichier /usr/local/nagios/etc/objects/commands.cfg.
- pour l'envoi de SMS lorsque l'on détecte un problème de supervision sur un service.
- pour l'envoi de SMS lorsque l'on détecte un problème de supervision sur le serveur

 

###################################
## envoi sms
##################################
# Notification probleme avec Service
define command{
    command_name notify-service-by-sms
    command_line /home/michel/envoi_sms.sh "Service Alert: $HOSTALIAS$/$SERVICEDESC$ nService State: $SERVICESTATE$ nDate/Time: $LONGDATETIME$"
}

# Notification  probleme avec Host
define command{
    command_name notify-host-by-sms
    command_line /home/michel/envoi_sms.sh "Host Alert: $HOSTNAME$ State: $HOSTSTATE$ nDate/Time: $LONGDATETIME$"
}

 

nagios83

 

création du script envoi_sms.sh
Ce script est utilisé dans la page concernant le modem

- par internet avec Free:

nagios84

Essai du script avec la console,(il faut peut-être modifier les autorisations):

nagios109

nagios85

nagios86

 

 

- Par le modem gsm
...voir la page concernant l’installation d’un serveur GSM sur Raspberry.

Création de l'utilisateur nagiosadmin et ajout au groupe dialout
l'utilisateur nagios existe déja mais il faut lui donner également des droits

sudo useradd nagiosadmin
sudo usermod -aG dialout nagiosadmin
sudo usermod -aG dialout nagios

nagios118

Autorisation pour le port série:

nagios119

Le script Python utilisé avec la carte sim800C , ce script est déjà présent dans le répertoire /home/USER/scripts
la version de python est à adapter

#!/usr/bin/env python3.7
# -*- coding: utf-8 -*-

import sys
from sim800l import SIM800L

numero = "+336xxxxxxxx"
message= str(sys.argv[1])
sim800l=SIM800L('/dev/ttyS0')
sim800l.send_sms(numero,message)
print ("message : "+message)

Le script python avec le modem 4G/LTE Ebyte , voir cette page: pour la configuration de ce matériel

 

scipt avec modem Ebyte 4G/LTE

#!/usr/bin/env python3.8
# -*- coding: utf-8 -*-
import time,serial,sys

espace="-"
message=""
nb_arg=len(sys.argv)
n=1
while n<nb_arg:
    message=message+sys.argv[n]+espace
    #print(message)
    n=n+1


message = ('AT+SMSSEND=06xxxxxxxx,'+message+'\r\n').encode('utf-8')
phone=serial.Serial(port="/dev/ttyAMA1",baudrate=115200,timeout=2)
phone.write(b'+++')
time.sleep(2)
phone.write(b'AT+VER\r\n')
time.sleep(1)
phone.write(message)

nagios102

 

 

On ajoute dans envoi_sms.sh l’exécution du script python en supplément de l’envoi SMS par internet (si vous êtes chez Free) ou on remplace

#!/usr/bin/bash

### envoi  SMS
CURL=/usr/bin/curl
URL=https://smsapi.free-mobile.fr/sendmsg
PASS=xxxxxxxxxxxx
USER=xxxxxxxxx
# notification
not="$*"
# envoi SMS Free
$CURL -k -X POST "https://smsapi.free-mobile.fr/sendmsg?user=$USER&pass=$PASS&msg=$Not"
### envoi par modem GSM
python3.8 /home/michel/envoi_sms.py $not 2>>/home/michel/sms_error.log

nagios87

On a déjà ajouter le mode de notification dans les contacts....

nagios88

......La configuration est terminée, pour vérifier qu'il n'y a pas d’erreur, exécutez cette commande :

nagios89

S'il n'y a pas d'erreurs, redémarrez le service nagios :

nagios103

Il est souvent préférable de faire un STOP suivi d' un START plutôt qu'un RESTART

nagios124

Si vous rencontrez des problèmes:
- pour debugger en python :

nagios123

import time,serial,sys,logging

#if __name__ == "__main__":
    #logging.basicConfig(level=logging.DEBUG, filename="/home/michel/logfile", filemode="a+",
                        #format="%(asctime)-15s %(levelname)-8s %(message)s")
    #logging.info(sys.argv[0])

 

Erreur fréquente lors de l'essai d'envoi de sms

Error: Could not open command file '/usr/local/nagios/var/rw/nagios.cmd' for update!

nagios136

Pour la résolution de cette erreur voir cette page.

 

 

 

crée le 01/07/2021
maj 14/11/2021 ajout résolution erreur /usr/local/nagios/var/rw
maj 24/01/2022 ajout info pour autorisation 2 étapes Google

page:72