Category Archives: Notification

  • -

Le service de notification Pushover.Net

Category:Linux,Notification,Surveillance Tags : 

Pushover.Net

Pour faire court, Pushover (https://pushover.net/) est un service qui permet de recevoir des notifications instantanées sur votre téléphone ou votre tablette depuis une grande variété de sources.

Il faut toutefois installer l’application associée qui se trouvera sur le “store” approprié.

Sur le serveur, il est possible d’utiliser une API pouvant être intégrée dans un script ou un programme, que cela soit du Bash Shell, du PHP ou du C, qui utilisera une URL du serveur Pushover.net pour générer l’alerte.

Pushover coute 5 US$ par client (Android, IOS ou desktop en plugin Chrome & Firefox) qui recevront les notifications, au maximum de 7500 par mois.

Si de nombreuses utilisations sont possibles, un cas d’école qui peut être retenu est l’installation de ce service de notification avec le logiciel de surveillance « Monit », qui enverra des alertes en fonction de l’état des services surveillés, comme Apache ou MariaDB.

Note

La procédure est donnée telle quelle, sans garantie de fonctionnement.

User Key

Après avoir créé un compte, vous recevrez votre clé utilisateur  « User Key” qui sera composée de 30 caractères alphanumériques, ex. Td5vz6wfqg6s2cmcjSkSus4p5FrF41

Api Token

Si vous souhaitez utiliser un script, il faudra préalablement créer une application qui générera une “Api Token “ également de 30 caractères alphanumériques. J’en ai créé une appelée LinuxAlert qui a créé un token utilisé dans l’exemple plus bas.

Lien avec Monit

Dans notre exemple précédent avec Monit, il était indiqué que dans les scripts de surveillance la quatrième ligne était liée à l’expédition d’une alerte via un système de push dont le tutoriel sera créé ultérieurement par une collègue, c’est donc chose faite.

… then exec "/root/pushover.sh/pushover.sh" if failed port 80 for 2 cycles then restart if 3 restarts within 5 cycles then exec "/root/pushover.sh"

En effet, cette ligne invoque le script « pushover.sh » qui nous fait notre « colle » avec le service Monit.

L’utilisation du programme cURL (client URL request library ou see URL)  est au centre du script, car il permet de créer une ressource correctement formatée qui va créer un objet d’entrée directement sur le service de Pushover.net.

Toutefois, pour que le message passe, il devra comprendre la clé du Token API créé sur le site de PushOver.net, et la clé utilisateur qui vous a été attribuée.

Tests du service PushOver.net

Avant de se lancer dans le script proprement, il est bien de faire un test de notification afin de s’assurer que tout fonctionne correctement (clés Token et utilisateur, firewall, etc…). Créer le fichier texte « alerte » avec le contenu suivant :

#!/bin/bash

curl -s \

--form-string "token=avdrt678902345d1qri86easbav3" \

--form-string "user=alsorditz8d9s9" \

--form-string "message=Hello WORLD" \

https://api.pushover.net/1/messages.json

Enregistrer et marquer le fichier comme exécutable avec

chmod +x alert

Et exécutez le script en tapant

./alert

Le script final

Immédiatement, vous devriez recevoir une notification sur votre récepteur avec le message « Hello World » depuis l’API LinuxAlert créée dans la console. Si cela fonctionne, il faudra adapter le script pour prendre en compte les entrées retournées par les actions Monit. Cela donnera

#!/bin/bash

curl -s \

--form-string "token= avdrt678902345d1qri86easbav3" \

--form-string "user= alsorditz8d9s9" \

--form-string "message=[$MONIT_HOST] $MONIT_SERVICE - $MONIT_DESCRIPTION" \

https://api.pushover.net/1/messages.json

Bons tests !

Maria Perez


  • -

Monitorer les services avec Monit sur CentOS 7…

Category:Linux,Notification,Sécurité,Surveillance Tags : 

NOTE

La procédure est donnée comme cas d’école, et il se peut qu’elle ne convienne pas à vos environnements. Elle est réservée à des personnes expérimentées à même d’en comprendre les tenants et les aboutissants, et d’effectuer les adaptations nécessaires.

Vous devez avoir installé préalablement le repository epel.

Installer MONIT

sudo yum install monit

Démarrer le service Monit

sudo systemctl restart monit.service

Mettez le service Monit en lancement automatique au démarrage du serveur

sudo systemctl enable monit.service

Créer des fichiers de configurations pour surveiller les services

La seconde chose à faire est de créer des fichiers de configurations qui indiqueront à Monit quels sont les services à surveiller, et les actions à entreprendre en cas de dysfonctionnement. Pour commencer, nous allons mettre en œuvre une surveillance du service Apache.

Apache

Créer un fichier apache.conf dans le dossier /etc/monit.d/

nano /etc/monit.d/apache.conf

Le fichier doit contenir les lignes suivantes:

check process httpd with pidfile /var/run/httpd/httpd.pid

start program = "/usr/bin/systemctl start httpd.service" with timeout 60 seconds

stop program = "/usr/bin/systemctl stop httpd.service" if children > 250 then restart if loadavg(5min) greater than 10 for 8 cycles

then exec "/root/pushover.sh/pushover.sh" if failed port 80 for 2 cycles then restart if 3 restarts within 5 cycles then exec "/root/pushover.sh/pushover.sh"

  1. La première ligne indique le service à monitorer
  2. La seconde est la commande de démarrage, en laissant 60 secondes de marge pour indiquer qu’il fonctionne directement (Sur un système lent, cela peut prendre du temps ;>)
  3. La troisième comment le service doit redémarrer en fonction de diverses contraintes.
  4. La quatrième ligne est liée à l’expédition d’une alerte via un système de push dont le tutoriel sera créé ultérieurement par une collègue.

Tester le status de Monit

Afin de voir si Monit démarre correctement avec ce fichier de configuration, il faut le relancer avec

sudo monit reload

Ou

sudo systemctl restart monit

Contrôler que la syntaxe des fichiers est correcte avec

monit -t

Qui devra renvoyer

Control file syntax OK

Et voir le statut de Monit

sudo monit status

Pour avoir une vue simplifiée, il est aussi possible d’utiliser

sudo monit summary

MariaDb

Nous devons créer un fichier de configuration pour surveiller MariaDB

nano /etc/monit.d/mariadb.conf

Le fichier doit contenir les lignes suivantes:

check process mariadb with pidfile /var/run/mariadb/mariadb.pid

start program  "/usr/bin/systemctl start mariadb.service" with timeout 60 seconds

stop program  "/usr/bin/systemctl stop mariadb.service" if children > 250 then restart if loadavg(5min) greater than 10 for 8 cycles

then exec "/root/pushover.sh/pushover.sh" if failed host 127.0.0.1 port 3306 for 2 cycles then restart if 3 restarts within 5 cycles then exec "/root/pushover.sh/pushover.sh"

ProFTPD

Nous devons créer un fichier de configuration pour surveiller notre serveur ProFTPD

nano /etc/monit.d/proftpd.conf

Le fichier doit contenir les lignes suivantes:

check process proftpd with pidfile /var/run/proftpd.pid

start program  "/usr/bin/systemctl start proftpd.services" with timeout 60 seconds

stop program  "/usr/bin/systemctl stop proftpd.services" if children > 250 then restart if loadavg(5min) greater than 10 for 8 cycles

then exec "/root/pushover.sh/pushover.sh" if failed port 21 for 2 cycles then restart if 3 restarts within 5 cycles then exec "/root/pushover.sh/pushover.sh"

SSHD

Nous devons créer un fichier de configuration pour surveiller notre serveur SSHD

nano /etc/monit.d/sshd.conf

Le fichier doit contenir les lignes suivantes:

check process httpd with pidfile /var/run/sshd.pid

start program = "/usr/bin/systemctl start sshd.service" with timeout 60 seconds

stop program = "/usr/bin/systemctl stop sshd.service" if children > 250 then restart if loadavg(5min) greater than 10 for 8 cycles

then exec "/root/pushover.sh/pushover.sh" if failed port 22 protocol ssh for 2 cycles then restart if 3 restarts within 5 cycles then exec "/root/pushover.sh/pushover.sh"

Les options de Monit

Nous n’allons pas rentrer dans les détails ici, mais il faut savoir que Monit possède un fichier de configuration dans

/etc/monit.rc

Le « Polling Frequency » est le paramètre qui indique l’intervalle en seconde du contrôle des services. Le défaut est 30 secondes, ce qui peut sembler être une cadence trop rapide, et cette valeur dépendra surtout du nombre de tests que vous souhaiterez effectuer sur un nombre donné de services et les actions entreprises dans les différents fichiers de configuration. Plus vous surveillerez de service, plus cette valeur devra être importante afin de ne pas surcharger inutilement votre système.

Le fichier comprend également des entrées relatives à son propre serveur WEB affichant des informations sur le port 2812. Par défaut il n’est accessible que depuis la machine hôte avec l’utilisateur admin et le mot de passe monit, et il est évidemment conseillé de laisser ce paramètre ainsi. Voici les paramètres par défaut :

set httpd port 2812 and

    use address localhost  # only accept connection from localhost

    allow localhost        # allow localhost to connect to the server and

    allow admin:monit      # require user 'admin' with password 'monit'

A supposer que l’on désire afficher la page WEB de Monit depuis n’importe quel endroit, ce qui est évidemment déconseillé car extrêmement risqué si ce port est ouvert sur Internet, il suffit de changer les sections suivantes (Ici on n’autorise que depuis adresse IP publique…)

set httpd port 2812 and

# use address localhost  # only accept connection from localhost

allow localhost        # allow localhost to connect to the server and

allow 94.67.23.22      # Votre adresse IP publique

allow admin:monit      # require user 'admin' with password 'monit'

Puis redémarrer le service avec

sudo systemctl restart monit

Contrôler le statut avec

sudo monit status

Et vous devriez pouvoir afficher la page WEB ainsi, indiquant les services surveillées. En cliquant sur un des services, vous accédez à des informations complémentaires, comme par exemple son uptime ou sa consommation mémoire.

Comment tester ?

Il y’a plusieurs manières de faire le test. Trouver par exemple le processus lié à MariaDB en tapant

ps -ef|grep mysqld

Donc mon cas, il s’agit du processus ayant le PID 6926. Je vais donc lui envoyer une commande kill, en tapant

kill 6926

Le /var/log/messages m’indique

mysqld_safe mysqld from pid file /var/run/mariadb/mariadb.pid ended

Puis

Apr  8 21:06:48 www systemd: Stopped MariaDB database server.

Et quelques dizaines de secondes plus tard…

Apr  8 21:07:05 www systemd: Starting MariaDB database server...

Apr  8 21:07:05 www mysqld_safe: 170408 21:07:05 mysqld_safe Logging to '/var/log/mariadb/mariadb.log'.

Apr  8 21:07:05 www mysqld_safe: 170408 21:07:05 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

Apr  8 21:07:07 www systemd: Started MariaDB database server.

Le daemon de MariaDB a donc bien été relancé. Si j’insiste, je recevrai une alerte, mais ceci est une autre histoire…

Maria Perez