Introduction

Nous allons voir ensemble le playbook que j’ai créé pour déployer Nagios sur notre infrastructure et ce par la solution de déploiement racheté par RedHat, Ansible. Nous installerons ensuite la solution vshell2 pour avoir une belle interface graphique pour notre solution de supervision.

Nous allons faire nos actions sur une machine de 4GB de RAM et de 2 CPUs sur notre infrastructure VMWare pour être un peu au dessus des recommandations de Nagios.

Installation de Nagios

Dépendances

Nagios dépend de certaines dépendances, nous allons donc les installer. Nous installons python-passlib pour pouvoir utiliser le module Ansible htpasswd.

- name: Installation des dependances
  apt:
    name: [build-essential, apache2, php, openssl, perl, make, php-gd, libgd2-xpm-dev, libapache2-mod-php, libperl-dev, libssl-dev, daemon, wget, apache2-utils, unzip]
    state: latest

- name: Installation de la dependance Ansible Python-passlib
  apt: "pkg=python-passlib state=latest"

Compte de service et groupe

Nagios doit utiliser un compte de service qui lui sera dédié ainsi qu’un groupe. Cela nous permettra de gérer au niveau de nos permissions les accès de notre solution de supervision.

- name: Ajout du groupe Nagios nagioscmd
  group:
    name: nagcmd
    state: present

- name: Ajout du compte de service nagios
  user:
    name: nagios
    comment: Nagios Service Account
    groups: nagcmd,www-data
    uid: 1010

Téléchargement des ressources

Nous allons donc télécharger Nagios ainsi que ses plugins via ces deux tâches :

- name: Telechargement de Nagios
  get_url: 
    url: https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.4.5.tar.gz
    dest: /tmp/

- name: Telechargement des plugins Nagios
  get_url:
    url: https://nagios-plugins.org/download/nagios-plugins-2.3.2.tar.gz
    dest: /tmp/

Nagios ne fait pas du monitoring de serveurs, il délègue cette fonctionnalité aux plugins. C’est pour cela que nous devons les télécharger. J’ai mis les liens de téléchargement officiel de Nagios, cela n’est pas la meilleure façon de faire, il vaudrait mieux stocker cela sur un serveur interne et de récupérer ces ressources. Cela nous permettrait d’avoir une meilleure gestion des mises-à-jour ou encore en cas de lien mort…

Plugins
Image provenant du site monitoring-fr.org

Ensuite, il faut décompresser ces archives, nous pouvons toujours le faire dans le répertoire /tmp.

- name: Decompression de Nagios
  unarchive:
    src: /tmp/nagios-4.4.5.tar.gz
    dest: /tmp/
    remote_src: yes

- name: Decompression des plugins Nagios
  unarchive:
    src: /tmp/nagios-plugins-2.3.2.tar.gz
    dest: /tmp/
    remote_src: yes

Nous utilisons l’option « remote_src » qui est positionné à « yes » car nous utilisons comme source un fichier qui est déjà téléchargé sur le serveur, si cette option n’était pas activé il aurait pris comme source un fichier provenant du serveur de déploiement sur lequel est installé Ansible.

Compilation des sources

Nous devons passer par l’étape de compilation des sources que nous avons téléchargé auparavant. Nous le ferons pour Nagios…

- name: Configuration et compilation de Nagios
  shell: 
    cmd: "{{ item }}"
    chdir: /tmp/nagios-4.4.5/
  with_items:
    - ./configure --with-nagios-group=nagios --with-command-group=nagcmd --with-httpd_conf=/etc/apache2/sites-enabled/
    - make all
    - make install
    - make install-init
    - make install-config
    - make install-commandmode
    - make install-webconf

Mais aussi pour les plugins…

- name: Configuration et compilation des plugins Nagios
  shell:
    cmd: "{{ item }}"
    chdir: /tmp/nagios-plugins-2.3.2/
  with_items:
    - ./configure --with-nagios-user=nagios --with-nagios-group=nagios
    - make
    - make install

Configuration de Nagios

Désormais que nous avons compiler les sources de Nagios, nous allons procéder à sa configuration.

Création du compte d’accès

- name: Creation du compte nagiosadmin 
  htpasswd:
    path: /usr/local/nagios/etc/htpasswd.users
    name: nagiosadmin
    password: 'motdepasse'

Cela va créer un compte au niveau de Nagios. C’est celui-ci dont on se servira pour se connecter à la console de supervision web.

Configuration du fichier de contacts

Il faut créer notre fichier de configuration de contacts contacts.cfg dans le répertoire files à la racine de notre rôle.

Voici le contenu de mon fichier :

define contact {
        contact_name                    nagiosadmin          ; 
        use                             generic-contact      ; 
        alias                           Nagios Admin         ; 
        email                           email@gmail.com      ;
}

define contactgroup {
	contactgroup_name       admins
	alias                   Nagios Administrators
	members                 nagiosadmin
}

On copiera ce fichier dans le répertoire /usr/local/nagios/etc/objects/

- name: Configuration du fichier de contacts Nagios
  copy:
    src: contacts.cfg
    dest: /usr/local/nagios/etc/objects/contacts.cfg
    force: yes

Redémarrage de Nagios

Pour redémarrer et activer un service au démarrage, nous allons exécuter cette tâche.

- name: Activation et redemarrage du service nagios
  service: 
    name: nagios
    state: restarted
    enabled: yes
  tags:
    - restart_nagios

Configuration d’Apache

Nous avons besoin d’activer le module CGI d’Apache, nous allons donc le faire et redémarrer Apache.

- name: Activation du module cgi
  apache2_module:
    state: present
    name: cgi

- name: Redemarrage du service apache2
  service: 
    name: apache2 
    state: restarted
    enabled: yes
  tags:
    - restart_apache

Installation de Nagios vshell2

Téléchargement et décompression

Nous allons télécharger vshell depuis le repository Git officiel de l’interface et le mettre dans notre répertoire /tmp, nous le décompresserons par la suite.

- name: Telechargement de Nagios vShell interface
  get_url:
    url: https://github.com/NagiosEnterprises/nagiosvshell/archive/v2.0.0-416.tar.gz
    dest: /tmp/
  tags:
    - vshell_install

- name: Decompression de Nagios vShell Interface
  unarchive:
    src: /tmp/nagiosvshell-2.0.0-416.tar.gz
    dest: /tmp/
    remote_src: yes
  tags:
    - vshell_install

Configuration de vshell

Nous pousserons sur le serveur distant notre configuration de vshell qui se trouve dans le fichier config.php

Voici mon fichier de config :

<?php

## Custom values 
#
# Add any custom values here. If a value is empty, the default value defined 
# below is used. 

$custom = array(
	'targetdir'       => '',
	'apacheconfdir'   => '',
	'apacheconffile'  => '',
	'apacheuser'      => '',
	'apachegroup'     => '',
	'etc_conf'        => '',
	'htpasswd_file'   => '',
	# See config/vshell.conf for explanations of each value
	'vshell_baseurl'  => '',
	'TTL'             => '',
	'update_interval' => '',
	'nagios_coreurl'  => '',
	'lang'            => '',
);

## Default values
#
# Do not edit these defaults

$defaults = array();

$defaults['debian'] = array(
	'targetdir'       => '/usr/local/vshell2',
	'apacheconfdir'   => '/etc/apache2/sites-enabled',
	'apacheconffile'  => 'vshell2.conf',
	'apacheuser'      => 'www-data',
	'apachegroup'     => 'www-data',
	'etc_conf'        => 'vshell2.conf',
	'htpasswd_file'   => '/etc/nagios/htpasswd.users',
	'vshell_baseurl'  => 'vshell2',
	'nagios_coreurl'  => 'nagios',
	'TTL'             => '90',
	'update_interval' => '90',
	'lang'            => 'en_GB',
);

$defaults['redhat'] = array(
	'targetdir'       => '/usr/local/vshell2',
	'apacheconfdir'   => '/etc/httpd/conf.d',
	'apacheconffile'  => 'vshell2.conf',
	'apacheuser'      => 'apache',
	'apachegroup'     => 'apache',
	'etc_conf'        => 'vshell2.conf',
	'htpasswd_file'   => '/etc/nagios/passwd',
	'vshell_baseurl'  => 'vshell2',
	'nagios_coreurl'  => 'nagios',
	'TTL'             => '90',
	'update_interval' => '90',
	'lang'            => 'en_GB',
);

## Create defintions
#
# Determine the OS family, merge custom values with defaults,
# and create PHP definitions for each key.

$default_values = $defaults[get_os_family()];
$custom_values = array_filter($custom);
$config = array_merge($default_values, $custom_values);

create_definitions($config);

## Helper functions

function get_os_family(){
    # Simple check, default to redhat
    $output = system('test -s /etc/debian_version && echo "Debian"');
    return ($output == 'Debian') ? 'debian' : 'redhat';
}

function create_definitions($values){
	foreach($values as $key => $value){
		$key = strtoupper($key);
		define($key, $value);
	}
}

// End of file install-config.php

Pour déployer ce fichier qui se trouve dans mon répertoire files à la racine de mon rôle Ansible, j’utilise le module copy.

- name: Configuration de vShell
  copy:
    src: config.php
    dest: /tmp/nagiosvshell-2.0.0-416/
  tags:
    - vshell_install

Script d’installation

Vshell nous fournit un script PHP d’installation qui configure Apache. Pour une raison que j’ignore, j’ai dû modifier ma configuration du virtual-host car j’avais une erreur 500. J’ai repris la configuration de base que j’ai pu trouver sur le repo officiel.

Pour exécuter le script :

- name: Changement des permissions install.php
  file:
    path: /tmp/nagiosvshell-2.0.0-416/install.php
    owner: root
    group: root
    mode: "0770"
  tags:
    - vshell_install

- name: Execution du script d'installation vShell
  shell: 
    cmd: /usr/bin/php7.0 install.php
    chdir: /tmp/nagiosvshell-2.0.0-416/ 
  tags:
    - vshell_install

Pour reconfigurer Apache (avec le fichier vshell2.conf dans files) :

- name: Configuration Apache pour vshell2
  copy:
    src: vshell2.conf
    dest: /etc/apache2/sites-enabled/vshell2.conf
    owner: root
    group: root
    mode: "u=rw,g=r,o=r"
  tags:
    - vshell_install

Redémarrage d’Apache

- name: Redemarrage du service apache2
  service: name="apache2" state="restarted" enabled="yes"
  tags:
    - vshell_install

Téléchargement du rôle

Mon rôle d’installation de cette solution de supervision est disponible sur mon profil Github à cette adresse : https://github.com/geomtech/gt.infra.nagios/

Conclusion

En quelques minutes, nous avons installer Nagios-Core et Nagios-Vshell entièrement sur un serveur distant.

Si nous avions un soucis avec notre serveur actuel, nous pourrons facilement en redéployer un nouveau.

Interface de Nagios
Interface vshell2 pour Nagios

Alexy DA CRUZ

Administrateur systèmes depuis maintenant plus d'un an. Passionné par le développement, j'écris des articles sur mon portfolio.

2 commentaires

Brianfuh · 3 avril 2020 à 15 h 35 min

Great website! It looks really good! Sustain the good work!

JamesDof · 23 avril 2020 à 6 h 36 min

Simply wished to express I’m just thrilled that i came on your webpage.

Répondre à Brianfuh Annuler la réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *