surveillance du réseau
monitoring avec Nagios

et pve-monitor (proxmox)

 

 

Dans l'article précédent j'ai expliqué pourquoi j'utilisai un Raspberry consacré uniquement aux différentes sauvegardes , à la communication par GSM et à la surveillance de mon PC sur lequel sont installées mes différentes machines virtuelles.
Après avoir réalisé une liaison série avec le mini PC hébergeant mes machines virtuelles , j"ai installé sur le Raspberry , qui assure déjà les fonctions de serveur GSM et de pilotage de Domoticz par SMS, un logiciel de surveillance réseau.
J'ai choisi Nagios et le plugin pve-monitor pour surveiller toutes mes VM ainsi que le stockage de les sauvegardes.

Les notifications , par Email , par SMS et internet ou par SMS et modem GSM , sont développées sur cette page.

 

 

Pré-requis

SSH est installé afin d'utiliser Putty
Le pare feu UFW est installé

nagios129

- Activez SSH et configurez-le pour un démarrage automatique si possible

- Mettre le PI à jour :

nagios1

la mise à jour peut être assez longue.....
quand elle est terminée: sudo reboot

Nagios a une interface web, il faut donc installer Apache et PHP : sur le PI je démarre automatiquement sur un SSD aussi j'ai installé Ubuntu 20.X;
pour faire des essai , j'ai utilisé PI OS (Raspbian) , les Packages requis diffèrent quelque peu aussi voici les 2 installations:

- sur PI OS,

-

- sur Ubuntu 20.x

nagios91

 

 

Nagios

téléchargez la dernière version avec wget
- pour nagios core et plugins , liens sur cette page ; https://support.nagios.com/kb/article/nagios-core-installing-nagios-core-from-source-96.html

juin 2021 , avec la version 4.4.5:

nagios2

nagios3

Compilation :

nagios4

nagios5

nagios6

 

Créer l’utilisateur et le groupe pour Nagios , et pour apache (s'il n'existe pas)

 

nagios128

nagios7

 

 

installation :

nagios8

nagios9

nagios10

nagios11

 

Configuration d'Apache pour Nagios

- Activer les modules rewrite et CGI

nagios12

- Copier la configuration dans le dossier Apache
Important : il faut toujours être dans le dossier nagioscore-nagios-4.4.x

OU (solution plus facile)

nagios13

- Créez au moins un utilisateur pour accéder à l’interface web :

nagios14

 

- Configurer le pare-feu UFW :ajouter le port HTTP SSH et Apache
Pour cela, il faut être ROOT,

nagios95

 

Correction , si le profil Apache2 UFW est manquant :
Could not find a profile matching 'Apache'


créer avec nano un nouveau fichier " /etc/ufw/applications.d/apache2-utils.ufw.profile"

[Apache]
title=Web Server
description=Apache v2 .
ports=80/tcp

[Apache Secure]
title=Web Server (HTTPS)
description=Apache v2 .
ports=443/tcp

[Apache Full]
title=Web Server (HTTP,HTTPS)
description=Apache v2 .
ports=80,443/tcp

nagios127

 

 

Pour un démarrage automatique du pare-feu : ufw enable

nagios96

 

- Dernière vérification : Le dossier « rw » et le fichier nagios.cmd doivent appartenir au groupe nagioscmd (nagios.cmd n'existe qu'après le lancement de Nagios)
Pour Ubuntu , voir la correction ci-après.

nagios125

 

Correction pour UBUNTU

Changement de groupe du dossier /usr/local/nagios/var/rw/

systemctl stop nagios
sudo chown -R nagios:www-data /usr/local/nagios/var/rw/
systemctl start nagios

 

 

- Redémarrer Apache :

OU

nagios15

 

Malgré ces vérifications il peut y avoir des problèmes d'autorisation à chaque démarrage de Nagios lors d'un reboot du système (un reload de nagios ne crée pas de problème); sur le web , il y a de nombreuses solutions qui sont proposées mais pour moi aucunes n'ont fonctionné .

J'ai donc choisi de créer un script bash, lancé par systemd lors d'un démarrage du système, pour modifier les droits;
les modifications à apporter:
- création du script sudo nano /home/USER/nagios_cmd.sh

nagios138

- Création du script pour un lancement automatique avec systemd: sudo nano /etc/systemd/system/droits_nagios.service

[Unit]
Description=modification des droits de nagios.cmd

[Service]
Type=simple
ExecStart=/home/michel/nagios_cmd.sh

[Install]
WantedBy=multi-user.target

nagios139

nagios140

Pour assurer le démarrage automatique: systemctl enable droits_nagios.service
- pour un lancement manuel : systemctl start droits_nagios.service

les droits : ici 777 mais 666 devrait suffire.

 

 

- Pour vérifier que vous avez accès à l'interface web de Nagios :
.....Ouvrez la page http://<IP du PI>nagios

nagios16

nagios17

 

 

Démarrage du service Nagios ;

nagios18

Pour démarrer Nagios automatiquement :

nagios19

Résultat en actualisant la page nagios du navigateur : message « Daemon running.....

nagios20

 

 

Mise à Jour de Nagios

exemple avec la version 4.4.6 ,

nagios21

nagios22

nagios23

make all
make install

.......comme pour l'installation initiale.

pour vérifiez les fichiers de configuration avant de continuer,

nagios24

nagios25

Redémarrez Nagios Core :
/sbin/service nagios start

nagios26

nagios27

 

 

 

Installation des plugins Nagios

Prérequis : packages à installer si' ils ne sont pas déjà ,

nagios28

Téléchargement et extraction de l'archive:

nagios29

nagios30

Compilation et installation :

nagios31

nagios32

nagios33

nagios34

nagios35

Les fichiers de configurations de Nagios se trouvent dans le dossier ou les sous-dossiers de /usr/local/nagios/etc/
le fichier de configuration principal est nagios.cfg.

nagios36

nagios37

nagios38

Le seul serveur contrôlé pour l’instant est le serveur qui héberge nagios et pour ce serveur le fichier de configuration s’appelle localhost.cfg
Dans le dossier objects nous allons créer un dossier proxmox, c’est dans ce dossier que nous allons configurer toutes nos machines virtuelles à superviser.
Ajoutons ce dossier dans nagios.cfg en remplacement de localhost.cfg

nagios39

Création du répertoire proxmox dans /usr/local/nagios/etc/objects

nagios40

nagios41

Dans le dossier proxmox, nous allons créer trois fichiers:
- vm_hosts.cfg,
- vm_hostgroups.cfg et
- vm_services.cfg

Pour avoir un modèle pour ajouter des serveurs on peut faire des copies de localhost.cfg

nagios42

 

HOST DEFINITION :

Ctrl K pour supprimer des lignes

nagios43

Pour éviter de copier un grand nombre de données on utilise des modèles (templates):
https://wiki.monitoring-fr.org/nagios/nagios-debutant/templates-hostgroups-pivots

nagios120

nagios121

Le fichier /usr/local/nagios/etc/objectstemplates.cfg/:

nagios122

HOST GROUP DEFINITION:

nagios44

SERVICE DEFINITIONS :
Comme pour les hosts on peut utiliser un modèle

nagios45

Les options :
-w est l’argument pour le seuil de Warning (avertissement), la première valeur 100.0 est le temps moyen du ping et la valeur 20% est le pourcentage de paquets perdu avant que le service ne se mette en étant WARNING

-c est l’argument pour le seuil Critical (état critique), les valeurs sont 500 ms et le pourcentage de paquets perdus est à 60% avant que le service ne se mette en état CRITICAL.

-p est le nombre de ping que va faire la commande.

 

 

Autres configurations:

 

Configuration les périodes de temps

Ces périodes peuvent être reconfigurées pour être en phase avec l'activité de certains services, le fichier de configuration se trouve dans le répertoire:
/usr/local/nagios/etc/objects

nagios92

nagios93

nagios94

on vérifie les fichiers de configuration:

 

 

 

Plugin pve-monitor (proxmox)

il utilise le module Perl proxmox-ve-api-perl ,
Installations de quelques librairies Perl:

nagios46

Installation du module Perl proxmox-ve-api-perl:

nagios47

Installation de pve-monitor ; vérifier d'installer la dernière version:
http://pve-monitor.scriptutils.com/francais/presentation/

nagios48

nagios49

nagios50

- pve-monitor.conf ne doit pas être lu par Nagios , uniquement par pve-monitor aussi il peut être installé n'importe où sauf dans le répertoire de Nagios.

nagios51

 

 

Déclarer un cluster Proxmox dans Nagios

 

nagios52

définir les commandes dans Nagios:
pour afficher les différents modes :

nagios53

Pour ajouter des commandes , éditer le fichier commands.cfg

copier le contenu ci dessous (ou importer les commandes depuis la page d'accueil de pve-monitor ,http://pve-monitor.scriptutils.com/francais/presentation/ ) à la fin de ce fichier ; indiquer le bon chemin pour pve-monitor.conf

nagios54

Pour superviser un cluster : Comme on l'a fait précédemment avec les VM Proxmox , on va indiquer à Nagios le nom du fichier qui regroupe les différentes définitions (hosts,sertvices,..) et créer ce fichier qu'il suffit d'importer depuis la page d' accueil de pve-monitor ou copier le contenu ci-après.

ajouter : cfg_file=/usr/local/nagios/etc/objects/pve-cluster.cfg
le fichier cluster.cfg sera crée ensuite dans /usr/local/nagios/etc/objects/

nagios55

nagios56

# the command check_pve_cluster_nodes give us info
# on the member's cluster state
define host {
host_name pve-cluster
max_check_attempts 10
check_command check_pve_cluster_nodes
}
# define openvz, qemu and storages as services of the cluster
 # pve-monitor < 1.07
define service{
use generic-service
host_name pve-cluster
service_description OpenVZ VMs
check_command check_pve_cluster_openvz
}
# pve-monitor >= 1.07
define service{
use generic-service
host_name pve-cluster
service_description Containers
check_command check_pve_cluster_containers
}
 define service{
use generic-service
host_name pve-cluster
service_description Qemu VMs
check_command check_pve_cluster_qemu
} 
define service{
use generic-service
host_name pve-cluster
service_description Storages
check_command check_pve_cluster_storage
}

les lignes en rouge sont à supprimer.

nagios57

 

Dans Proxmox, configurer un utilisateur en lecture seule

- Créer l'utilisateur du cluster

nagios58

- Ajouter les autorisations

nagios59

 

 

Le fichier pve-monitor.conf : je l'ai installé dans mon répertoire utilisateur mais il peut , comme je l'ai déjà indiqué ,être installé où vous le souhaitez à condition de ne pas être appelé par Nagios.
le créer avec nano :

#exemple pve-monitor.conf

# node Proxmox
node pve {
    address 192.168.1.140
    port 8006 # Optional, default is 8006
    monitor_account root
    monitor_password xxxxxxxx
    realm pam # Optional, default is pam
    mem 80 90 # optional, not monitored if not defined
    cpu 80 95 # optional
    disk 80 90 # optional
}

# pour des CT :  container
# pour des VM :  qemu

#container Nginx-LXC
#    mem 80 90
#    cpu 80 95
#    disk 80 90

# nginx
qemu nginx {
    mem 80 90
    cpu 80 95
    disk 80 90
}

# mqtt
qemu mqtt {
    mem 80 90
    cpu 80 95
    disk 80 90
}
# DOMOTICZ
qemu DZ20202 {
    mem 80 90
    cpu 80 95
    disk 80 90
}
# asterisk
qemu asterisk {
    mem 80 90
    cpu 80 95
    disk 80 90
}
# zoneminder
qemu zoneminder {
    mem 80 90
    cpu 80 95
    disk 80 90
}

# storage
storage save_usb {
    disk 80 90
    node pve
}

nagios60

nagios141

Dépannage :
- pour vérifier les fichiers de configuration:

 

- pour vérifier une commande (fichier commands.cfg): copier la commande dans la console.
il est possible d'ajouter plusieurs options comme sur l'image ci-dessous.

nagios61

 

 

Des copies d'écran de Nagios

 

nagios62

surveillance de mes caméras:

nagios110

nagios63

nagios64

nagios65

 

 

Nagios mobile

Nagios Mobile est une interface Web légère, conçue pour les appareils mobiles et à écran tactile.
Si comme moi , vous avez une custom's page sur tablette pour votre système domotique, cette application écrite en PHP s'y s'intègre facilement

Préparation de l'installation

nagios66

Ouvrez le fichier " nagiosmobile_apache.conf " et avec nano vérifiez que l'emplacement du fichier "htpasswd.users" correspond à votre installation.
Pour les installations sources de Nagios Core 4.4.6, le fichier par défaut est :/usr/local/nagios/etc/htpasswd.users

nagios67

nagios68

nagios69

Si vous avez suivi ce tuto pour l’installation de Nagios ,celle cia été faite à partir de la source aussi , si vous n’avez pas modifié l’emplacement des répertoires , ces derniers doivent être :

$STATUS_FILE = "/usr/local/nagios/var/status.dat";
 $COMMAND_FILE = "/usr/local/nagios/var/rw/nagios.cmd"; 
$CGI_FILE = "/usr/local/nagios/etc/cgi.cfg";
 $OBJECTS_FILE = "/usr/local/nagios/var/objects.cache"; 
$BASE_URL = '/nagiosmobile';
$TTL = 30; //Time to live for cached data parsed from status and objects file 
$USER = '';

 

Mise à jour de l'emplacement du répertoire , pour le fichier de configuration apache , dans INSTALL.PHP:

nagios70

ctrl O, Enter, ctrl X

Installation

nagios71

Si comme moi vous rencontrer des problèmes sur Ubuntu 20.x (j' ai fait une installation sur le PI4 qui effectue les sauvegardes de mes VM et assure l'envoi et la réception des SMS et sur ce PI j'ai installé Ubuntu ):

Ubuntu: le répertoire /etc/apache2/conf.d n'existe pas:

le crée:
cd /etc/apache2
mkdir conf.d

nagios104

De nouveau faire ./INSTALL.php (Sous debian c’ est INSTALL.PHP , sur Ubuntu INSTALL.php ???

)

sudo service apache2 reload ,n’a pas fonctionné , mais après un reboot plus de problème ????

Une fois le script d'installation terminé, vous pouvez accéder à l'interface Nagios Mobile par l'adresse suivante dans un navigateur :
http://<IP NAGIOS>nagiosmobile

nagios72

nagios73

nagios74

 

 

Accès distant

- soit directement
- soit affichage dans une page perso distante

il suffit de créer :
- un sous domaine et un host virtuel de la même façon que pour domoticz, zoneminder,zigbee2mqtt,....voir ces pages NGINX, passerelle Zigbee2mqtt,....
Le fichier de configuration dans nginx :

upstream nagios {
        server 192.168.1.8;
}

server {
   server_name  monitoring.DOMAINE.ovh;
   location / {
    proxy_pass http://nagios;
     proxy_set_header Host $host;
        proxy_connect_timeout 30;
        proxy_send_timeout 30;
    }

#auth_basic "Mot de Passe Obligatoire";
#auth_basic_user_file /etc/nginx/.htpasswd;
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/DOMAINE.ovh/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/DOMAINE.ovh/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = monitoring.DOMAINE.ovh) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen       80;
    server_name  monitoring.DOMAINE.ovh;
    return 404; # managed by Certbot
}

DOMAINE est à remplacer par votre domaine

nagios105

https://monitoring.DOMAINE.ovh/nagios: l'accès est sécurisé par le certificat du domaine

nagios106

pour nagios mobile , https://monitoring.DOMAINE.ovh/nagiosmobile:

nagios107

Ajouté dans un site perso (pour une description complète de cette page écrite en PHP et les fichiers de configuration Nginx et Apache2, visitez ce lien.) ,

nagios126

https://monitor.DOMAINE.ovh/:

nagios108

 

 

L' API Nagios

https://labs.nagios.com/2014/06/19/exploring-the-new-json-cgis-in-nagios-core-4-0-7-part-1/

Pour utiliser les CGI, un outil : jsonquery.html, pour y accéder avec un navigateur , taper http://<serveur nagios>/nagios/jsonquery.html

nagios111

Choisir ensuite le type d'information , par exemple status:

nagios112

Si vous choisissez "host" , vous devez choisir un host

nagios113

Vous pouvez utiliser l'url dans des appels ajax , des programmes PHP ,.....
résultat dans un navigateur

nagios114

résultat dans un programme PHP:

nagios116

nagios115

Le programme , il affiche pour chaque host l'état des Pings :

function api_nagios($choix){$n=0;
$URL="http://".NAUSER.":".NAPASS."@".IPNAGIOS."/cgi-bin/objectjson.cgi?query=".$choix;   
echo $URL."

"; $json_string = file_get_curl($URL); $parsed_json = json_decode($json_string, true); $json=$parsed_json['data'][$choix]; $n=0; while ($json[$n]!=""){ $host=$json[$n]; $URL_cam=$URL="http://".NAUSER.":".NAPASS."@".IPNAGIOS."/cgi-bin/statusjson.cgi?query=host&hostname=".$json[$n]; $json_string = file_get_curl($URL_cam); $parsed_json = json_decode($json_string, true); $result=$parsed_json['data']['host']; echo $host." : ".$result['plugin_output']."
"; $n=$n+1; } return ; }

Un seul choix existe (hostlist) pour l'instant mais le programme peut évoluer ......
quelques infos supplémentaires concernant ce programme:

nagios117

 

 

 

crée le 28/06/2021
maj 11/10/2021 ajout correction ufw : Apache manquant
maj 8/02/2022 ajout d'un service systemd pour donner des droits à /usr/local/nagios/var/rw/nagios.cmd
maj 13/01/2023 ajout container à pve-monitor

page:71