Proxmox Virtual Environment est une solution libre de virtualisation basée sur un hyperviseur Linux KVM sous Debian. Il est possible d'utiliser des containers LXC. Nous découvrir la façon de superviser cette solution avec Centreon.
Nous utiliserons une solution Centreon basée sur mon installation automatisée décrite sur ce tutoriel. Evidemment, les plugins utilisés dans ce tutoriel sont entièrement compatibles avec la version officielle de Centreon. La configuration des objets Centreon sera par contre différente des plugins pack Centreon.
Nous utiliserons une solution Centreon basée sur mon installation automatisée décrite sur ce tutoriel. Evidemment, les plugins utilisés dans ce tutoriel sont entièrement compatibles avec la version officielle de Centreon. La configuration des objets Centreon sera par contre différente des plugins pack Centreon.
1 Configuration du serveur Proxmox
1.1 Installation de l'agent SNMP
Tout d'abord nous installons l'agent SNMP sur notre serveur Proxmox.
apt-get install snmp snmpd snmptrapd libnet-snmp-perl libsnmp-perl -y
Modifiez la configuration SNMP en modifiant les lignes suivantes.
# Listen for connections from the local system only
agentAddress udp::161
rocommunity public <IP Central Centreon>
Redémarrez l'agent SNMP
systemctl restart snmpd
1.2 Installation de LM-Sensors
Vous pouvez aussi utiliser lm-sensors pour vérifier l'état de votre matériel physique (températures, ventilateurs). Dans cet exemple j'utilise un shuttle DH 110 d'occasion acheté sur le bon coin. Installez lm-sensors.
apt-get install lm-sensors
Détectez le matériel en lançant la commande suivante
sensors-detect
Redémarrez votre machine et vérifiez la prise en compte de votre matériel.
sensors
it8728-isa-0a40
Adapter: ISA adapter
in0: +0.07 V (min = +2.83 V, max = +2.78 V) ALARM
in1: +1.37 V (min = +2.83 V, max = +2.20 V) ALARM
in2: +1.99 V (min = +2.10 V, max = +1.52 V) ALARM
+3.3V: +3.34 V (min = +3.74 V, max = +1.82 V) ALARM
in4: +1.01 V (min = +0.16 V, max = +0.44 V) ALARM
in5: +2.22 V (min = +1.72 V, max = +3.00 V)
in6: +2.22 V (min = +1.09 V, max = +2.58 V)
3VSB: +3.31 V (min = +1.51 V, max = +3.41 V)
Vbat: +3.12 V
fan1: 1614 RPM (min = 13 RPM)
temp1: +31.0°C (low = -81.0°C, high = -106.0°C) ALARM sensor = thermistor
temp2: +26.0°C (low = -22.0°C, high = -70.0°C) ALARM sensor = Intel PECI
temp3: -128.0°C (low = -63.0°C, high = -100.0°C) sensor = disabled
intrusion0: ALARM
acpitz-acpi-0
Adapter: ACPI interface
temp1: +27.8°C (crit = +119.0°C)
temp2: +29.8°C (crit = +119.0°C)
pch_skylake-virtual-0
Adapter: Virtual device
temp1: +37.5°C
coretemp-isa-0000
Adapter: ISA adapter
Package id 0: +26.0°C (high = +84.0°C, crit = +100.0°C)
Core 0: +23.0°C (high = +84.0°C, crit = +100.0°C)
Core 1: +23.0°C (high = +84.0°C, crit = +100.0°C)
Core 2: +25.0°C (high = +84.0°C, crit = +100.0°C)
Core 3: +26.0°C (high = +84.0°C, crit = +100.0°C)
1.3 Création d'un compte de service Proxmox
Maintenant, nous avons besoin d'un compte capable d'accéder aux objets de Proxmox afin de les monitorer. Connectez-vous à l'interface de Proxmox. Sélectionnez Datacenter -> Permissions -> Utilisateurs
Ajoutez un utilisateur de type "Proxmox VE authentication". Saisissez le mot de passe. Pour notre exemple nous utiliserons monitoring mdp supervision.
Notre compte de service est prêt.
Nous allons créer un rôle pour ce compte. Il doit avoir les droits suivants : VM.Monitor, VM.Audit, Datastore.Audit, Sys.Audit, Sys.Syslog. Sélectionnez le menu rôles, créez le rôle PVEMonitoring avec les droits précédents.
Il faut ajouter le rôle au compte de service. Sélectionnez Permissions, cliquez sur Ajouter, Permissions de l'utilisateur.
Ajoutez le chemin le plus haut, l'utilisateur monitoring@pve et le rôle PVEMonitoring.
Vous devriez avoir la permission suivante :
A partir du serveur Centreon, vous pouvez vérifier la connexion au serveur Proxmox.
curl -k -d "username=monitoring@pve&password=supervision" https://192.168.1.146:8006/api2/json/access/ticket
{"data":{"ticket":"PVE:monitoring@pve:5E3E6DC9::eKy9CKLW7dYccZgZPSNZCZTk+eNJn+fgYfo8ICsyAgjYGA/l8X5qwsfXk/sM2OGmZcj3xSpS9d8QjqpWoUSL8nN/66Js2noBTue35sEy9r3fJz8Y6EA9xLWw80cwCZjdPOXnUOiAzbgcClzIY0Tb9q6bZ888Z6KrBunOIFEzJSpKs64YfEMtsCvJv9sicbFDZ18LwObJLiTNdCHxesmigbQUCyYIZsXhSzdrw+ieoxcvQh9xc3KYyVTnzNCollg9AOthh0jRPMIUVDukwC3men/kSxLz9MRxgf988Rj7FUaRu+cs0kSvAY0yZopGs9r2B7ziBeqm7YY2HKTkxmkwbg==","cap":{"vms":{"VM.Audit":1,"VM.Monitor":1},"nodes":{"Sys.Audit":1,"Sys.Syslog":1},"access":{},"storage":{"Datastore.Audit":1},"dc":{"Sys.Audit":1}},"CSRFPreventionToken":"5E3E6DC9:/kixbu0ewcJxaNHTq5q0NPIHoIKO69ao5XNa2NTohJY","username":"monitoring@pve"}}root@vmbuster:~#
2 le plugin centreon_proxmox_ve_restapi.pl
Si le plugin centreon n'est pas installé sur votre serveur CentOS, lancez cette commande :
yum install centreon-plugin-Virtualization-Proxmox-Ve-Restapi -y
Connectons-nous sur le serveur de supervision Centreon. Nous utiliserons le plugin centreon_proxmox_ve_restapi.pl. Prenez l'habitude de vous connecter en tant que centreon-engine pour tester le plugin. Voici les principaux modes de supervision de ce plugin.
/usr/lib/centreon/plugins/centreon_proxmox_ve_restapi.pl --plugin apps::proxmox::ve::restapi::plugin --list-mode
....
Modes Available:
list-nodes
list-storages
list-vms
node-usage
storage-usage
version
vm-usage
Les trois premiers modes servent principalement à la découverte d'objets à superviser. Ils sont généralement utilisés avec l'auto-discovery (module actuellement non-libre). Voici les paramètres de connexion en RestAPI commun à tous ces modes.
Rest api Options:
Proxmox Rest API
More Info about Proxmox VE API on
https://pve.proxmox.com/wiki/Proxmox_VE_API
--hostname
Set hostname or IP of Proxmox VE Cluster node
--port Set Proxmox VE Port (Default: '8006')
--proto Specify https if needed (Default: 'https').
--api-username
Set Proxmox VE Username API user need to have this privileges
'VM.Monitor, VM.Audit, Datastore.Audit, Sys.Audit, Sys.Syslog'
--api-password
Set Proxmox VE Password
--realm Set Proxmox VE Realm (pam, pve or custom) (Default: 'pam').
--timeout
Threshold for HTTP timeout.
Avec notre configuration, nous utiliserons donc cette syntaxe suivante avec le mode version :
/usr/lib/centreon/plugins//centreon_proxmox_ve_restapi.pl --plugin apps::proxmox::ve::restapi::plugin --mode=version --hostname=192.168.1.146 --port=8006 --proto=https --api-username=monitoring --api-password=supervision --realm=pve
Malheureusement nous n'avons pas le résultat escompté à cause du certificat non vérifié.
UNKNOWN: 500 Can't connect to 192.168.1.146:8006 (certificate verify failed) |
Le certificat est celui par défaut, donc nous devons ne pas tenir compte de celui-ci en ajoutant le paramètre ssl-opt.
/usr/lib/centreon/plugins//centreon_proxmox_ve_restapi.pl --plugin apps::proxmox::ve::restapi::plugin --mode=version --hostname=192.168.1.146 --port=8006 --proto=https --api-username=monitoring --api-password=supervision --realm=pve --ssl-opt="SSL_verify_mode => SSL_VERIFY_NONE"
Version is '6.1-7'
-
list-nodes
- Liste les noeuds d'un cluster Proxmox. Exemple d'un serveur standalone.
/usr/lib/centreon/plugins//centreon_proxmox_ve_restapi.pl --plugin apps::proxmox::ve::restapi::plugin --mode=list-nodes --hostname=192.168.1.146 --port=8006 --proto=https --api-username=monitoring --api-password=supervision --realm=pve --ssl-opt="SSL_verify_mode => SSL_VERIFY_NONE"
List nodes:
[id = node/pve][name = 'pve'][state = 'online'] -
list-storages
- Liste les espaces de stockage.
/usr/lib/centreon/plugins//centreon_proxmox_ve_restapi.pl --plugin apps::proxmox::ve::restapi::plugin --mode=list-storages --hostname=192.168.1.146 --port=8006 --proto=https --api-username=monitoring --api-password=supervision --realm=pve --ssl-opt="SSL_verify_mode => SSL_VERIFY_NONE"
List Storages:
[id = storage/pve/local][name = 'local'][node = 'pve'][state = 'available']
[id = storage/pve/local-lvm][name = 'local-lvm'][node = 'pve'][state = 'available'] -
list-vms
- Lister les VMS présentes
/usr/lib/centreon/plugins//centreon_proxmox_ve_restapi.pl --plugin apps::proxmox::ve::restapi::plugin --mode=list-vms --hostname=192.168.1.146 --port=8006 --proto=https --api-username=monitoring --api-password=supervision --realm=pve --ssl-opt="SSL_verify_mode => SSL_VERIFY_NONE"
List VMs:
[id = qemu/100][name = 'srvselenium7'][node = 'debkvm'][state = 'stopped'][vmid = '100'][type = 'qemu']
[id = qemu/101][name = 'srvselenium'][node = 'debkvm'][state = 'stopped'][vmid = '101'][type = 'qemu']
[id = qemu/102][name = 'srvselenium8'][node = 'debkvm'][state = 'stopped'][vmid = '102'][type = 'qemu']
[id = qemu/103][name = 'test'][node = 'debkvm'][state = 'stopped'][vmid = '103'][type = 'qemu']
[id = qemu/104][name = 'poller33'][node = 'debkvm'][state = 'stopped'][vmid = '104'][type = 'qemu']
[id = qemu/105][name = 'unbuntu1604'][node = 'debkvm'][state = 'stopped'][vmid = '105'][type = 'qemu']
[id = qemu/106][name = 'vmtechcentreon'][node = 'debkvm'][state = 'stopped'][vmid = '106'][type = 'qemu']
[id = qemu/107][name = 'vmsocle'][node = 'debkvm'][state = 'running'][vmid = '107'][type = 'qemu']
[id = qemu/108][name = 'vma6-db'][node = 'debkvm'][state = 'stopped'][vmid = '108'][type = 'qemu']
[id = qemu/109][name = 'vma6-central'][node = 'debkvm'][state = 'stopped'][vmid = '109'][type = 'qemu']
[id = qemu/110][name = 'vma6-poller'][node = 'debkvm'][state = 'stopped'][vmid = '110'][type = 'qemu']
[id = qemu/111][name = 'vma7-db'][node = 'debkvm'][state = 'stopped'][vmid = '111'][type = 'qemu']
[id = qemu/112][name = 'vma7-central'][node = 'debkvm'][state = 'stopped'][vmid = '112'][type = 'qemu']
[id = qemu/113][name = 'vma7-poller'][node = 'debkvm'][state = 'stopped'][vmid = '113'][type = 'qemu']
[id = qemu/114][name = 'test-windows'][node = 'debkvm'][state = 'stopped'][vmid = '114'][type = 'qemu']
[id = qemu/115][name = 'TestOracle'][node = 'debkvm'][state = 'stopped'][vmid = '115'][type = 'qemu']
[id = qemu/116][name = 'windows2016'][node = 'debkvm'][state = 'stopped'][vmid = '116'][type = 'qemu']
[id = qemu/117][name = 'deb9central'][node = 'debkvm'][state = 'stopped'][vmid = '117'][type = 'qemu']
[id = qemu/118][name = 'deb8central'][node = 'debkvm'][state = 'stopped'][vmid = '118'][type = 'qemu']
[id = qemu/119][name = 'deb8poller'][node = 'debkvm'][state = 'stopped'][vmid = '119'][type = 'qemu']
[id = qemu/120][name = 'centreon1904'][node = 'debkvm'][state = 'running'][vmid = '120'][type = 'qemu']
[id = qemu/121][name = 'map1904'][node = 'debkvm'][state = 'running'][vmid = '121'][type = 'qemu']
[id = qemu/122][name = 'testbuster'][node = 'debkvm'][state = 'running'][vmid = '122'][type = 'qemu']
[id = qemu/123][name = 'mbi1904'][node = 'debkvm'][state = 'stopped'][vmid = '123'][type = 'qemu']
[id = qemu/124][name = 'centreon1910'][node = 'debkvm'][state = 'stopped'][vmid = '124'][type = 'qemu']
[id = qemu/125][name = 'debowncloud'][node = 'debkvm'][state = 'running'][vmid = '125'][type = 'qemu'] -
node-usage
- Vérification d'un noeud Proxmox, dans cet exemple nous vérifions le serveur Proxmox en standalone (statut, cpu, mémoire et disques).
/usr/lib/centreon/plugins//centreon_proxmox_ve_restapi.pl --plugin apps::proxmox::ve::restapi::plugin --mode=node-usage --hostname=192.168.1.146 --api-username='monitoring' --api-password='supervision' --proto='https' --port='8006' --realm='pve' --ssl-opt="SSL_verify_mode => SSL_VERIFY_NONE"
OK: Node 'node/pve' state : online, CPU Usage : 0.43 %, Memory Total: 15.53 GB Used: 3.40 GB (21.87%) Free: 12.13 GB (78.13%), Root Filesystem Total: 54.63 GB Used: 4.34 GB (7.95%) Free: 50.28 GB (92.05%), Swap Total: 8.00 GB Used: 0.00 B (0.00%) Free: 8.00 GB (100.00%) | 'cpu'=0.43%;;;0;100 'memory_used'=3645902848B;;;0;16672489472 'fs_used'=4665094144B;;;0;58653261824 'swap_used'=0B;;;0;8589930496
Dans un cluster Proxmox, on pourra préciser le nom d'un noeud avec node-id (id exact du noeud), node-name (nom exact du noeud) ou faire un filtre regexp avec filter-name. -
version
- Affiche la version de Proxmox VE
/usr/lib/centreon/plugins//centreon_proxmox_ve_restapi.pl --plugin apps::proxmox::ve::restapi::plugin --mode=version --hostname=192.168.1.146 --port=8006 --proto=https --api-username=monitoring --api-password=supervision --realm=pve --ssl-opt="SSL_verify_mode => SSL_VERIFY_NONE"
Version is '6.1-7' -
vm-usage
- Ce mode liste toutes les VM. Nous obtenons les valeurs CPU, Mémoire, I/O, trafic réseau. Attention, sans filtre, le plugin fournis 12 métriques par VM.
/usr/lib/centreon/plugins//centreon_proxmox_ve_restapi.pl --plugin apps::proxmox::ve::restapi::plugin --mode=vm-usage --hostname=192.168.1.146 --api-username='monitoring' --api-password='supervision' --proto='https' --port='8006' --realm='pve' --ssl-opt="SSL_verify_mode => SSL_VERIFY_NONE"
OK: All vms are ok - All vm traffics are ok | 'memory_used_qemu/100'=0B;;;0;1073741824 'memory_used_qemu/101'=0B;;;0;1073741824 'memory_used_qemu/102'=0B;;;0;1073741824 'memory_used_qemu/103'=0B;;;0;1073741824 'memory_used_qemu/104'=0B;;;0;1073741824 'memory_used_qemu/105'=0B;;;0;1073741824 'memory_used_qemu/106'=0B;;;0;1073741824 'memory_used_qemu/107'=267309056B;;;0;536870912 'memory_used_qemu/108'=0B;;;0;1073741824 'memory_used_qemu/109'=0B;;;0;1073741824 'memory_used_qemu/110'=0B;;;0;1073741824 'memory_used_qemu/111'=0B;;;0;1073741824 'memory_used_qemu/112'=0B;;;0;1610612736 'memory_used_qemu/113'=0B;;;0;1073741824 'memory_used_qemu/114'=0B;;;0;2147483648 'memory_used_qemu/115'=0B;;;0;2147483648 'memory_used_qemu/116'=0B;;;0;4294967296 'memory_used_qemu/117'=0B;;;0;2147483648 'memory_used_qemu/118'=0B;;;0;1073741824 'memory_used_qemu/119'=0B;;;0;1073741824 'memory_used_qemu/120'=2045222912B;;;0;3221225472 'memory_used_qemu/121'=1692672000B;;;0;2147483648 'memory_used_qemu/122'=333209600B;;;0;1073741824 'memory_used_qemu/123'=0B;;;0;4294967296 'memory_used_qemu/124'=0B;;;0;2147483648 'memory_used_qemu/125'=926412800B;;;0;1073741824
Vous pouvez utiliser l'option verbose pour afficher plus d'information dans le champ Extended status information.
2.1 Intégration dans Centreon
Nous utiliserons la version open-source sans plugin-pack. Je m'appuie sur le script create_config_initialV5.sh de mon github. Pour les heureux possesseurs des plugins-pack, il suffira d'installer le pack centreon-pack-virtualization-proxmox-ve-restapi.
2.1a Création des commandes
Nous allons créer quatre commandes : cmd_virt_proxmox_version, cmd_virt_proxmox_node, cmd_virt_proxmox_vm et cmd_virt_proxmox_storage
Template cmd_virt_proxmox_node
Command Line :
$CENTREONPLUGINS$/centreon_proxmox_ve_restapi.pl --plugin apps::proxmox::ve::restapi::plugin --mode=node-usage --hostname=$HOSTADDRESS$ --api-username='$_HOSTPROXMOXUSERNAME$' --api-password='$_HOSTPROXMOXPASSWORD$' --proto='$_HOSTPROXMOXPROTO$' --port='$_HOSTPROXMOXPORT$' --realm='$_HOSTPROXMOXREALM$' $_HOSTPROXMOXOPTIONS$ --filter-name='$_SERVICEFILTERNAME$' --warning-cpu='$_SERVICEWARNINGCPU$' --critical-cpu='$_SERVICECRITICALCPU$' --warning-memory='$_SERVICEWARNINGMEMORY$' --critical-memory='$_SERVICECRITICALMEMORY$' --warning-swap='$_SERVICEWARNINGSWAP$' --critical-swap='$_SERVICECRITICALSWAP$' --warning-fs='$_SERVICEWARNINGFS$' --critical-fs='$_SERVICECRITICALFS$' $_SERVICEOPTIONS$
Template cmd_virt_proxmox_storage
Command Line :
$CENTREONPLUGINS$/centreon_proxmox_ve_restapi.pl --plugin apps::proxmox::ve::restapi::plugin --mode=storage-usage --hostname=$HOSTADDRESS$ --api-username='$_HOSTPROXMOXUSERNAME$' --api-password='$_HOSTPROXMOXPASSWORD$' --proto='$_HOSTPROXMOXPROTO$' --port='$_HOSTPROXMOXPORT$' --realm='$_HOSTPROXMOXREALM$' $_HOSTPROXMOXOPTIONS$ --filter-name='$_SERVICEFILTERNAME$' --warning-storage='$_SERVICEWARNINGSTORAGE$' --critical-storage='$_SERVICECRITICALSTORAGE$' $_SERVICEOPTIONS$
Template cmd_virt_proxmox_vm
Command Line :
$CENTREONPLUGINS$/centreon_proxmox_ve_restapi.pl --plugin apps::proxmox::ve::restapi::plugin --mode=vm-usage --hostname=$HOSTADDRESS$ --api-username='$_HOSTPROXMOXUSERNAME$' --api-password='$_HOSTPROXMOXPASSWORD$' --proto='$_HOSTPROXMOXPROTO$' --port='$_HOSTPROXMOXPORT$' --realm='$_HOSTPROXMOXREALM$' $_HOSTPROXMOXOPTIONS$ --filter-name='$_SERVICEFILTERNAME$' --warning-cpu='$_SERVICEWARNINGCPU$' --critical-cpu='$_SERVICECRITICALCPU$' --warning-memory='$_SERVICEWARNINGMEMORY$' --critical-memory='$_SERVICECRITICALMEMORY$' --warning-traffic-in='$_SERVICEWARNINGTRAFFICIN$' --critical-traffic-in='$_SERVICECRITICALTRAFFICIN$' --warning-traffic-out='$_SERVICEWARNINGTRAFFICOUT$' --critical-traffic-out='$_SERVICECRITICALTRAFFICOUT$' --warning-read-iops='$_SERVICEWARNINGREADIOPS$' --critical-read-iops='$_SERVICECRITICALREADIOPS$' --warning-write-iops='$_SERVICEWARNINGWRITEIOPS$' --critical-write-iops='$_SERVICECRITICALWRITEIOPS$' $_SERVICEOPTIONS$
Template cmd_virt_proxmox_version
Command Line :
$CENTREONPLUGINS$/centreon_proxmox_ve_restapi.pl --plugin apps::proxmox::ve::restapi::plugin --mode=version --hostname=$HOSTADDRESS$ --api-username='$_HOSTPROXMOXUSERNAME$' --api-password='$_HOSTPROXMOXPASSWORD$' --proto='$_HOSTPROXMOXPROTO$' --port='$_HOSTPROXMOXPORT$' --realm='$_HOSTPROXMOXREALM$' $_HOSTPROXMOXOPTIONS$ $_SERVICEOPTIONS$
2.1b Création du template de service
Nous allons créer quatre templates de services basé sur le template service-generique-actif : stpl_virt_proxmox_version, stpl_virt_proxmox_node, stpl_virt_proxmox_vm et stpl_virt_proxmox_storage. On commence par stpl_virt_proxmox_version
Commande stpl_virt_proxmox_version
Onglet Extended Info
Commande stpl_virt_proxmox_node
On continue avec stpl_virt_proxmox_node
Onglet Extended Info
Commande stpl_virt_proxmox_vm
Puis avec stpl_virt_proxmox_vm
Onglet Extended Info
Commande stpl_virt_proxmox_storage
Et enfin avec stpl_virt_proxmox_storage
Onglet Extended Info
Voici la liste des templates
2.1c Création du template d'hôte
Nous continuons avec la création du template d'hôte pour Proxmox. Nous le nommerons htpl_virt_proxmox.
Onglet Relations, nous ajoutons les templates de services
Onglet Extended Infos
2.1d Création de l'hôte Proxmox.
Il nous reste à créer notre hôte grâce à notre template d'hôte. Nous rajouterons le template htpl_OS-Linux-SNMP avec le template htpl_virt_proxmox. Nous ajouterons aussi un service pour lm-sensors, voir l'article en question.
Voici les valeurs des macros personnalisées :
PROXMOXUSERNAME : monitoring
PROXMOXPASSWORD : supervision
PROXMOXPROTO : https
PROXMOXPORT : 8006
PROXMOXREALM : pve
PROXMOXOPTIONS : --ssl-opt="SSL_verify_mode => SSL_VERIFY_NONE"
PROXMOXUSERNAME : monitoring
PROXMOXPASSWORD : supervision
PROXMOXPROTO : https
PROXMOXPORT : 8006
PROXMOXREALM : pve
PROXMOXOPTIONS : --ssl-opt="SSL_verify_mode => SSL_VERIFY_NONE"
Après application de la configuration, nous obtenons ceci dans la vue temps réels.
Cet article est terminé, vous avez vu comment on utilise un plugin Centreon pour Proxmox. J'y reviendrai certainement pour ajouter mes expériences personnelles.