La virtualisation avec KVM, libvirt et virt-manager

La virtualisation avec KVM, libvirt et virt-manager

Nous allons voir dans ce tuto comment monter un serveur de virtualisation avec KVM, libvirt et virt-manager, comme vous le savez, ce blog est plus pour moi un aide mémoire, alors n’hésitez pas à corriger/compléter ce billet

Voici la configuration de mes machines “test”:

Machine client pour l’accès à distance:

IP: 192.168.0.1
OS : Ubuntu

Serveur, pour installer KVM:
IP: 192.168.0.2
RAM: 4Go
Processeur: Intel(R) Core(TM) i5 CPU M 520 @ 2.40GHz
Disque dur : 500Go
OS : Debian GNU/Linux 8.7 (jessie)
utilisateurs : Root, zenzla

Toutes les commandes suivante se font avec l’utilisateur root du système.

Installation sur serveur

Vous avez dans ce blog, un tutoriel dédié à l’installation d’une serveur de base avec Debian, il date un peu, mais les principes n’ont pas changé, le seul changement que vous devez apporter c’est de faire un partitionnement manuel et doter /var/ de beaucoup d’espace disque.

Installation de la virtualisation avec KVM

C’est bon, vous avez installé votre machine, mais avant de vous lancez dans l’aventure de la virtualisation avec KVM, il faut activer la virtualisation dans le bios de votre machine si ce n’est déjà le cas. Ensuite vérifiez si votre processeur supporte la technologie Intel VT ou AMD-V.
Si votre processeur est récent, il y a aucune raison qu’il ne soit pas compatible.

En tous cas pour s’assurer que le processeur est compatible :

1
egrep '^flags.*(vmx|svm)' /proc/cpuinfo

Si vous n’avez aucun retour, alors laissez tomber, votre processeur n’est pas compatible 🙁

Dans le cas contraire, félicitation, vous pouvez continuer \o/

Installez maintenant kvm qemu-kvm libvirt-bin virtinst

1
apt-get install kvm qemu-kvm libvirt-bin virtinst

Pour éviter de manipuler les VMs avec le compte “root”, et pour que vos utilisateurs puissent créer des machines virtuelles, ajoutez-les aux groupes libvirt et KVM :

1
2
usermod -a -G libvirtd zenzla
usermod -a -G kvm zenzla

Bien sur, changez “zenzla” par le nom d’utilisateur adéquat.

rebootez la machine

1
reboot

Lors du redémarrage de la machine, connectez vous avec l’utilisateur normal et non à “root”, pour moi c’est zenzla, puis avec la ligne de commande suivante, testez si l’installation à fonctionner.
Si en retour vous avez un tableau vide, sans erreur, c’est que c’est bon

1
virsh -c qemu:///system list
1
2
 Id    Name                           State
----------------------------------------------------

Youhhhhou le serveur est prêt :), rien de compliqué comme vous avez pu le voir.

Maintenant passons coté client

Installation sur le client

Maintenant que le serveur est installé, et que vous avez donné les droits de création de VMs à l’utilisateur, nous passons à la configuration de l’accès à distance.
Sur la machine cliente, qui porte l’IP 192.168.0.1 dans notre cas, il faut installer virt-manager, qui est un utilitaire graphique pour la gestion des machines virtuelles.
Cette étape n’est pas obligatoire, car nous allons voir plus loin que vous avez la possibilité de gérer les VM en ligne de commande, mais virt-manager facilite grandement les choses.

Pour installer virt-manager rien de plus simple.

1
sudo apt-get install virt-manager

Vous pouvez alors lancer virt-manager. Dans un premier temps il est vide

Gestionnaire de machine virtuelle
Gestionnaire de machine virtuelle

Pour ajouter une connexion vers le serveur, afin qu’il puisse gérer les VMs de ce dernier, il faut le paramétrer en allant sur Fichier > Ajouter une connexion
Ajouter les paramètres comme suite :

Hyperviseur : QEMU/KVM
cocher connexion à un hôte distant
Méthode : SSH
Nom d’utilisateur : ajouter le nom d’utilisateur qui a le droit de gérer la virtualisation avec KVM, dans notre cas c’est zenzla
Nom de l’hôte : adresse IP du serveur, dans notre cas 192.168.0.2.

paramètres de connexion
paramètres de connexion

Et hop, it’s all, vous avez maintenant la possibilité de gérer vos VMs à distance grâce à virt-manager
Il faut en amont se connecter en SSH sur le serveur pour que virt-manager se connecte.

Gérer la virtualisation avec KVM en ligne de commande

Comme dit précédemment, il est aussi possible de gérer les VMs via les lignes de commande, et cela via l’outil virsh qui est déjà présent sur votre serveur car il est dans la paquet libvirt-bin précédemment installé.

Dans ce chapitre je vous donne les commandes de base, à vous d’aller plus loin si vous le souhaitez.

Connectez vous à votre serveur en ssh (Je vous recommande, si vous ne l’avez pas fait, de passer à la connexion par échange de clé)

1
ssh zenzla@192.168.0.2

Ensuite connectez-vous à votre hyperviseur via la commande

1
2
3
4
5
~$ virsh -c qemu:///system
Welcome to virsh, the virtualization interactive terminal.

Type: 'help' for help with commands
'quit' to quit

vous entrez alors en mode interactif,  vous devez normalement avoir un prompt virsh #

1
virsh #

Pour voir la liste de toute vos machines actives (ne pas saisir le prompt virsh #)

1
virsh # list

Pour voir la liste de toute vos machines inactives

1
virsh # list --inactive

Pour voir la liste de toute les machines active ou non

1
virsh # list --all

pour démarrer la machine virtuelle VmDebian

1
virsh # start VmDebian

pour redémarrer la machine virtuelle VmDebian

1
virsh # reboot VmDebian

pour arrêter la machine virtuelle VmDebian

1
virsh # shutdown VmDebian

pour arrêter brutalement la machine virtuelle VmDebian

1
virsh # destroy VmDebian

pour afficher les informations d’une machine virtuelle

1
virsh # dominfo VmDebian

pour afficher les informations de la machine qui supporte la virtualisation, machine nœud

1
virsh # nodeinfo

pour sauvegarder la configuration de la machine virtuelle VmDebian, vous devez sortir du mode interactif avant de saisir

1
virsh -c qemu:///system dumpxml VmDebian > /tmp/VmDebian.xml

Vous pouvez ainsi facilenet modifier le fichier XML et créer une nouvelle machine à partir de ces modifications
Plus d’info sur le format XML sur http://libvirt.org/format.html

pour créer une machine virtuelle NewVmDebian à partir d’un fichier XML

1
virsh -c qemu:///system create /tmp/NewVmDebian.xml

Et voilà !! N’hésitez pas à partager ce billet !!!

Installer Nagios sur Fedora 17

Installer Nagios sur Fedora 17

Surveillé vos serveur avec Nagios
Surveillé vos serveur avec Nagios
Ce billet explique étapes par étapes l’installation de Nagios sur une distribution Fedora 17 (Beefy Miracle)
L’installation n’est pas très différente sur les autres distributions comme Ubuntu.
Une connaissance des lignes de commande est obligatoire.
Nagios est un logiciel libre sous licence GPL, il permet de surveiller le réseau, système hôte et emmètre des alertes quand un problème est identifié. Il est très utilisé en administration système

1) Intalation
Assurez-vous que vous avez installé les paquets suivants sur votre installation de Fedora avant de continuer.

  • Apache
  • PHP
  • Compilateur GCC
  • GD bibliothèques de développement

Vous pouvez installer ces paquets en exécutant les commandes suivantes (en tant que root):

1
2
3
yum install httpd php
yum install gcc glibc glibc-common
yum install gcc glibc glibc-common

a) Création d’un compte utilisateur

Création d’un utilisateur nagios avec un mot de passe

1
2
/usr/sbin/useradd -m nagios
passwd nagios

Création d’un nouveau groupe nagcmd pour permettre à des commandes d’être exécutés à partir de l’interface Web. Ajouter à ce groupe les utilisateurs « nagios » et « apache »

1
2
3
/usr/sbin/groupadd nagcmd
/usr/sbin/usermod -a -G nagcmd nagios
/usr/sbin/usermod -a -G nagcmd apache

b) Téléchargement de nagios et les plugins

Créer un répertoire pour stocker les téléchargements.

1
2
mkdir /etc/downloads
cd /etc/downloads

Télécharger l’archive du code source de Nagios et des plugins Nagios (visitez le site http://www.nagios.org/download/ pour des liens vers les dernières versions). Dans notre cas les versions sont Nagios 3.1.1 et Nagios Plugins 1.4.11

1
2
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.3.tar.gz
wget http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.11.tar.gz

c) Compilation et installation de nagios Extraire les codes sources de nagios de l’archive

1
2
tar xzf nagios-3.2.3.tar.gz
cd nagios-3.2.3

Exécutez le script de configuration de Nagios, en passant le nom du groupe que vous avez créé plus tôt

1
./configure --with-command-group=nagcmd

Compilez le code source de Nagios

1
make all

Installation des binaires, du script d’initialisation, des fichiers de configuration et de la permission des commandes externes

1
2
3
4
make install
make install-init
make install-config
make install-commandmode

d) Personnaliser la configuration
A ce stade de l’installation des exemples de fichier de configuration ont été installés dans le répertoire /usr/local/nagios/etc. Ces exemples de fichiers devraient fonctionner correctement pour commencer avec Nagios. Vous aurez besoin de faire un seul changement avant de poursuivre … Il faut modifier le fichier de configuration /usr/local/nagios/etc/objects/contacts.cfg et d’y ajouter le contact de l’administrateur qui recevra les alertes.

1
vi /usr/local/nagios/etc/objects/contacts.cfg

e) Configuration de l’interface Web
Installez le fichier configuration web de Nagios dans le répertoire conf.d d’Apache.

1
make install-webconf

Créer un compte nagiosadmin pour vous connecter à l’interface web de Nagios. Rappelez-vous le mot de passe que vous attribuez à ce compte, vous en aurez besoin plus tard.

1
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

Redémarrez Apache pour que les nouveaux paramètres soient pris en compte.

1
/etc/init.d/httpd restart

f) Compilation et installation des Plugins Nagios

Décompresser l’archive du code source des plugins Nagios

1
2
3
cd /etc/downloads
tar xzf nagios-plugins-1.4.11.tar.gz
cd nagios-plugins-1.4.11

Compiler et installer les plugins

1
2
3
./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
make install

g) Lancement de Nagios
Ajouter Nagios à la liste des services de démarrage automatique du système

1
2
chkconfig --add nagios
chkconfig nagios on

Nous pouvons vérifier la bonne installation de Nagios avec la commande suivante

1
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Si pas d’erreurs constatées, nous pouvons lancer Nagios

1
/etc/init.d/nagios start

h)Fedora et SeLinux
Security-Enhanced Linux, abrégé SELinux, est un Linux security module (LSM), qui permet de définir une politique de contrôle d’accès obligatoire aux éléments d’un système basé sur Linux. Activé, ce module peut entraîner des erreurs internes du serveur lorsque vous tentez d’accéder aux CGI de Nagios. Il faut donc modifier le fichier de configuration /etc/selinux/config

1
vi /etc/selinux/config

Et le désactivé ou le mettre en mode permissif comme suite

1
2
3
[...]
SELINUX=disabled
[...]

Pour que cette modification soit prise en compte il est nécessaire de redémarrer la machine

1
reboot

i) Utilisation des CGI par Nagios
Les paramètres CGI sont activés par défaut lors de l’installation d’apache si ce n’est pas le cas nous pouvons l’active en modifiant le fichier config d’Apache httpd.conf

1
vi /etc/httpd/conf/httpd.conf

Et décommenter la ligne suivant AddHandler cgi-script .cgi

1
2
3
[...]
AddHandler cgi-script .cgi
[...]

Vous pouvez maintenant accéder à Nagios via l’url http://localhost/nagios/

accueil Nagios
Accueil nagios

Dans un premier temps l’outil détecte uniquement la machine sur laquelle il est installé « localhost », pour qu’il détecte les machines qu’il doit superviser et récupérer les informations nous devons les ajouter dans les fichiers de configuration, mais cela ne suffit pas, il faut aussi ajouter sur chaque machines distantes un agent qui pourra renseigner les plugins Nagios des informations dont ils ont besoin. La mise en place de cet agent diffère en fonction du système d’exploitation de la machine à surveiller ou du matériel.

Dans notre cas nous prendrons pour exemple uniquement des machines sous Linux (FEDORA) Une fois l’agent installé, il faut créer de nouvelles définitions d’hôtes et de service pour surveiller la machine puis redémarrer le démon Nagios.

2) Ajout des hosts

Nous avons besoin d’un agent sur les serveurs à surveiller et des plugins Nagios. Nous utiliserons pour plugins “NRPE”.

NRPE (Nagios Remote Plugin Executor) est un “Addons” pour Nagios qui permet d’exécuter des plugins sur un serveur Linux/Unix distant. Cela permet de surveiller des ressources locales (charge du processeur, utilisation de la mémoire, espace disque…) qui ne sont normalement pas disponibles depuis d’autres machines. Afin d’interroger le client NRPE il faudra utiliser le greffon “check_nrpe” sur notre serveur Nagios “supervision”.

Pour ce faire il va falloir installer nrpe sur notre serveur Nagios, et sur toutes les machines à surveiller. De plus il faudra installer les plugins Nagios sur chaque serveur distant à surveiller. Dans notre les machines à supervisée ont le nom de aquilon12, aquilon9, aquilon7.

a) Installation de NRPE et des plugins Nagios sur le serveur Linux distant
Avant de commencer l’installation, nous devons d’abord nous assurer de disposer des librairies “openssl-devel”, “build-essential”. Il peut être également intéressant d’installer les librairies make, gcc, gcc-c++ et Net-SNMP.

1
2
3
yum install make gcc
 yum install openssl-devel build-essential
 yum install snmpd snmp

Pour télécharger les archives plaçons-nous dans le répertoire /usr/local/src et téléchargeons les fichiers nécessaires.

1
2
3
 cd /usr/local/src/
 wget http://downloads.sourceforge.net/project/nagios/nrpe-2.x/nrpe-2.13/nrpe-2.13.tar.gz
 wget http://downloads.sourceforge.net/project/nagiosplug/nagiosplug/1.4.15/nagios-plugins-1.4.15.tar.gz

Création d’un compte et groupe nagiossi cela

1
groupadd nagios && usermod nagios -G nagios -g nagios

Compilation et installation de nrpe

1
2
3
4
 tar zxf nrpe-2.13.tar.gz && tar zfx nagios-plugins-1.4.15.tar.gz
 cd /usr/local/src/nrpe-2.13
 ./configure --disable-ssl --enable-command-args
 make all && make install

Le répertoire nagios dans /usr/local sera créé :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ls -alhR /usr/local/nagios
 /usr/local/nagios:
 total 0
 drwxrwxr-x  4 nagios nagios  96 Jan 17 16:12 .
 drwxr-xr-x 11 root   root   264 Jan 17 16:12 ..
 drwxrwxr-x  2 nagios nagios  72 Jan 17 16:12 bin
 drwxrwxr-x  2 nagios nagios  80 Jan 17 16:12 libexec
 
 /usr/local/nagios/bin:
 total 72K
 drwxrwxr-x 2 nagios nagios  72 Jan 17 16:12 .
 drwxrwxr-x 4 nagios nagios  96 Jan 17 16:12 ..
 -rwxrwxr-x 1 nagios nagios 70K Jan 17 16:12 nrpe
 
 /usr/local/nagios/libexec:
 total 36K
 drwxrwxr-x 2 nagios nagios  80 Jan 17 16:12 .
 drwxrwxr-x 4 nagios nagios  96 Jan 17 16:12 ..
 -rwxrwxr-x 1 nagios nagios 35K Jan 17 16:12 check_nrpe

Compilation et installation de nagios-plugins

1
2
3
4
cd ../nagios-plugins-1.4.15/
 ./configure
 make && make install
 ls –R /usr/local/nagios

Vous devriez avoir quelque chose comme sur cette image http://postimage.org/image/jaom4bxtt/ Modifions maintenant le fichier /etc/services et rajoutons la ligne

1
 vi /etc/services
1
2
3
...
nrpe            5666/tcp         NRPE
...

N.B. Si vous supervisez une machine protégée par un pare-feu, pensez à ouvrir le port 5666 en TCP qui est utilisé par NRPE. Sinon vous aurez ce type de message d’erreur :

1
CHECK_NRPE: Socket timeout after 10 seconds.

Copions le fichier de conf nrpe.cfg dans le bon répertoire

1
cp /usr/local/src/nrpe-2.13/sample-config/nrpe.cfg /usr/local/nagios/nrpe.cfg

Modifions le fichier de configuration pour activer la prise d’arguments

1
vi /usr/local/nagios/nrpe.cfg /usr/local/nagios/nrpe.cfg
1
2
3
...
dont_blame_nrpe=1
...
1
2
3
cat /usr/local/nagios/nrpe.cfg | grep dont_blame_nrpe
dont_blame_nrpe=1
command arguments *AND* the dont_blame_nrpe directive in this

Création du fichier /etc/xinetd.d/nrpe pour définir le service Si le répertoire /etc/xinetd.d n’existe pas, c’est que xinetd n’est pas installé, dans certains cas, même si il existe xined peut ne pas être installé. Installation xinetd.

1
yum install xinetd

Créez le fichier /etc/xinetd.d/nrpe et définition du service

1
touch /etc/xinetd.d/nrpe && vi /etc/xinetd.d/nrpe

ajouter le code suivant

1
2
3
4
5
6
7
8
9
10
11
12
13
14
service nrpe
{
   flags           = REUSE
   socket_type     = stream
   port            = 5666
   wait            = no
   user            = nagios
   group           = nagios
   server          = /usr/local/nagios/bin/nrpe
   server_args     = -n -c /usr/local/nagios/nrpe.cfg -i
   log_on_failure += USERID
   disable         = no
   only_from       = 127.0.0.1 192.168.2.53
}

Ou 192.168.3.53 est l’IP de notre serveur “Aquilon14”. Redémarrage de xinetd :

1
/etc/init.d/xinetd restart

On teste que nrpe est bien à l’écoute et ouvert :

1
2
netstat -at | grep nrpe
tcp        0      0 *:nrpe          *:*                 LISTEN

Effectuons un test localement

1
/usr/local/nagios/libexec/check_nrpe -n -H 127.0.0.1

Si nous obtenons ce message d’erreur

1
CHECK_NRPE: Received 0 bytes from daemon.  Check the remote server logs for error messages.

Vérifions les logs /var/log/messages. Si vous obtenez ce message d’erreur :

1
2
3
tail -f /var/log/messages
Mar 16 15:36:27 servprod nrpe[13105]: Unable to open config file '/usr/local/nagios/nrpe.cfg' for reading
Mar 16 15:36:27 servprod nrpe[13105]: Config file

Il est impossible de lire le fichier, il faut vérifier les droits

1
2
ls -alh /usr/local/nagios/nrpe.cfg
-rw------- 1 root root 7.1K Jan 17 16:32 /usr/local/nagios/nrpe.cfg

En effet, Nagios ne peut pas lire le fichier, changeons les droits du fichier.

1
2
chmod 664 /usr/local/nagios/nrpe.cfg
chown nagios.nagios /usr/local/nagios/nrpe.cfg

Effectuons un nouveau test

1
2
/usr/local/nagios/libexec/check_nrpe -n -H 127.0.0.1
NRPE v2.12

Ok !! Effectuons un autre test afin de compter le nombre de processeurs.

1
2
usr/local/nagios/libexec/check_nrpe -n -H 127.0.0.1 -c check_total_procs
PROCS OK: 154 processes

Tout fonctionne parfaitement, paramétrons NRPE afin de pouvoir lire l’espace disque.

1
vi /usr/local/nagios/nrpe.cfg

Il faut décommenter la ligne ci-dessous

1
2
3
...
command[check_disk]=/usr/local/nagios/libexec/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
...

Nouveau test via check_nrpe et check_disk.

1
2
/usr/local/nagios/libexec/check_nrpe -n -H 127.0.0.1 -c check_disk -a 50% 100% /
DISK CRITICAL - free space: / 227593 MB (96% inode=-);| /=9373MB;118483;0;0;236967

Voilà, nrpe fonctionne correctement en local. Il ne reste plus qu’à vérifier que l’on arrive à le joindre depuis notre serveur Nagios.

3) NRPE coté serveur

Ce sont les mêmes commandes que pour le client:

1
2
3
4
5
6
cd /usr/local/src/
wget http://downloads.sourceforge.net/project/nagios/nrpe-2.x/nrpe-2.13/nrpe-2.13.tar.gz
tar zxf nrpe-2.13.tar.gz
cd /usr/local/src/nrpe-2.13
./configure --disable-ssl --enable-command-args
make all && make install

Maintenant, testons des commandes nrpe distantes

1
2
/usr/local/nagios/libexec/check_nrpe -n -H aquilon12 -c check_disk -a 50% 100% /
DISK CRITICAL - free space: / 227596 MB (96% inode=-);| /=9371MB;118483;0;0;236967

Pour intégrer le post client (aquilon12) à Nagios. Il faut définir un objet commande et les services dans aquilon12.cfg. Comme il est plus simple de créer pour chaque machine son propre fichier de configuration nous allons créer un répertoire serveurs_linux où déposer notre fichier aquilon12.cfg.

1
mkdir /usr/local/nagios/etc/serveurs_linux/

Ajoutez le chemin de ce répertoire dans nagios.cfg.

1
vi /usr/local/nagios/etc/nagios.cfg
1
2
3
...
cfg_dir=/usr/local/nagios/etc/serveurs_linux
...

Ouvrez le fichier “commandes.cfg”

1
vi /usr/local/nagios/etc/objects/commands.cfg

Et rajoutez l’objet commande pour nos requêtes nrpe.

1
2
3
4
'check_nrep' command definition
define command{
      command_name    check_nrpe
       command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -n -u -c $ARG1$ -a $ARG2$ $ARG3$ $ARG4$ $ARG5$ $ARG6$ }

Maintenant, créons notre fichier “aquilon12.cfg”.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# definition de la machine

define host{
    use           linux-server ;
    host_name     aquilon12         ;
    alias         Serveur aquilon12 ;
    address       servprod               ;  
    }

#
# SERVICE DEFINITIONS
#

# Verification de la charge cpu

define service{
   use                     generic-service
   host_name               aquilon12
   service_description     Charge CPU
   check_command           check_nrpe!check_load!80!90
   }

# Verification du nombre d'utilisateurs sur le serveur

define service{
   use                     generic-service
   host_name               aquilon12
   service_description     Nombre utilisateurs
   check_command           check_nrpe!check_users!2!10
   }

# Verification de la réponse au ping  
define service{
  use                             generic-service
  host_name                       aquilon12
  service_description             PING
  contact_groups                  group2
  check_command                   ping -c 1
 
  }

Redémarrage de Nagios.

1
/etc/init.d/nagios restart

Répétez les mêmes étapes d’installation de nrpe et le fichier de config du hoste pour les autres postes A la fin de l’installation nous devrions voir l’ensemble des postes clients que supervise la machine aquilon14 comme démontrer dans les screenshots suivants

Nagios
Machines du réseau Nagios

Et voici tous les services

La supervision
Les services suivis par Nagios

J’ai testé également les alertes par e-mail en provocant des dysfonctionnements dans les différentes machines clientes

Mail
Mail envoyé en cas de défaillance d’un serveur