Upload
phamdiep
View
215
Download
1
Embed Size (px)
Citation preview
CER
N-T
HES
IS-2
014-
144
27/0
8/20
14
Institut Supérieur d’Informatique
de Modélisation et de leurs Applications
Organisation Européenne
pour la Recherche Nucléaire
Campus des Cézeaux
BP 125 – 63173 Aubière Cedex, FRANCE
CERN
CH-1211 Genève 23, SUISSE
Rapport d’ingénieur
Stage de 2ème
année
Filière Systèmes d’information et aide à la décision
Mise à jour de l’infrastructure de l’expérience LHCb
Présenté par: Driss El MAJDOUBI
Responsables CERN: Christophe HAEN, Loïc BRARDA
Responsable ISIMA : Emmanuel MESNARD
Date de soutenance : 27-08-2014
Durée du stage : 5 mois
g
i
Remerciements
Je tiens tout d’abord à remercier mes tuteurs au CERN, Christophe HAEN et Loïc BRARDA,
pour leur grande disponibilité, leur soutien technique et la confiance qu’ils m’ont attribuée
tout au long du stage.
Je remercie également tous les membres de l’équipe LHCb Online pour m’avoir accueilli et
pour avoir porté un intérêt à mon travail.
Par la même occasion, je tiens à remercier M. Emmanuel MESNARD mon tuteur de l‘ISIMA
pour son encadrement judicieux.
Un grand merci à toutes les personnes de bonne volonté, ayant contribuées de près ou de loin
à la réalisation de ce projet.
Que les membres de jury trouvent également ici, l’expression de ma haute reconnaissance
pour avoir accepté de juger mon travail.
ii
Table des figures et illustrations
Figure 1: Tunnel LHC [Haen 2013] ................................................................................................. 3
Figure 2: Fonctionnement du LHC [Haen 2013] .............................................................................. 4
Figure 3: Quark B .......................................................................................................................... 5
Figure 4: détecteur LHCb .............................................................................................................. 6
Figure 5: Représentation de la structure du réseau LHCb Online .................................................... 7
Figure 6: Principe de fonctionnement de la supervision ............................................................... 10
Figure 7: Infrastructure de supervision Icinga 1.x [Haen, Bonaccorsi et Neufeld 2011] .................. 12
Figure 8: Extrait de l'arbre logique de configuration Icinga 1.x [Haen, Bonaccorsi et Neufeld 2011] 13
Figure 9: Planning prévisionnel du stage ..................................................................................... 16
Figure 10: Logo Icinga 2 .............................................................................................................. 17
Figure 11: Architecture de Icinga 2 .............................................................................................. 19
Figure 12: La supervision distribuée basée sur la fonctionnalité cluster ........................................ 20
Figure 13: Schéma réseau de l'atelier .......................................................................................... 25
Figure 14: Digramme d'héritage des "Templates" des hôtes ........................................................ 26
Figure 15: Diagramme des "Host Group" fonctionnels ................................................................. 28
Figure 16: Digramme des "Host Group" logique ........................................................................... 29
Figure 17: Digramme des services ............................................................................................... 30
Figure 18: Diagramme des dépendances ..................................................................................... 32
Figure 19: Mécanisme d'exécution des plugins ............................................................................ 33
Figure 20: Page d'authentification Icinga-web ............................................................................. 34
Figure 21: Interface des états des hôtes ...................................................................................... 35
Figure 22: Interface des états des services ................................................................................... 36
Figure 23: Interface des groupes des hôtes .................................................................................. 37
Figure 24: Dépendance du switch_ux .......................................................................................... 38
Figure 25: Logo Puppet ............................................................................................................... 39
Figure 26: Architecture client/serveur de Puppet ........................................................................ 40
Figure 27: Fonctionnement de Puppet ........................................................................................ 42
Figure 28: Extrait du diagramme des "Templates" ....................................................................... 46
Figure 29: Fonctionnement du NRPE ........................................................................................... 48
Figure 30: Fonctionnement des vérifications directes .................................................................. 48
Figure 31: Fonctionnement des vérifications indirectes ............................................................... 49
Figure 32: Extrait des hôtes en état "UP" ..................................................................................... 52
iii
Figure 33: Extrait des hôtes en état "DOWN" .............................................................................. 52
Figure 34: Extrait des différents états des services ....................................................................... 53
Figure 35: Graphe des statistiques .............................................................................................. 54
Figure 36: Extrait des groupes "hostgroup" ................................................................................. 54
Figure 37: Processus de configuration Puppet-Foreman ............................................................... 57
Figure 38: Interface web Foreman ............................................................................................... 58
Figure 39: Extrait des facts sur Foreman ...................................................................................... 59
iv
Résumé
Le présent document constitue le fruit de mon travail dans le cadre du stage de deuxième
année, réalisé au sein de l’Organisation Européenne pour la Recherche Nucléaire (CERN).
L’objectif du stage est d’élaborer et de mettre en place une nouvelle infrastructure de
supervision de l’expérience LHCb en utilisant l’outil Icinga 2 et de l’intégrer autant que
possible à Puppet le nouveau système de gestion de configuration des serveurs.
Durant mon stage, j’avais pour mission dans une première étape de dialoguer avec les
membres de l’équipe LHCb Online afin d’avoir une vue globale du fonctionnement du
système. Ensuite, j’étais amené à bien comprendre les concepts de base d’Icinga 2 ainsi que
ceux du Puppet avant de passer à la mise en place de la solution complète de supervision.
Mots clés : Supervision, Icinga 2, Puppet, LHCb Online, Gestion de configuration.
v
Abstract
This document is the result of my work during the second year internship, realized within the
European Organization for Nuclear Research (CERN).
The goal of this internship is to design and setup a new monitoring infrastructure based on
Icinga 2 tool and integrate it as much as possible to a new configuration management tool,
Puppet.
During this internship, the first step of my mission was to interact with members of the LHCb
Online team to have an overview of the system. Then I had to understand the basic concepts
of Icinga 2 as well as those of Puppet before proceeding to the implementation of the
complete monitoring solution.
Keywords: monitoring, configuration management, Icinga2, Puppet, LHCb Online.
vi
Tables des matières
Remerciements ............................................................................................................................. i
Table des figures et illustrations ................................................................................................... ii
Résumé ........................................................................................................................................iv
Abstract ....................................................................................................................................... v
Tables des matières ......................................................................................................................vi
Lexique / Liste des abréviations .................................................................................................. viii
Introduction ................................................................................................................................. 1
1. Présentation du cadre du stage ............................................................................................. 2
1.1 Présentation générale ................................................................................................................................... 2
1.1.1 CERN (Organisation Européenne pour la Recherche Nucléaire)................................................. 2
1.1.2 LHC (Large Hadron Collider) .......................................................................................................... 2
1.1.3 Présentation de l’expérience LHCb ................................................................................................ 4
1.1.4 Système LHCb Online ...................................................................................................................... 6
1.1.5 L’équipe LHCb Online ...................................................................................................................... 9
1.2 Analyse de l’existant ..................................................................................................................................... 9
1.2.1 La supervision .................................................................................................................................. 9
1.2.2 Etude du système de supervision actuel ..................................................................................... 10
1.2.3 Solution proposée .................................................................................................................... 14
1.3 Cahier des charges ...................................................................................................................................... 15
1.4 Planification prévisionnelle ...................................................................................................................... 16
2. Etude et tests des outils choisis ............................................................................................... 17
2.1 Icinga 2: solution de supervision des réseaux .......................................................................................... 17
2.1.1 Icinga2: définition ............................................................................................................................ 17
2.1.2 Icinga 2: spécificités techniques [Icinga2 2014]. ........................................................................... 18
2.2 Les étapes d’installation de Icinga 2 et ses interfaces web...................................................................... 21
vii
2.2.1 Installation de Icinga 2 ..................................................................................................................... 21
2.2.2 Installation du module DB IDO (Database Icinga Data Output) ................................................... 21
2.2.3 Installation des interfaces graphiques ........................................................................................... 22
2.2.4 Les fichiers de configuration de base ............................................................................................. 22
2.3 Atelier de tests ............................................................................................................................................ 23
2.3.1 Schéma réseau de l’atelier ............................................................................................................... 23
2.3.2 Conception de la configuration de l’atelier de test ........................................................................ 25
2.3.3 Implémentation de la configuration et résultats des tests ........................................................... 33
2.4 Puppet : solution de gestion des configurations ...................................................................................... 38
2.4.1 Puppet : définition ............................................................................................................................ 38
2.4.2 Fonctionnement et caractéristiques de Puppet ............................................................................. 39
2.4.3 Exemple d’utilisation : Installation de Icinga 2 par Puppet .......................................................... 42
3. Mise en œuvre de la solution complète de supervision sur le système LHCb Online .................. 45
3.1 Présentation du système à superviser ...................................................................................................... 45
3.2 Conception de la configuration du système de supervision .................................................................... 45
3.3 Implémentation de la configuration .......................................................................................................... 47
3.3.1 Agent NRPE (Nagios Remote Plugin Executor) ............................................................................. 47
3.3.2 NAN (Nagios Notifications Daemon) .............................................................................................. 50
3.3.3 Résultats de supervision du système LHCb Online ....................................................................... 51
3.3.4 Discussion des résultats .................................................................................................................. 55
3.4 Automatisation de la configuration par Puppet ....................................................................................... 56
3.4.1 Analyse du problème ....................................................................................................................... 56
3.4.2 Solution proposée ............................................................................................................................ 56
Conclusion ................................................................................................................................. 62
Références bibliographiques ......................................................................................................... ix
Webographie ............................................................................................................................... ix
Annexe A .................................................................................................................................... xii
Annexe B ................................................................................................................................... xiii
viii
Lexique / Liste des abréviations
Abréviation Désignation
ALICE A Large Ion Collider Experiment
ATLAS A Toroidal LHC ApparatuS
CERN Organisation Européenne pour la Recherche
Nucléaire
CMS Compact Muon Solenoid
DAQ Data AcQuisition
DB IDO Database Icinga Data Output
DIM Distributed Information Management System
DNS Domain Name Server
HLT High Level Trigger
GPL General Public License
LHC Large Hadron Collider
LHCb Large Hadron Collider beauty
NAN Nagios Notifications Daemon
NRPE Nagios Remote Plugin Executor
RHEL Red Hat Entreprise Linux
SCADA Supervisory Control and Data Acquisition
SLC 6 Scientific Linux CERN 6
SQL Structred Query Language
SSH Secure Shell
XML eXtensible Markup Language
1
Introduction
Dans le cadre du stage de ma deuxième année d’études à l’ISIMA, j’ai effectué un stage de 5
mois au sein de l’Organisation Européenne pour la Recherche Nucléaire CERN. Ma mission
durant la période du stage était de mettre en place un système de supervision et de
surveillance de l’infrastructure informatique de l’expérience LHCb.
En effet, l’infrastructure de l’expérience LHCb est constituée de plus de 2000 serveurs et 200
équipements réseaux, gérés par une équipe relativement restreinte d’experts. Mettre en place
un système de supervision capable de réagir dans les minutes qui suivent à un incident sur
l’infrastructure est un réel défi, mais est nécessaire. LHCb utilisait une installation
particulièrement complexe de Icinga 1.8 pour la supervision du fonctionnement et la gestion
des alarmes.
Ainsi, ce stage s’inscrivait dans le cadre de la phase d’amélioration de l’expérience LHCb en
particulier celle de l’infrastructure informatique. Cette évolution concernait le système de
gestion de configuration des serveurs en utilisant Puppet, ainsi que l’infrastructure de
supervision basée sur Icinga 2. Le but du stage était donc d’élaborer et de mettre en place une
nouvelle infrastructure Icinga 2 et de l’intégrer autant que possible à Puppet.
Ce rapport se propose de découvrir les spécifications de ce stage à travers une
présentation générale du contexte du stage, une analyse détaillée du problème ainsi
qu’une présentation des différentes phases permettant la réalisation du travail demandé.
2
1. Présentation du cadre du stage
Ce chapitre se focalise sur la présentation de l’organisme d’accueil et l’étude détaillée de
l’existant où on cernera la problématique de mon sujet et on présentera la solution
adoptée pour ce dernier.
1.1 Présentation générale
1.1.1 CERN (Organisation Européenne pour la Recherche Nucléaire)
En 1952, un ensemble de 11 gouvernements européens décident de créer un Conseil Européen
pour la Recherche Nucléaire (CERN) dans le petit village de Meyrin dans le canton de
Genève, près de la frontière franco-suisse.
Le 29 septembre 1954, la convention du CERN est ratifiée par 12 États européens, le CERN
est officiellement créé et se nomme maintenant Organisation Européenne pour la Recherche
Nucléaire.
Aujourd’hui, le CERN emploie environ 2500 personnes. Le personnel scientifique et
technique du laboratoire conçoit et construit les accélérateurs de particules et assure leur bon
fonctionnement. Il contribue également à la préparation et à la mise en œuvre des expériences
scientifiques complexes, ainsi qu’à l’analyse et à l’interprétation des résultats.
Environ 8000 scientifiques visiteurs, soit la moitié des physiciens des particules du monde,
viennent au CERN pour faire des recherches. 580 universités et 85 nationalités sont
représentées [CERN_homepage 2014].
1.1.2 LHC (Large Hadron Collider)
Le Grand Collisionneur de Hadrons au CERN (Figure 1) est un gigantesque instrument
scientifique situé près de Genève, sur la frontière franco-suisse, à environ 100 mètres sous
terre. C’est un accélérateur de particules d’environ 27 kilomètres de circonférence, avec
lequel les physiciens étudient les plus petites particules connues : les composants
fondamentaux de la matière [LHC 2007].
3
Figure 1: Tunnel LHC [Haen 2013]
Deux faisceaux de particules (Figure 2) subatomiques de la famille des « hadrons » (des
protons ou des ions de plomb) circulent en sens inverse à l’intérieur de l’accélérateur
circulaire, emmagasinant de l’énergie à chaque tour. En faisant entrer en collision frontale les
deux faisceaux à une vitesse proche de celle de la lumière et à de très hautes énergies dans le
cœur des principales expériences connues par leurs acronymes : ALICE, ATLAS, CMS et
LHCb, le LHC recrée les conditions qui existaient juste après le Big Bang. Des équipes de
physiciens du monde entier analyseront les particules issues de ces collisions en utilisant des
détecteurs spéciaux. Les détecteurs peuvent observer jusqu’à 600 millions de collisions par
seconde, avec les expériences qui trient les données pour analyser des événements
extrêmement rares comme la création de l’amplement recherché boson de Higgs [Haen
2013].
4
Figure 2: Fonctionnement du LHC [Haen 2013]
1.1.3 Présentation de l’expérience LHCb
L’expérience LHCb cherche à comprendre pourquoi nous vivons dans un univers qui semble
être constitué entièrement de matière, sans aucune présence d’antimatière.
L’acronyme LHCb signifie Large Hadron Collider beauty. Ce dernier mot « beauty » vient du
nom de la particule que ce détecteur se propose d’étudier, le méson B.
L’univers est en apparence formé uniquement de matière, de particules. Les physiciens
pensent que lors du Bing Bang, la matière et l’antimatière ont été créées dans des proportions
égales mais ils ne savent pas expliquer ce que serait devenue l’antimatière.
La collision entre deux protons permet de produire de nombreuses particules. Les
scientifiques du LHCb prévoient de détecter des mésons B et d’observer leur désintégration.
En effet un méson est composé d’un nombre égal de quark et d’antiquark (les quarks étant les
particules élémentaires qui composent la matière). Ainsi, en comprenant comment, lors de la
décomposition d’un méson, la matière l’emporte sur l’antimatière, ils pourront expliquer par
extension pourquoi l’univers n’est composé que de matière [LHCb 2007].
5
Figure 3: Quark B
LHCb utilise une série de sous-détecteurs alignés le long du faisceau afin de traquer
principalement les particules à petits angles. Le premier sous-détecteur est installé près du
point de collision ; les autres se suivent sur une longueur de 20 m.
Une grande variété de types de quarks sera créée par le LHC avant de se désintégrer
rapidement pour former d’autres particules. Pour intercepter les quarks b, la collaboration
LHCb a mis au point des trajectographes mobiles, installés au plus près de la trajectoire des
faisceaux.
Tous ces détecteurs envoient les données sur un réseau Ethernet chargé de les prétraiter
(filtrer les événements) et de les stocker pour ensuite permettre aux physiciens de les
analyser, c’est le système LHCb Online.
6
Figure 4: détecteur LHCb
Le détecteur LHCb (Figure 4) a les caractéristiques suivantes :
Dimensions : 21 mètres de long, 13 mètres de large et 10 mètres de haut.
Poids : 5600 tonnes.
Configuration : spectromètre à petits angles avec détecteurs planaires.
1.1.4 Système LHCb Online
Le système LHCb Online se charge des aspects informatiques, de contrôle et de
synchronisation de l’expérience. Il fournit également l’infrastructure nécessaire au traitement
des données reçues du détecteur. Ainsi, Le réseau LHCb se devise en deux réseaux de
fonctionnement différent. Le premier est appelé Le réseau de donnée (DAQ) qui a pour but
de transporter les données acquises par les détecteurs au disque de stockage. Le second est
un système de contrôle qui a pour rôle le contrôle de tous les équipements dans le réseau
(Figure 5).
L’expérience LHCb est actuellement équipée de plus d’une centaine d’équipements réseau
(Figure 5) répartis dans les différents secteurs, que ce soit aussi bien dans la partie SX (au-
7
dessus du sol) qu’UX (en dessous du sol). Ces équipements produisent un travail constant
tous les jours et leur fonctionnement en continue est primordial.
Figure 5: Représentation de la structure du réseau LHCb Online
Le système d’acquisition (DAQ)
Le système DAQ (Data AcQuisition) s’étend de l’électronique qui interface les sous-
détecteurs de l’expérience LHCb jusqu’au système de stockage des données potentiellement
intéressantes [LHCb Collaboration 2001]. Tout au long de ce système, les données sont
sélectionnées par différents mécanismes pour ne conserver que ce qui est potentiellement
pertinent et intéressant pour l’expérience. On différencie ainsi LHCb Online, qui regroupe
donc le traitement effectué au cours de l’acquisition, de LHCb Offline, qui regroupe donc le
traitement effectué sur les données stockées.
Le LHC produit des collisions, ou événements, à une fréquence de 40 Mhz. Seulement les
collisions intéressantes ne seront que de l’ordre de 10 MHz, mais seulement 1% de ces
8
collisions produiront des paires de quark et d’antiquark Beauty. Au final, la fréquence
intéressante sera de 15 Hz. Dans ce sens, le LHCb a mis au point conjointement au système
DAQ, un système de sélection des données, le Trigger System. Ce système de sélection est
aussi bien basé sur de l’électronique que sur du logiciel. Ses différents niveaux de sélection
permettent de déterminer quels sont les événements à conserver. La première sélection
s’effectue au niveau de L0 trigger. Après L0, les données sont envoyées vers les cartes
TELL1. [LHCb Collaboration 2001].
Ces cartes mettent les données en mémoire tampon, puis elles les transfèrent via un réseau IP
assez complexe vers les ordinateurs (nœuds) qui appliqueront ensuite des algorithmes de
sélections pour encore réduire la fréquence d’événements intéressants et donc réduire la taille
des données à mémoriser. Cette ferme de calcul correspond au HLT (High Level Trigger)
[LHCb Collaboration 2001]..
N.B : il existe 6 fermes de calcul chaque ferme contient un nombre précis de sous-
fermes, chaque sous-ferme comporte un nombre important de nœuds (ordinateurs sans
disque). Le nœud hlta0101 veut dire le nœud numéro 1 de la sous ferme a01 de la ferme
a de la grande ferme hlt.
Le système de contrôle: ECS (Experiment System Control)
Avec plus de 500 000 composants, le détecteur LHCb est un système d’une grande
complexité. La configuration de tous ses composants devient rapidement une opération
fastidieuse, d’autre part il n’est pas toujours possible de se déplacer sur le lieu où se trouve le
matériel, celui-ci pouvant de plus se trouver dans une zone soumise aux radiations.
L’objectif principal du système de contrôle est la configuration et la supervision de
l’infrastructure du détecteur. Ce système de contrôle est basé sur un système SCADA
(Supervisory Control and Data Acquisition) appelé WinCC Open Architecture. Ce logiciel
qui a été développé par la société allemande « Siemens » permet de récupérer des données à
partir du matériel afin de surveiller et contrôler son fonctionnement ainsi que de le configurer
à distance. Tous les modules contrôlables doivent donc être représentés dans WinCC
[LHCb Collaboration 2001].
Le système WinCC est dépendant de plusieurs autres systèmes tels que le storage, le réseau,
DNS (Domain Name Server), par conséquent, il est nécessaire de superviser l’infrastructure
9
réseau de l’expérience à bas niveau d’où l’intérêt de mettre en place un système de
supervision.
1.1.5 L’équipe LHCb Online
Mon stage se situait au sein de l’équipe LHCb Online, qui est l’une des composantes de
l’expérience LHCb. Composée d’ingénieurs, d’administrateurs systèmes et de physiciens, sa
mission principale est l’administration de l’infrastructure matérielle et logicielle du système
LHCb Online décrit dans la section 1.1.4.
Administrativement, cette équipe est rattachée au département PH: département de la
physique qui est l’un de nombreux départements du CERN (Voir Annexe A).
1.2 Analyse de l’existant
1.2.1 La supervision
La supervision est l’ensemble d’outils logiciels et/ou matériels permettant de mesurer à un
instant donné l’état d’un système (Figure 6). Ainsi, la supervision s’impose dans la plupart
des entreprises possédant un parc informatique conséquent.
La supervision est la surveillance du bon fonctionnement des éléments suivants :
Serveurs : CPU, mémoire, processus, fichiers de journalisation, place disque,
services.
Matériels : Disques, cartes Raid, cartes réseau, température, alimentation, onduleurs,
batteries.
Réseaux : Bande passante, protocoles, éléments actifs, commutateurs, routeurs, pare-
feux, accès externes, bornes wifi, etc.
Vue globale du système.
Détection des pannes.
Indicateurs sur la performance de l’architecture du système
Niveau de supervision (actif ou passif).
Remontées d’alertes (disponibilité des services).
Actions de correction.
10
Il existe deux grandes familles de solutions de supervision :
Les logiciels propriétaires : HP Open View, Tivoli d’IBM, Ciscoworks, etc.
Les logiciels libres : Nagios, Icinga, Zabbix, MRTG, Centreon, etc.
Figure 6: Principe de fonctionnement de la supervision
1.2.2 Etude du système de supervision actuel
Dans l’optique de superviser le grand réseau LHCb Online, une infrastructure distribuée
basée sur un outil appelé Icinga 1.x était mise en place [Haen, Bonaccorsi et Neufeld 2011].
Nagios, Icinga et autres outils de supervision permettent à la fois de superviser des « hosts »
(serveurs, switchs, etc) ainsi que des « services » (logiciels, ressources, etc) en utilisant des
petits programmes exécutables appelés « plugins ». Un plugin est chargé de réaliser les
vérifications et de fournir par la suite au moteur un code de retour par exemple :
0 = tout va bien (OK)
1 = avertissement (WARNING)
11
2 = alerte (CRITICAL)
3 = inconnu (UNKNOWN)
Il peut également retourner des courts messages descriptifs ainsi que des informations de
performances.
le nombre de vérifications pouvant éventuellement être exécuté est de l’ordre de dizaine de
milliers de vérifications dans un intervalle de temps de quelques minutes. Par conséquent, une
infrastructure très large telle que celle du LHCb ne peut pas être supervisée par une seule
instance du logiciel de supervision sans pour autant provoquer des délais de latence. La
latence désigne en fait la différence entre le temps d’exécution prévus et le temps d’exécution
réel de la vérification. Ainsi, l’exécution de telles vérifications nécessite sans nul doute d’être
distribuée ou encore parallélisée.
Dans ce sens, la solution appliquée pour la supervision du système LHCb consistait à la mise
en place d’une seule instance centrale Icinga 1.x qui délègue l’exécution des vérifications à
d’autres serveurs appelés « workers » [Haen, Bonaccorsi et Neufeld 2011]. En effet, un
module appelé « mod-german » intercepte les vérifications déclenchées par l’instance Icinga
et les place dans des files d’attente, permettant ainsi aux serveurs distants « workers » de les
exécuter et de retourner les résultats de ces vérifications (Figure 7).
La solution qui vient d’être décrite est adoptée depuis plus de deux ans dans l’environnement
LHCb Online. Cette architecture a donné des résultats généralement positifs plus
particulièrement en terme de performance. En effet, grâce au module « mod-gearman »
l’instance Icinga peut exécuter approximativement 40 000 vérifications dans un intervalle de
cinq minutes sans délais de latence [Haen, Bonaccorsi et Neufeld 2011]..
12
Figure 7: Infrastructure de supervision Icinga 1.x [Haen, Bonaccorsi et Neufeld 2011]
Par ailleurs, réécrire la même configuration Icinga pour les différentes machines (hosts) de
l’expérience serait sans nul doute couteux sur plusieurs plans (temps, performance…).
Afin d’éviter ce problème Icinga offre deux concepts :
Héritage : une machine (host) peut hériter la configuration d’une autre machines
exactement de la même façon que le principe de la programmation orientée objet.
L’héritage s’occupe seulement des paramètres de supervision et non pas par exemple
des services appliqués à la machine parent (parent host).
HostGroup : qui désigne un ensemble de machines (hosts). Une machine peut être
membre de plusieurs groupes et un groupe peut être membre d’un autre groupe.
Ainsi, la définition exacte des rôles de chaque machine a permis l’élaboration d’un arbre
logique implémenté par la suite sous deux formes : (Figure 8)
Arbre des « HostGroups » : la vérification d’un service est toujours appliquée à un
« HostGroup » et jamais à un « host » unique.
13
Arbre des « Hosts » : Chaque nœud de l’arbre hérite du nœud parent et chaque niveau
apporte de nouveaux paramètres de supervision jusqu’à les feuilles qui représentent les
machines proprement dit.
Figure 8: Extrait de l'arbre logique de configuration Icinga 1.x [Haen, Bonaccorsi et Neufeld 2011]
Limites de la solution actuelle :
L’arrêt de longue durée du LHC depuis février 2013 était une occasion propice pour mettre en
évidence les limites de la solution de supervision basée sur Icinga 1.x dont voilà les
principales :
- Un problème sur le serveur central icinga signifie une indisponibilité totale de
l’infrastructure de supervision.
- L’utilisation de la notion de dépendance entre hôtes et services est l’une des
fonctionnalités les plus importantes dans le concept de supervision. En effet, si plusieurs
problèmes surviennent à cause d’un problème racine dont ils dépendent, la notification
qui sera envoyée est seulement celle du problème racine. Toutefois, plusieurs experts ont
démontré l’inefficacité d’une telle fonctionnalité avec Icinga 1.x.
14
- En cas de défaillance ou d’indisponibilité d’une grande portion de l’environnement,
Icinga 1.x nécessite une durée importante pour pouvoir détecter ce genre de pannes, par
conséquent les délais de latence sont énormes.
- Icinga 1.x offre une configuration très statique : une vérification configurée dans Icinga
1.x ne peut pas récupérer des valeurs en temps d’exécution (les derniers résultats ou
encore les sorties d’autres vérifications). De même, la configuration ne peut pas être
modifiée en temps d’exécution, ainsi un redémarrage de l’installation est nécessaire.
- Le redémarrage de l’installation entraîne une analyse complète de la configuration après
modification ce qui pourrait être très longue : 60 000 services sont analysés dans environ
25 secondes, tandis qu’environ 8 minutes est nécessaire pour analyser 200 000 services.
1.2.3 Solution proposée
Afin de remédier aux différents problèmes cités précédemment un benchmark très détaillé des
différentes alternatives a fait l’objet d’un article publié en 2013 par l’équipe LHCb Online à
l’occasion d’une conférence à San Francisco, USA :
[Haen, Bonaccorsi et Neufeld 2013].
L’article en question a mis en évidence la possibilité d’adopter deux solutions potentielles à
savoir : Icinga2 et Shinken.
Finalement, le choix était sur Icinga2 un outil récemment en version stable, simple à installer,
logique à configurer et surtout facile à étendre.
Icinga2 se distingue notamment par ses performances : une même instance a déjà réussi à
effectuer 1 million de vérifications actives par minutes afin de surveiller 60000 hôtes, indique
le site icinga.org [Icinga2 2014].
Signalons aussi la simplification de l’installation: les fonctionnalités habituellement
nécessaires sont fournies de base avec Icinga2, l’utilisateur n’ayant qu’à les activer grâce à
des commandes.
15
En outre, il est maintenant facile d’étendre la solution grâce à la présence de plusieurs back-
offices et à la prise en charge native des livestatus et de graphite pour la représentation
graphique des performances en temps réel.
Le sujet proposé dans ce stage, est donc, de concevoir et d’installer un système complet de
supervision basée sur Icinga2 et de l’intégrer autant que possible à Puppet l’outil utilisé pour
la configuration des serveurs du système LHCb Online.
Pour bien cerner l’ensemble du travail demandé, il convient de définir les besoins et les
contraintes dans un cahier des charges.
1.3 Cahier des charges
La mission du stage consiste à concevoir et installer un nouveau système de supervision de
l’infrastructure de l’expérience LHCb. Le travail final sera déployé sur l’un des serveurs du
réseau.
La solution recommandée est l’outil open-source Icinga2. Une documentation approfondie de
cette solution, ainsi qu’une série de tests, seront nécessaires avant le déploiement du travail.
Le travail réalisé doit à la fin assurer les fonctionnalités suivantes :
Superviser les différents équipements du réseau LHCb Online.
Superviser les différents services réseaux.
Superviser les ressources systèmes (CPU, charge mémoire)
Gérer d’une façon optimale les alertes et les notifications.
Automatiser l’installation de Icinga2 en utilisant Puppet.
Pouvoir installer plusieurs instances de l’interface graphique dans des serveurs
différents de celui qui comporte Icinga2 core.
Automatiser l’ajout des éléments du réseau au système de supervision en utilisant
Puppet (l’ajout de nouveaux nœuds, des fermes….).
16
1.4 Planification prévisionnelle
L’analyse du cahier des charges a aidé à prévoir le déroulement du projet dans le temps en
adoptant le planning cité dans la figure ci-dessous :
Figure 9: Planning prévisionnel du stage
Compréhension générale du sujet et planification : c’est la toute première étape. Elle
consiste à bien comprendre le travail demandé. Elle permet également de définir le bon
chemin à suivre pour réaliser les différentes tâches du projet.
Documentation et compréhension des outils : il s’agit de faire des recherches approfondies
sur le sujet. Une documentation initiale, pour découvrir et appréhender les différents points
clés du sujet, et une autre en parallèle, pour résoudre d’éventuels problèmes qui peuvent
survenir au cours de la réalisation.
Réalisation : cette partie se divisera en deux sous parties. La première concernera la mise en
place d’un atelier de tests basé sur la virtualisation, tandis qu’une deuxième présentera le
déploiement de la solution complète sur le système de production.
N.B : voir le planning réel en Annexes : Annexe B.
17
2. Etude et tests des outils choisis
Ce chapitre décrit la première partie de la réalisation du projet. Il s’agit d’une
réalisation à base de la virtualisation et d’un atelier personnalisé pour les tests. Ainsi, ce
chapitre présente l’installation et la configuration de l’outil de supervision Icinga 2, la
mise en place de l’atelier proprement dit, ainsi que la mise en œuvre de Puppet dans un
exemple d’utilisation.
2.1 Icinga 2: solution de supervision des réseaux
2.1.1 Icinga2: définition
Icinga 2 est un logiciel de supervision libre et sous license GPL (General Public License
Version 2). Destiné à informer les informaticiens des problèmes éventuels du réseau, générer
des indicateurs de la performance ainsi que superviser des environnements larges et
complexes.
Cette version de la solution de surveillance des réseaux développée en parallèle de la branche
1.x d’Icinga, a pour objectif de combiner ce qui a fait le succès de la branche 1.x tout en
corrigeant les défauts issus de Nagios, dont Icinga est un fork [Icinga2_doc 2014].
Figure 10: Logo Icinga 2
18
2.1.2 Icinga 2: spécificités techniques [Icinga2 2014].
Cette nouvelle mouture actuellement en version stable a les caractéristiques suivantes :
Construit à partir de zero, Icinga 2 est basé sur le langage C++ et utilise des
bibliothèques Boost.
Multi-plate-forme, Icinga 2 fonctionne sous les plates-formes *NIX (les systèmes
d’exploitation implémentant le standard POSIX), actuelles et anciennes, ainsi que
Windows.
Contrairement à ses prédécesseurs Icinga 2 a une architecture modulaire et flexible
(Figure 11). En effet, Icinga 2 est livré avec toutes les fonctionnalités modernes de
supervision (IDO, Livestatus, data writers,…), il suffit d’exécuter la commande
« icinga-enable-feature » ou « icinga-disable-feature » afin d’activer les
fonctionnalités voulues. Par exemple, une fois le module Perfdata est activé, Icinga 2
simplifie davantage l’intégration de l’outil PNP4NAGIOS permettant d’extraire les
données de performance remontées.
Icinga 2 est compatible avec Icinga 1.x et avec Nagios à travers une couche de
compatibilité. Cette nouvelle version intègre en effet des couches de compatibilité
permettant d’utiliser la solution tant avec des interfaces utilisateurs classiques qu’avec
des interfaces web (Figure 11).
19
Figure 11: Architecture de Icinga 2
.
Afin de gérer la répartition de charge des tâches de supervision telles que les
vérifications, notifications, ainsi que les mises à jour de la base de données, Icinga 2
utilise la fonctionnalité « cluster » permettant d’une part une supervision distribuée et
d’autre part une meilleure disponibilité. En effet, les instances du cluster désignent un
« maître » chargé d’écrire dans la base de données DB IDO (Database Icinga Data
Output) et de gérer la supervision de tous les nœuds. Si le master tombe en panne, une
autre instance est automatiquement élue pour ce rôle. De plus, chaque instance a un
identifiant unique permettant d’éviter les éventuels conflits afférents à la base de
données (Figure 12). Par ailleurs, en cas de basculement automatique « failover » les
instances du cluster sont conçues de façon à reproduire en temps réel la configuration
ainsi que les états des programmes assurant ainsi une intégrité complète des données.
En outre, toutes les communications réseau entres ces instances sont assurées par des
certificats SSL x509 (Figure 12).
20
Figure 12: La supervision distribuée basée sur la fonctionnalité cluster
Icinga 2 est conçu pour être rapide. Grace à sa conception multithread, il peut
exécuter des milliers de vérifications en une seconde sans aucun problème au niveau
du processeur. Contrairement à Icinga 1.x, le processus responsable de recharger une
nouvelle configuration tourne d’une façon asynchrone. Dans ce sens, si le processus
fils est entrain de valider la configuration le processus parent continue les vérifications
et les autres tâches de supervision, deux cas de figures se présentent :
Si la configuration est valide : le processus fils envoie le signal « STOP »
au processus parent, ce dernier avant d’être terminé enregistre son état
courant dans un fichier appelé icinga 2.state. Ensuite, le processus fils lit le
fichier de l’état et synchronise tout l’historique des données avant de
devenir le nouveau leader de la session.
Si la configuration n’est pas valide : le processus fils se termine, le
processus parent continue avec l’ancien état de configuration (ce qui est
essentiel pour assurer la synchronisation en cas du mode cluster).
21
La configuration de Icinga est simplifiée dans cette version 2 grâce à l’utilisation d’un
nouveau format basé objet et fondé sur les templates (plus de détails sur la
configuration et les notions de dépendance, notifications seront vus ultérieurement).
2.2 Les étapes d’installation de Icinga 2 et ses interfaces web
2.2.1 Installation de Icinga 2
La première étape du processus est celle de l’installation d’Icinga 2 proprement dit. La
meilleure façon de faire ceci consiste à utiliser un dépôt officiel (RPM ou Debian) selon le
type du système d’exploitation (distribution) utilisé. Dans notre cas, le système utilisé est
SLC 6 (Scientific Linux CERN 6) qui n’est d’autre qu’une distribution Linux Open Source,
codéveloppée par Fermi National Accelerator Laboratory et par le CERN et basée sur Red
Hat Entreprise Linux (RHEL). La majorité des fonctionnalités de Icinga 2 sont disponibles
dans les paquets du dépôt : [Icinga2_epel 2014].
L’installation par défaut permet d’activer trois fonctionnalités nécessaires pour une
installation de base de Icinga 2 :
La fonctionnalité « checker » : pour exécuter les vérifications.
La fonctionnalité « notification » : pour l’envoi des notifications.
La fonctionnalité « mainlog » : pour écrire dans le fichier icinga2.log.
2.2.2 Installation du module DB IDO (Database Icinga Data Output)
Le module DB IDO de Icinga 2 a pour rôle d’exporter la configuration à la base de données.
La base de données IDO est utilisé par plusieurs projets tels que Icinga Web 1.x et Icinga
Web 2.
Dans notre cas la base de données utilisée est de type MySQL, une installation du paquet
icinga2-ido-mysql est donc nécessaire avant de créer la base de données proprement dit.
Après la création de la base de données vient l’étape d’activation du module IDO Mysql en
utilisant : icinga-enable-feature ido-mysql.
22
2.2.3 Installation des interfaces graphiques
Icinga 2 est compatible avec les interfaces graphiques d’Icinga 1.x en utilisant quelques
fonctionnalités supplémentaires. Ces interfaces sont Icinga Classic UI et Icinga Web. En
outre, une interface graphique propre à la version 2 de Icinga est en cours de développement.
Pour faire les tests le choix était sur l’interface graphique Icinga Web, son installation passe
par les étapes suivantes :
L’installation du paquet icinga-web ou icinga-web-mysql
La création d’une base de données icinga-web.
L’activation du module ido-mysql.
L’édition du fichier databases.xml pour déclarer la base de données icinga-web.
L’édition du fichier access.xml afin de permettre à Icinga Web d’envoyer des
commandes.
Vérification de l’interface web en utilisant l’URL suivant : [Icinga-web-URL 2014].
2.2.4 Les fichiers de configuration de base
Une fois l’installation est effectuée, plusieurs fichiers de configuration sont créés :
icinga2.conf :
Il s’agit du fichier principal de configuration d’Icinga 2. Il contient notamment la liste
des autres fichiers de configuration utilisés, ainsi que l’ensemble des directives
globales de fonctionnement de Icinga 2, comme la directive « include » ou encore
« include_recursive » permettant d’inclure les fichiers de configuration.
(ex : include_recursive "conf.d").
constants.conf :
Il s’agit d’un fichier de déclaration utilisé par les autres fichiers de configuration de
Icinga 2. Il permet de définir des constantes globales pour une utilisation simplifiée
dans les autres fichiers de configuration.
(ex : const PluginDir = " /usr/lib/nagios/plugins ").
zones.conf :
Ce fichier est utilisé pour configurer les objets « Endpoint » et « Zone » nécessaires
dans le cas de l’utilisation de plusieurs instances Icinga 2.
23
conf.d :
Même si en théorie, il est possible de définir tous les objets de configuration dans le
fichier principale icinga2.conf, il est vivement recommandé de créer des répertoires et
fichiers séparés dans le dossier conf.d. Tous ces fichiers doivent obligatoirement avoir
l’extension « .conf ».
2.3 Atelier de tests
2.3.1 Schéma réseau de l’atelier
Pour tester les différentes fonctionnalités qu’offre Icinga 2 en terme de supervision, j’ai pensé
à mettre en place un petit atelier qui regroupe presque les différents équipements réseau du
système LHCb Online (Figure 13). En effet, le système LHCb Online est composé de
plusieurs fermes de calculs ainsi qu’un ensemble de composants réseau permettant de relier
ces fermes. Dans ce sens, le schéma réseau de l’atelier présente les éléments suivants :
Un système de données physiques : à travers lequel transitent les données de
collisions, il est composé d’un ensemble d’équipements (nœuds de calcul, Switch,
Stores…).
Un système de contrôle : à travers lequel transitent les données autres que les
données de collisions notamment :
Les données des systèmes d’exploitation qui proviennent des serveurs
« NFS ».
Les données des utilisateurs (fichiers, homedir, groupdir…) qui proviennent du
« storage ».
Les données de contrôle proprement dit qui proviennent des contrôleurs.
Les données provenant de l’instance Icinga 2.
Une ferme de calcul X composé de :
Nœuds X : sont des serveurs de calcul permettant de trier les événements qui
proviennent du détecteur.
Switch-dt-X : il s’agit d’un switch permettant de faire acheminer les données
de collisions.
Switch-ctrl-X : il s’agit d’un switch permettant de faire acheminer les données
de contrôle.
24
NFS-X : est un serveur NFS (Network File System) permettant aux nœuds de
calcul d’accéder à des données du système d’exploitation.
Contrôleur X : est un serveur hébergé soit sur une machine virtuelle fournit par
l’hyperviseur soit sur une machine réelle. Ce serveur a pour rôle de données
des directives et des ordres de configuration aux nœuds.
Storage : est un grand serveur NFS permettant à tous les composants du réseau
d’accéder aux fichiers des utilisateurs, il se compose de deux parties :
Une petite partie pour stocker les fichiers des utilisateurs.
Une grande partie pour stocker temporairement les données physiques de
l’expérience avant de les envoyées au système LHCb Offline.
Store XYZ : est un serveur permettant également de stocker des données physiques de
l’expérience.
Switch-UX : est un grand commutateur permettant de relier les différents équipements
réseau du système.
Hyperviseur : est un logiciel installé directement sur la couche matérielle du serveur,
permettant la gestion des systèmes d’exploitation invités.
25
Figure 13: Schéma réseau de l'atelier
2.3.2 Conception de la configuration de l’atelier de test
Icinga 2 est utilisé pour superviser la disponibilité des hôtes et des services d’un réseau donné.
Pour mener à bien cette supervision une configuration optimale s’impose. Dans ce sens,
Icinga 2 offre plusieurs mécanismes et bonnes pratiques.
L’héritage des objets en utilisant les « Templates » :
Les « Templates » sont utilisés pour appliquer un ensemble d’attributs identiques à
plusieurs objets. Les objets et les « Templates » peuvent hériter plusieurs attributs
d’autres objets ou « Templates ». Si nécessaire, les attributs hérités peuvent être
surchargés par les objets fils.
26
Dans le cas de l’atelier de test, la définition des « Templates » est faite selon une
approche plate par fonctionnalité afin de regrouper les objets ayant les mêmes
propriétés (Figure 14).
Cette approche de conception a les avantages suivants :
Construire des groupes fonctionnels (groupe des contrôleurs, groupe des
nœuds…) ce qui facilitera par la suite la définition des « Groups » de Icinga 2.
Faciliter la définition des objets des hôtes en faisant un simple héritage avec la
directive « import », avec la possibilité de faire un héritage multiple.
Faciliter l’ajout d’autres « Templates ».
Faciliter la définition des services et des dépendances en utilisant la notion
d’application des règles « apply objects based on rules », en se basant sur la
directive conditionnelle « assign » et les attributs dynamiques «Custom
attributes » (Figure 14).
Figure 14: Digramme d'héritage des "Templates" des hôtes
La définition des groupes des hôtes:
Dans la configuration de Icinga 2 la définition des groupes sert à regrouper des hôtes
ou des services par affinité afin de les visualiser dans les interfaces graphiques. Elle
27
sert également à permettre de déployer massivement des services prédéfinis ou encore
des règles de dépendances en fonction du type, rôle de l’hôte.
Dans le cas de l’atelier du test, deux types de groupes ont été créés :
Les groupes fonctionnels : il s’agit d’un ensemble de hôtes qui ont le même
rôle au sein du réseau (groupe des contrôleurs, groupe des switches...), ce qui
permettra de visualiser les états des hôtes par groupe fonctionnel (Figure 15).
La définition de ces groupes est faite en utilisant la notion d’application des
règles « Group assign rules » avec des conditions sur les attributs « custom
attributes » déjà crées dans les « Templates » exemple :
Object HostGroup "Nodes" {
Display_name = " HG.Nodes"
Assign where host.vars.t_Node
}
28
Figure 15: Diagramme des "Host Group" fonctionnels
Les groupes logiques : il s’agit d’une répartition logique selon l’appartenance
à une même ferme. Cette répartition permettra par exemple de visualiser tous
les nœuds d’une ferme donné (Figure 16).
La définition des groupes est faite de la même façon que celle des groupes
fonctionnels, toutefois, les conditions dans ce cas utilisent les expressions
régulières sur le nom de l’hôte exemple :
Dans cet exemple, le groupe « farm A » rassemble tous les hôtes appartenant à
la ferme A (nœuds, contrôleur, switch de contrôle….). La condition est faite
Object HostGroup "farmA" {
Display_name = " HG.FarmA"
Assign where match(*FarmA*,host.name)
}
29
sur le nom du hôte du faite que tous les hôtes d’une ferme donnée X
contiennent l’expression « ferme X ».
Figure 16: Digramme des "Host Group" logique
La définition des services :
La définition d’un service identifie une ressource sur un hôte. Le terme « service » est
très générique. Il peut s’appliquer à un processus (SSH, HTTP, SMTP…) ou bien tout
autre type de mesures associé à l’hôte (temps de réponse à un ping, nombre
d’utilisateurs connectés, usage de CPU).
Dans notre cas, la définition des services est faite selon la notion « Apply services to
hosts » qui consiste à appliquer un service à un ensemble de hôtes en utilisant une
seule règle de définition. La condition d’application du service porte encore une fois
sur les attributs « custom attributes » déjà créés dans les « Templates » (Figure 17).
30
Figure 17: Digramme des services
Exemple d’utilisation :
L’exemple ci-dessous illustre la définition et l’application d’un service « NFS-sce » sur tous
les hôtes de type NFS. La directive « check_command » est utilisée pour spécifier le nom de
la commande que Icinga 2 exécutera pour déterminer l’état du service.
La définition des dépendances d’hôtes et de services :
Les dépendances d’hôtes et de services sont une fonctionnalité avancée qui permet de
contrôler le comportement des hôtes et des services selon l’état d’un ou plusieurs
autres hôtes ou services.
Icinga 2 offre la possibilité de définir trois types de dépendances :
Host-to-Host : entre deux hôtes.
apply Service "NFS-sce" {
import “generic-service”
check_command = " check_NFS"
Assign where host.vars.t_NFS
31
Service-to-Service : entre deux services.
Service-to-Host ou Host-to-Service : entre un service et un hôte.
Les dépendances permettent de limiter d’une part les vérifications d’hôtes ou de
services et d’autre part l’envoi des notifications en cas de l’échec de la dépendance.
Une dépendance est considérée avoir échoué si l’état courant d’un hôte ou d’un service
(parent) correspond à une des options d’échec (CRITICAL, DOWN…).
Avant qu’Icinga 2 n’exécute un contrôle ou n’envoie des notifications concernant un
service ou un hôte, il vérifiera si le service ou l’hôte comporte des dépendances. Si ce
n’est le cas, le contrôle est exécuté ou la notification est envoyée comme en temps
normal, si le service ou l’hôte a bien une ou plusieurs dépendances, Icinga 2 vérifiera
chacune de la manière suivante :
1. Icinga 2 récupère l’état courant du service ou de l’hôte dont il dépend.
2. Icinga 2 compare l’état courant du service ou de l’hôte dont il dépend aux
options d’échec.
3. Si l’état courant correspond à une des options d’échec, Icinga 2 sortira de la
boucle de vérification des dépendances.
4. Si non, Icinga 2 continuera avec la prochaine dépendance.
Ce cycle continue jusqu’à ce que toutes les dépendances du service aient été vérifiées,
ou jusqu’à ce qu’une dépendance échoue.
Compte tenu des spécificités du réseau de l’atelier de test, plusieurs dépendances ont
été identifiées (Figure 18).
32
Figure 18: Diagramme des dépendances
Partant du constat que plusieurs hôtes ou services dépendent du même hôte ou service, il
serait judicieux de définir un nouveau attribut « custom attribute » permettant de matérialiser
cette dépendance. Ceci, permettra de faciliter la génération des règles de dépendances en
mettant la condition sur cet attribut.
Prenons par exemple les dépendances entre tous les nœuds de la ferme A et le switch de
contrôle A de la même ferme (Figure 18). Toutes ces dépendances sont définies par une seule
règle en se basant sur la notion « apply rules » avec une condition sur l’attribut de
dépendance (Voir exemple ci-dessous) [Icinga2_doc 2014].
33
2.3.3 Implémentation de la configuration et résultats des tests
A la différence de beaucoup d’autres outils de supervision, Icinga 2 ne dispose pas de
mécanisme interne pour vérifier l’état d’un service, d’un hôte, etc. A la place, il utilise des
programmes externes appelés plugins. Icinga 2 exécutera un plugin dès qu’il a besoin de tester
un service ou un hôte qui est supervisé. Les plugins font ce qu’il faut pour exécuter le contrôle
et ensuite envoient simplement le résultat à Icinga 2. Icinga 2 analysera le résultat reçu pour
déterminer le statut des hôtes ou services sur le réseau. Les plugins sont des programmes bien
séparés d’Icinga 2, ils peuvent contrôler une ressource ou un service local ou distant selon
l’architecture de la Figure 19.
Figure 19: Mécanisme d'exécution des plugins
apply Dependancy "nodes-switch-ctrl" to Host {
parent_host_name = "switch-ctrl-a"
disable_checks = true
disable_notifications = true
Assign where host.vars.Dep_network = = "switch-ctrl-a"
}
34
Afin d’implémenter la configuration de l’atelier de tests, un seul script Shell est utilisé pour
simuler l’exécution des différents plugins. Ce script consiste à chercher dans un fichier le nom
d’un service ou d’un hôte du réseau, s’il trouve le nom il retourne l’état « CRITICAL » ou
« DOWN » selon qu’il s’agit d’un service ou d’un hôte, le cas échéant, il retourne l’état
« OK » ou « UP ».
Ainsi, ayant fait toute la configuration nécessaire au bon fonctionnement de Icinga 2, le
système de supervision commence à récupérer des informations, signaler des problèmes et
envoyer des informations. Les figures suivantes donnent une idée sur les résultats des tests
visualisés sur l’interface Icinga-web.
Au démarrage de l’interface web, une page d’authentification apparaît permettant de faire
entrer le login et le mot de passe (Figure 20).
Figure 20: Page d'authentification Icinga-web
Une fois que l’authentification est faite avec succès, l’écran principal apparaît contenant les
différents menus proposés. En appuyant sur l’onglet « HostSatus », les différents états des
hôtes sont visualisés avec les éléments de description associés (Last check, Duration,
35
Output…). 7 hôtes sur 10 sont dans un état « UP » en vert, 3 hôtes sur 10 sont dans un état
« DOWN » en rouge (Figure 21).
Figure 21: Interface des états des hôtes
En appuyant cette fois ci sur l’onglet « ServiceStatus » les différents états des services sont
affichés (Figure 22). Chaque hôte est visualisé avec l’état de ses services. 10 services sur 13
sont dans un état « OK » en vert, 3 services sont dans un état « CRITICAL » en rouge.
36
Figure 22: Interface des états des services
Pour afficher les différents groupes des hôtes définis dans la configuration (Section
précédente), il faut appuyer sur l’onglet « Hostgroups », chaque groupe est affiché avec les
différents états de ses membres (Figure 22).
37
Figure 23: Interface des groupes des hôtes
La dépendance entre la plus part des hôtes du réseau et le switch_ux a donné les résultats
représentés dans la Figure 24. En effet, vu que le switch_ux est dans un état « DOWN » les
autres hôtes dépendants apparaissent dans un état « UNREACHABLE » sans pour autant
envoyer de notifications ni exécuter un contrôle, d’où l’intérêt de la notion de dépendance
(Figure 21).
38
Figure 24: Dépendance du switch_ux
2.4 Puppet : solution de gestion des configurations
2.4.1 Puppet : définition
Puppet est une application très pratique, c’est ce que l’on pourrait retrouver dans les
entreprises avec de grands volumes de serveurs, où le système d’information « est
industrialisé » (système LHCb Online par exemple). En effet, dans de tels environnements le
nombre de serveurs tend à augmenter rapidement, l’installation et la configuration des
logiciels sont donc nécessaires à chaque nouveau serveur, en outre, la synchronisation des
configurations de serveur exige un effort supplémentaire comme l’écriture des scripts shell
[Puppet 2014].
Ainsi, Puppet est un outil de gestion de configuration de serveurs, qui permet d’automatiser
un grand nombre de tâches d’administration de manière centralisée :
39
Configurer de façon homogène un ensemble se serveurs,
Contrôler et corriger tout écart de configuration,
Faire du déploiement rapide de serveurs,
Augmenter le niveau de sécurité : déploiement rapide de patchs, mise à jour de
paquets, alerte si une configuration est modifiée…
Figure 25: Logo Puppet
2.4.2 Fonctionnement et caractéristiques de Puppet
Puppet est un outil qui permet de mettre à jour de façon automatisée et selon un scénario
prédéfini un ensemble de serveurs clients selon une architecture client /serveur. Sur chaque
machine un client va être installé et c’est lui qui va contacter le PuppetMaster par le biais de
communication HTTPS (Figure 26).
40
Figure 26: Architecture client/serveur de Puppet
Pour assurer son bon fonctionnement, Puppet dispose des éléments suivants [Puppet_doc
2014] :
Langage déclaratif :
L’idée est de définir un certain nombre de ressources et leurs relations afin d’amener
le serveur client dans l’état désiré. Si l’état du serveur diffère de l’état désiré, Puppet
réalisera les actions nécessaires pour y remédier. Pour cela, Puppet dispose d’un
langage déclaratif dont le modèle est implémenté comme un graphe orienté acyclique :
il faut définir les relations et les dépendances entre les ressources pour obtenir l’ordre
d’exécution recherché (contrairement à un langage procédural ou l’ordre d’exécution
serait implicite).
Exemple : si mon logiciel à installer dans le serveur client a besoin d’un fichier de
configuration « File » dans le répertoire « Directory », je vais devoir clairement
écrire :
Mon programme a besoin d’un fichier de configuration nommé « File ».
Mon fichier de configuration « File » doit être stocké dans le répertoire
« Directory » qui doit donc être présent.
Couche d’abstraction des ressources :
Puppet utilise une couche d’abstraction des ressources (RAL) : le client Puppet saura
automatiquement faire une installation d’un paquet indépendamment du système
d’exploitation.
41
Par exemple, en langage Puppet, j’écris :
Mon client Debian va faire :
Mon client Redhat va faire :
Facter un système d’inventaire :
Facter est un système d’inventaire pour Puppet (écrit en Ruby) qui remonte au serveur
un certain nombre d’informations au format « clé => valeur » disponible en tant que
variable dans les scénarios Puppet. On peut ainsi récupérer par exemple : le hostname,
le domaine, l’IP….il est possible de créer facilement ses propres « clés => valeurs ».
Ces informations sont appelées des « Facts ».
Pour résumer, voici un schéma de Puppet labs (le site officiel de Puppet) qui décrit le
fonctionnement et les caractéristiques de Puppet (Figure 27).
1 package { ‘htop’ :
2 Ensure = installed,
3 }
1 apt-get install htop
1 yum install htop
42
Figure 27: Fonctionnement de Puppet
2.4.3 Exemple d’utilisation : Installation de Icinga 2 par Puppet
Installation de Puppet :
Dans l’objectif de tester les fonctionnalités de Puppet, une installation de l’outil sur
des machines virtuelles SLC 6 a été réalisée selon les étapes suivantes :
1) Au niveau du serveur master :
Installer Puppet Master : cette installation nécessite l’ajout du dépôt Puppet
Labs qui contient les différents packages de Puppet.
Configurer Puppet Master pour qu’il s’exécute au démarrage.
S’assurer que le port 8140 est ouvert et qu’il est en état « listening »
Signer les certificats des nœuds clients pour que la communication soit
autorisée.
2) Au niveau des serveurs clients:
Ajouter le dépôt Puppet Labs.
Installer Puppet Client.
43
Editer le fichier « /etc/hosts » afin d’associer les adresses IP du master et du
client avec leurs noms de domaine.
Configurer Puppet agent pour qu’il s’exécute au démarrage.
Installation d’Icinga 2 par Puppet :
L’installation d’Icinga 2 par Puppet est faite selon les mêmes étapes d’installation
manuelle (voir la section 2.2). Dans Puppet, chaque étape d’installation correspond à la
définition d’un ensemble de ressources (paquets, fichiers, commandes…) qui peuvent être
regroupées dans des classes (qui supportent l’héritage) qu’il sera ensuite possible
d’associer à des nodes. Dans notre cas, toutes les classes définies ont été regroupées dans
un seul module appelé « icinga2 ».
L’ensemble des classes sont écrites en un langage propre à Puppet (langage déclaratif) et
compilées par la suite par le serveur master pour former un « catalogue ». Ce dernier est
téléchargé en local par le client Puppet (ce qui permettra au client de continuer à
fonctionner si la connexion au serveur n’est plus possible).
Le module d’installation « icinga2 » est composé d’une seule classe « icinga2 » qui
comporte à son tour les sous-classes suivantes :
icinga2 :: rpm-snapshot : cette sous-classe a pour rôle de configurer tous les
dépôts d’installation de Icinga 2.
icinga2 :: doc : cette sous-classe a pour rôle d’installer le package qui fournit la
documentation de Icinga 2.
icinga2 :: nagios-plugins : cette sous-classe permet d’installer les plugins nagios
nécessaire pour les vérification des hôtes et des services.
icinga2 :: feature : cette sous-classe permet d’ajouter des fonctionnalités de
Icinga 2 comme ido-mysql par exemple.
icinga2 :: apache : cette sous-classe a pour but d’installer « apache » nécessaire
pour l’interface web.
icinga2 :: php : cette sous-classe a pour but d’installer « php » nécessaire pour
l’interface web.
Icinga2 :: mysql : cette sous-classe a pour but d’installer le mysql-server et de
s’assurer que le service mysql est démarré.
44
Icinga2 :: web : c’est la sous-classe permettant d’installer le package icinga-web
et toutes les fonctionnalités relatives à l’interface web.
Icinga2 :: core : c’est la sous-classe d’installation d’icinga 2 proprement dit qui
fait appel à la majorité des sous-classes déjà cités.
45
3. Mise en œuvre de la solution complète de supervision sur
le système LHCb Online
Ce chapitre décrit la deuxième et la dernière partie de la réalisation du projet. Il s’agit
du déploiement de la solution complète sur le système de production LHCb Online. Il
présente d’une part la solution de supervision du système par Icinga 2, d’autre part
l’automatisation de cette supervision en utilisant l’outil Puppet.
3.1 Présentation du système à superviser
Le système à superviser est le système LHCb Online décrit en détails dans la section 1.1.4 du
premier chapitre. Il s’agit d’une infrastructure hétérogène composée de plus de 2000 serveurs
et 200 équipements réseau.
3.2 Conception de la configuration du système de supervision
La conception adoptée pour le système de production est la même que celle de l’atelier de test
appliquée à un échelon plus grand (section 2.3.2). Il s’agit d’une conception plate basée sur
les « Templates » chaque template désigne une fonctionnalité ou un type de machine.
La Figure 28 présente un extrait du diagramme des « Templates » du système de supervision
réel. Tous les « Templates » (types de machines) héritent d’un « Template » générique appelé
« tpl-host » qui comprend des attributs génériques valables pour tous les types d’hôtes
notamment :
max_check_attempts : désigne le nombre de fois qu’un hôte est vérifié avant de
passer à l’état « HARD », par défaut cet attribut est à 3.
check_interval : cet attribut est utilisé pour les vérifications lorsque le hôte est en état
« HARD », par défaut c’est 5 minutes.
retry_interval : cet attribut est utilisé pour les vérifications lorsque le hôte est en état
« SOFT », par défaut c’est 1 minute.
N.B : « HARD » : l’état de l’hôte ou du service n’a pas changé.
46
« SOFT » : l’état du hôte ou du service vient d’être changé et Icinga 2 est en train de
vérifier afin d’éviter l’envoi de notifications non nécessaires.
check_command : cet attribut désigne le nom de la commande utilisée pour vérifier
l’état d’un hôte. Cette commande fait appel à un plugin appelé « check_ping ». C’est
l’exécution de ce programme qui retourne le statut d’un hôte.
vars.tpl-host : cet attribut sert à identifier un objet « Host ».
Figure 28: Extrait du diagramme des "Templates"
L’exemple présenté dans la figure 28 illustre parfaitement la notion de l’héritage multiple :
l’objet « hlta01 » qui désigne le contrôleur de la ferme a01 hérite à la fois du tpl-vm, tpl-linux,
ainsi que du tpl-controller. Ce qui signifie que cette machine qui a la fonction de contrôle,
tourne sur un système d’exploitation linux et elle est hébergée sur une machine virtuelle.
Il est à noter que la démarche suivie pour la conception des services, des groupes, ainsi que
des dépendances reste la même que celle adoptée lors des tests (voir section 2.3.2).
47
3.3 Implémentation de la configuration
Afin de garantir la mise en place d’une solution complète, qui répond aux besoins déjà fixés,
plusieurs outils complémentaires ont été ajoutés à Icinga 2.
3.3.1 Agent NRPE (Nagios Remote Plugin Executor)
Définition
Si il est possible pour le serveur Icinga 2 de vérifier par exemple qu’un port est toujours en
écoute sur une machine distante en utilisant les plugins (voir section 2.3.3), il est plus difficile
de connaître la charge de la machine ou encore la mémoire utilisée. D’où l’intérêt de faire
appel à des petits programmes appelés agents de supervision.
NRPE est parmi ces agents de supervision qui permet de récupérer les informations à
distance. Son principe de fonctionnement est simple : il suffit d’installer le démon sur la
machine distante et de l’interroger à partir du serveur Nagios.
N.B : il est possible d’exécuter des plugins sur des machines à distance sans utiliser NRPE. Il
existe un plugin appelé « check_by_ssh » qui permet d’exécuter des commandes à distance en
utilisant SSH (Secure Shell). Certes, l’utilisation de SSH est plus sécurisée que NRPE,
toutefois elle provoque des niveaux très élevés de charge CPU surtout avec des milliers de
machines à superviser (cas du LHCb Online).
Principe de fonctionnement [NRPE 2013]
Le fonctionnement est simple : plutôt que d’appeler directement une commande
particulière depuis Icinga 2, le plugin « check_nrpe » sur le serveur Icinga 2 initie une
connexion vers l’agent NRPE de l’hôte cible en lui demandant d’exécuter une
vérification. L’agent NRPE retourne le résultat au serveur Icinga 2 (Figure 29) .
48
Figure 29: Fonctionnement du NRPE
Exemples d’utilisations :
Les vérifications directes :
NRPE est souvent utilisé pour superviser directement des ressources sur une
machine distante. Par exemple, la charge CPU, l’utilisation du disque, les
utilisateurs courants, l’état des processus, l’utilisation de la mémoire (Figure
30).
Figure 30: Fonctionnement des vérifications directes
49
Les vérifications indirectes
NRPE peut être utilisé également pour vérifier des ressources ou services qui
ne sont pas accessibles directement à partir du serveur Icinga 2. Par exemple si
un serveur web distant est accessible de la machine distante où le démon
NRPE tourne mais pas du serveur Icinga 2, le démon NRPE peut être
configuré de telle façon à permettre de superviser le serveur web
indirectement. Ainsi Le démon NRPE joue le rôle d’un proxy (Figure 31).
Figure 31: Fonctionnement des vérifications indirectes
Puisque NRPE a la particularité d’exécuter les commandes demandées par le serveur Icinga 2
Dans la machine distante à superviser, une liste de ces commandes a été définie dans le fichier
de configuration « nrpe.cfg » de la machine à superviser. Exemple:
Command [i2_check_load] = /usr/lib64/nagios/plugins/check_load -w $ARG1$ -c
$ARG2$.
Cette commande par exemple permet de déterminer la charge CPU. Les arguments sont
passés dynamiquement. Elle est appelée depuis le serveur Icinga 2 par son nom indiqué entre
crochets [ ] de la manière suivante :
Check_nrpe -H <@machine_distante> -c <i2_nom_de_la_commande> .
50
3.3.2 NAN (Nagios Notifications Daemon)
Notifications et alertes
La solution de supervision doit faire gagner du temps à l’administrateur et lui
permettre d’intervenir en temps opportun. Pour cela, Icinga 2 génère des notifications
et des alertes en cas de problèmes et les envoie au superviseur par différents
méthodes : e-mails, sms, twitter, etc.
Pour envoyer les notifications aux utilisateurs, Icinga 2 se base sur des mécanismes
externes tels que les scripts Shell. Ainsi, la définition d’une notification nécessite un
ou plusieurs utilisateurs (et /ou des groupes d’utilisateurs) qui vont être notifiés en cas
de problèmes.
Dans notre cas, l’utilisateur « Chris » dans l’exemple ci-dessous appartenant à un
groupe d’utilisateur « Icinga2admins » sera notifié seulement dans le cas des états
« WARNING » et « CRITICAL » et recevra uniquement les notifications de type
« Problem » et «Recovery ».
Utilisation de NAN [Nicodemus 2005]
NAN est utilisé pour limiter le nombre de notifications que Icinga 2 pourrait envoyer,
ceci est réalisé en concaténant plusieurs notifications pour n’en envoyer qu’une seule
chaque x seconds.
Lorsqu’il reçoit une notification de Icinga 2 NAN utilise trois arguments :
Méthode de notification : page, service_email, host_email, etc.
object User "Chris" {
display_name = "egroup"
states = [ OK, Warning, Critical ]
types = [ Problem, Recovery ]
groups = [ "icinga2admins"]
email = "[email protected]"
pager = ""
= "
51
Adresse de destination : numéro de téléphone, adresse email, etc.
Type de notification : PROBLEM, AKNOWLEDGEMENT et RECOVERY.
Le contenu du mail.
L’exemple ci-dessous illustre l’utilisation de NAN (la commmande nanc) dans la
définition de l’objet « NotificationCommand » :
Installation de NAN
L’installation de NAN a été réalisée en utilisant Puppet. Un module Puppet dédié
permet l’installation de l’outil NAN sur le serveur de supervision après l’installation
d’Icinga 2.
3.3.3 Résultats de supervision du système LHCb Online
Ayant ajouté les outils complémentaires nécessaires au bon fonctionnement de la supervision
par Icinga 2, l’interface web (icinga-web) a permis d’afficher les résultats suivants :
L’interface web de Icinga permet de visualiser les hôtes selon les résultats des vérifications.
La Figure 32 présente un extrait des machines ayant un état « UP ». 1471 hôtes sont en état
« UP » .
object NotificationCommand "aggregated-mail-notification" {
import "plugin-notification-command"
command = "/usr/bin/printf \"%b\" $mail_content$ | /usr/local/nan/nanc -t
$notification.type$ -m $notification_method$ -d $user.email$"
}
52
Figure 32: Extrait des hôtes en état "UP"
La Figure 33 présente les hôtes en état « DOWN ». 8 hôtes sont dans un état « DOWN ».
Figure 33: Extrait des hôtes en état "DOWN"
53
Icinga 2 permet également de vérifier l’état des services. La figure 34 présente un extrait des
services du système LHCb Online avec leurs états (OK, WARNING, CRITICAL,
UNKNOWN). 1211 services sont en état « OK », 498 en état « WARNING », 810 en état
« CRITICAL » et 6478 en état « UNKNOWN ».
Figure 34: Extrait des différents états des services
L’interface web offre la possibilité d’avoir des statistiques sur les vérifications sous forme de
graphes, la figure 35 présente deux graphes un pour l’état des hôtes et un autre pour l’état des
services.
54
Figure 35: Graphe des statistiques
Afin de faciliter la lecture des résultats des vérifications, Icinga 2 permet de configurer des
groupes de machines « Hostgroup ». La Figure 36 présente les résultats des vérifications par
groupe.
Figure 36: Extrait des groupes "hostgroup"
55
3.3.4 Discussion des résultats
Si les résultats de supervision du système LHCb Online illustrent parfaitement les avantages
de l’outil Icinga 2, il n’en reste pas moins que certains problèmes persistent encore.
En effet, la solution de supervision basée sur Icinga 2 a permis de pallier les limites de la
solution actuelle (basée sur Icinga 1.x) :
1) Les résultats obtenus ont démontré les bonnes performances de Icinga 2 : l’instance
Icinga 2 a réussi à effectuer 30 000 vérifications actives dans moins d’une minute afin
de surveiller plus de 1500 hôtes. De plus, les délais de latences ne sont plus énormes.
2) L’utilisation de la notion de dépendance surtout celle relative au réseau (dépendance
par rapport aux switchs) a permis de diminuer davantage le nombre de notifications
envoyées.
3) Il est maintenant facile d’étendre la solution grâce à une configuration dynamique et
flexible.
4) La configuration Icinga 2 grâce à l’utilisation des « Templates » et d’autres
mécanismes a facilité la communication avec des outils d’automatisation de
configurations tel que Puppet (la dernière section traitera ce point).
Toutefois, pendant les tests de la configuration, quelques problèmes ont été soulevés plusieurs
fois :
1) Selon la documentation officielle de Icinga 2, il existe une dépendance implicite entre
un hôte et ses services, toutefois les résultats obtenus ont démontrés le contraire :
même si un hôte est « DOWN » les vérifications de ses services seront exécutés. Ce
problème a été soumis aux développeurs de Icinga 2 pour d’éventuelles solutions.
2) Dans certains cas, une vérification de l’état d’un service donne l’état « PENDING » ce
qui signifie en attente. Ce comportement est étrange du fait que le même service
tourne sur plusieurs machines et il est correctement vérifié. Ce bug a été également
soumis aux développeurs icinga 2.
56
3.4 Automatisation de la configuration par Puppet
3.4.1 Analyse du problème
Dans une infrastructure à grande échelle comme celle du LHCb Online, le nombre de serveurs
à superviser tend à augmenter rapidement. La configuration du serveur Icinga 2 est donc
nécessaire à chaque nouveau nœud ajouté. En outre, l’hétérogénéité et la complexité de
l’infrastructure à superviser exige un effort considérable comme l’écriture des scripts Shell.
Ainsi, concevoir et implémenter une solution permettant d’automatiser la génération de la
configuration du serveur de supervision constitue sans nul doute un apport considérable en
terme de temps et de performance.
Scénario escompté : Dès qu’un serveur ou plusieurs (le cas de l’ajout d’une ferme) sont
ajoutés au système à superviser, mettre à jour dynamiquement les fichiers de
configuration du serveur Icinga 2.
3.4.2 Solution proposée
La solution retenue consiste à utiliser l’outil Puppet (voir la section 2.4) ainsi qu’un outil
appelé Foreman permettant entre autres la gestion de la configuration des serveurs en
collectant les « facts » (informations des nœuds : OS, IP adresse….) et les rapports générés
par puppet [Foreman 2014].
La Figure 37 présente les principales étapes du processus de génération de la configuration du
serveur Icinga 2 à savoir :
1) Demande de configuration du client au serveur Puppet master et envoi des « facts »
en même temps. Dans ce cas, le serveur Icinga 2 est également un agent de Puppet.
2) Stockage des « facts » au niveau de la base de données du serveur Foreman.
3) En fonction des informations de chaque agent, les ressources sont interprétées et
compilées. Envoi de la configuration compilée à chaque client. du fait que la
configuration du serveur Icinga 2 utilise les « facts » des autres agents, il est
57
nécessaire donc de récupérer les « facts » déjà stockés pour générer le catalogue du
serveur Icinga 2.
4) Mise en place de cette configuration par le client.
Figure 37: Processus de configuration Puppet-Foreman
Dans ce processus de génération chaque outil à un rôle particulier :
Puppet :
Plutôt que diffuser la configuration du serveur au client, ce sont les clients qui
viennent réclamer cette configuration. Cela peut porter sur un fichier, un package, un
service, etc. Il est possible de spécifier les intervalles entre les différentes demandes de
chaque client. Une fois la demande autorisé par le serveur Puppet, ce dernier envoi la
configuration à l’agent et celui-ci l’applique : si la configuration du serveur est
58
identique à celle du client, aucune action n’est effectué (exemple : un logiciel déjà
installé sur le client ne sera pas réinstallé).
Utilisation des facts : le package Facter est un outil d’inventaire système : il
retourne des « facts » : des variables globales de chaque agent Puppet telle que
son adresse IP, son hostname, son OS et sa version etc. Ces « facts » sont
utilisés par Puppet master afin de servir de variables nécessaires à la génération
des catalogues (configuration compilée). En plus des facts par défaut, Il est
possible d’ajouter d’autres types d’informations au facter.
Agent Icinga 2 : le serveur Icinga 2 est un agent de Puppet, toutefois sa
configuration est particulière, car elle consiste à générer des fichiers contenant
les informations des autres agents (hostname, adresse IP..) qu’il supervise.
D’où l’intérêt de faire appel à un autre outil appelé Foreman.
Foreman : [Foreman 2014]
Foreman est un projet open source qui aide les administrateurs systèmes à gérer les
serveurs tout au long de leur cycle de vie, de la configuration à la supervision. En
utilisant Puppet et Foreman ensemble, il est facile d’automatiser les tâches répétitives
d’administration, de déployer des applications et de gérer de manière proactive les
changements. En outre, Foreman fournit des facilités d’interaction notamment une
interface web (Figure 38) ainsi qu’une API (Application Programming Interface)
Restful permettant de construire une logique métier sur une base solide .
Figure 38: Interface web Foreman
59
Parmi les fonctionnalités offertes par Foreman est celle de pouvoir ajouter les hôtes et
leurs facts dans la base de données Foreman [Foreman 2014], La figure 39 illustre
cette possibilité.
Figure 39: Extrait des facts sur Foreman
Afin de récupérer les facts depuis foreman , il existe une fonction appelée foreman( )
dont le rôle est de faire une requête vers l’API Foreman ce dernier une fois il la reçoit ,
il retourne le résultat sous forme de flux JSON (Javascript Object Notation).
Génération d’un fichier de configuration Icinga 2 :
Un fichier de configuration Icinga 2 est un fichier permettant de définir un objet
« host » ainsi que ses dépendances si elles existent. Ce fichier peut être décomposé en
plusieurs fragments, chaque fragment vient du fait que le hôte en question a une
fonctionnalité ou une caractéristique particulière. Exemple : le fichier de définition du
hôte « hlta0208 » est la concaténation des fragments suivants :
60
Header_fragment : chaque hôte quel que soit son type doit inclure ce fragment
dans son fichier de configuration.
Farmnode_Fragment : ce hôte inclus ce fragment car il est de type
« Farmnode, » c’est-à-dire qu’il est un nœud d’une ferme.
Linux_Fragment : ce hôte tourne sur un système d’exploitation linux.
Footer_Fragment : chaque hôte quel que soit son type doit inclure ce fragment
dans son fichier de configuration.
Dependancy_Fragment : ce hôte comporte une dépendance.
N.B : La génération de ce genre de fichiers par puppet nécessite en plus du fact
« hostname », l’ajout d’un fact qui comporte la liste des types de la machine en
question : i2_type.
Les facts sont récupérés sous forme d’une structure de données comme suit :
object Host "hlta0208" {
address = "hlta0208"
import "tpl-farm-node"
vars.dep_farm_nfs = "hltnfsa02"
vars.dep_network = "sw-d1a02-c1"
import "tpl-linux"
}
apply Dependency "dep-mountpoint-hlta0208" to Service {
parent_host_name = "hlta0208"
parent_service_name = "mountpoint"
disable_checks = true
disable_notifications = true
assign where host.name == "hlta0208" && service.name !=
"mountpoint"
}
Header_Fragment
Farmnode_Fragment
Linux_Fragment
Footer_Fragment
Dependancy_Fragment
61
Une fois que Puppet récupère cette structure, il procède à la concaténation des
fragments selon la valeur du fact « i2_type ».
Cas particulier : Les machines qui ne sont pas des agents Puppet :
Pour les machines qui ne peuvent pas être des agents Puppet : par exemple les
« switchs », la solution retenue est d’écrire leurs informations (équivalent des facts en
Puppet) dans un fichier YAML (format de fichiers), et d’utiliser une fonction Puppet
appelée Hiera( ) permettant de récupérer ces données .
"hlta0208.lbdaq.cern.ch"=>
{
"facts"=> {
"i2_type"=> ["linux", "Farmnode"]
"hostname"=>"hlta0208"
}
}
62
Conclusion
Mon projet s’inscrit dans le cadre de la phase d’amélioration de l’infrastructure informatique
de l’expérience LHCb, une des quatre expériences du grand accélérateur des particules LHC.
Mon travail consistait à mettre en place une nouvelle infrastructure de supervision basée sur
les outils Icinga 2 et Puppet.
Afin de réaliser les objectifs estimés du projet, j’ai, dans un premier temps effectué l’analyse
des besoins des membres de l’équipe LHCb Online via l’organisation hebdomadaire des
réunions. Au cours de ces rencontres et des différents échanges avec l’équipe j’ai pu
comprendre le fonctionnement complexe du système LHCb Online. Ensuite, j’étais amené à
bien maîtriser les concepts de base de l’outil de supervision Icinga 2 ainsi que ceux de l’outil
de gestion de la configuration des serveurs Puppet.
Dans l’optique de tester les fonctionnalités qu’offrent les deux outils, une réalisation à base de
la virtualisation et d’un atelier personnalisé de tests s’est avérée nécessaire. Icinga 2 est
conçu pour superviser la disponibilité d’un réseau donné, cette supervision est basée
essentiellement sur la définition de plusieurs fichiers de configuration, d’où était l’intérêt de
choisir une conception adaptée aux contraintes du système LHCb Online.
En outre, l’automatisation de la configuration du serveur Icinga 2 en utilisant Puppet était un
réel défi, dans ce sens, un système de génération des fichiers de configuration Icinga 2 a été
mis en place résolvant ainsi l’une des problématiques majeures de la supervision des
infrastructures informatiques de grande taille.
Les principales difficultés techniques ont porté sur deux points, le premier concerne l’outil de
supervision Icinga 2 récemment en version stable, ce qui a entrainé certains problèmes plus
particulièrement le manque de documentation et d’experience utilisateur tandis que le second
point concerne l’utilisation de l’outil Puppet. L’apprentissage et la maîtrise du langage
spécifique à Puppet n’est pas aisé surtout avec des besoins très pointus en terme de rapidité et
de performance.
Mon projet s’est achevé en août 2014. Plusieurs améliorations pourraient être envisageables
notamment l’utilisation de l’interface web Icinga 2 en cours de développement, l’usage de
l’agent icinga 2 (au lieu de NRPE) pour l’exécution des vérifications à distance, le
renforcement des aspects de sécurité des communications au sein du système de supervision,
ainsi que l’utilisation de la nouvelle fonctionnalité « cluster » afin d’assurer en permanence la
disponibilité de l’infrastructure de supervision.
ix
Références bibliographiques
[CERN 2014], CERN, Rapport annuel 2013, Genève, Suisse, 2014.
[Haen 2013], Christophe Haen, OPhronsis a diagnosis and recovery tool for system administrators, Thèse de doctorat, Université Blaise Pascal-Clermont II, 24 octobre 2013.
[Haen, Bonaccorsi et Neufeld 2011], C.Haen, E.Bonaccorsi, N.Neufeld, Distributed monitoring system based on Icinga, In Proceedings of WEPMU035 ICALEPCS 2011, Grenoble, France, 2011.
[LHCb Collaboration 2001], LHCb Collaboration, TDR LHCb Online System Data Acquisition & Experiment Control, Technical Design Report, CERN/LHCC 2001-040 LHCb TDR 7, 19 décembre 2001.
Webographie
[CERN_homepage 2014], About CERN, 2014, [Ressource électronique], [Réf. du 30
juin 2014 à 23:26]. Disponible sur : http://home.web.cern.ch/about
[Haen, Bonaccorsi et Neufeld 2013], C.Haen, E.Bonaccorsi, N.Neufeld, Evolution of
the monitoring in the LHCb Online System [Ressource électronique], 2013, USA. Disponible sur : http://accelconf.web.cern.ch/AccelConf/ICALEPCS2013/papers/thcoba01.pdf.
[Icinga2 2014], Icinga2, Icinga2 redesigns Open Source Monitoring, 2014, [En ligne], Disponible sur : https://www.icinga.org/icinga/icinga-2/
[Icinga2_doc 2014], Icinga2, Icinga2 documentation, 2014, [En ligne], Disponible sur : http://docs.icinga.org/icinga2/latest/doc/module/icinga2/toc
[Icinga2_epel 2014], Icinga2, Icinga EPEL Repository, 2014, [En ligne], Disponible sur : http://packages.icinga.org/epel/
x
[Icinga-web-URL 2014], Icinga, Icinga-web URL, 2014, [En ligne],
Disponible sur : http://localhost/icinga-web
[Puppet 2014], Icinga2, C’est quoi Puppet ?, 2014, [En ligne], Disponible sur : http://doc.ubuntu-fr.org/puppet
[LHC 2007], Large Hadron Collider, 2007, [Ressource électronique], [Réf. du 12 mai
2014 à 08:48]. Disponible sur : http://fr.wikipedia.org/wiki/Large_Hadron_Collider
[LHCb 2007], Large Hadron Collider beauty experiment, 2007, [Ressource électronique], [Réf. du 15 mars 2013 à 16:49]. Disponible sur : http://fr.wikipedia.org/wiki/LHCb
[Puppet_doc 2014], Icinga2, learning Puppet, 2014, [En ligne], Disponible sur : https://docs.puppetlabs.com/learning/introduction.html
[NRPE 2013], Icinga2, Protocole NRPE, 2013, [En ligne], Disponible sur : http://wiki.monitoring-fr.org/nagios/addons/nrpe
[Nicodemus 2005], Nicodemus, PNAN-Nagios Notification Daemon, 2005, Dernière date de modification : 12-10-2010, [En ligne], Disponible sur : https://www.monitoringexchange.org/inventory/Utilities/AddOn-
Projects/Notifications/NAN---Nagios-Notification-Daemon
[Foreman 2014], Foreman, Foreman 1.5 Manual, 2014, [En ligne], Disponible sur :
http://theforeman.org/manuals/1.5/index.html