Observium : Une interface évoluée pour Collectd

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search
Observium

1 Introduction

Observium est un outil de supervision orienté graphique tel que Munin. L'avantage de cette solution est qu'elle gère les graphiques RRD de Collectd.

Vu qu'aujourd'hui, une interface graphique performante est vraiment quelque chose qui manque à Collectd, il était dommage d'avoir une solution aussi performante sans interface à sa hauteur. C'est pourquoi après plusieurs recherches, j'ai fini par tomber sur Observium qui réponds à ce besoin.

2 Installation

2.1 Prérequis

Nous allons utiliser une Debian 6 pour ce tuto. Voici la liste des packages requis (utilisez les ports non-free pour le package snmp-mibs-downloader) :

Command aptitude
aptitude install libapache2-mod-php5 php5-cli php5-mysql php5-gd php5-snmp php-pear snmp graphviz subversion mysql-server mysql-client rrdtool fping imagemagick whois mtr-tiny nmap ipmitool snmp-mibs-downloader php-net-ipv4

Puis nous allons installer une librairie php ipv6 nécessaire qui n'est malheureusement pas packagée :

Command pear
pear install Net_IPv6

2.2 Observium

Nous allons maintenant télécharger et décompresser observium, puis créer quelques dossiers nécessaires :

Command
cd /var/www/
wget http://www.observium.org/observium-latest.tar.gz
tar -xzf observium-latest.tar.gz
rm -f observium-latest.tar.gz
cd /var/www/observium
mkdir graphs rrd
chown -Rf www-data. .

Nous créons un fichier de configuration basique :

Command cp
cp config.php.default config.php

2.3 MySQL

Passons à la base de données. Il va falloir la créer avec un utilisateur (n'oubliez pas de remplacer le password) :

Command mysql
> mysql -uroot -p
mysql> CREATE DATABASE observium;
mysql> GRANT ALL PRIVILEGES ON observium.* TO 'observium'@'localhost' IDENTIFIED BY '<password>';
mysql> flush privileges;

Changeons dans le fichier de configuration la localisation d'Observium, ajoutons une entrée pour fping et modifions les champs SQL pour les adapter avec les bonnes données :

Configuration File /var/www/observium/config.php
<?php
 
## Have a look in defaults.inc.php for examples of settings you can set here. DO NOT EDIT defaults.inc.php!
 
### Database config
$config['db_host'] = "localhost";
$config['db_user'] = "USERNAME";$config['db_pass'] = "PASSWORD";$config['db_name'] = "observium";
 
### Locations
$config['fping'] = "/usr/bin/fping";$config['install_dir']  = "/var/www/observium";...

Ensuite, nous allons importer le schema pour la construction de la base :

Command mysql
mysql -uobservium -p observium < database-schema.sql

Et nous allons updater la base avec quelques mises à jour :

Command
scripts/update-sql.php database-update-pre1000.sql
scripts/update-sql.php database-update-pre1435.sql
scripts/update-sql.php database-update-pre2245.sql
scripts/update-sql.php database-update.sql

2.4 Apache

Puis nous allons créer la configuration apache pour ce nouveau site (n'oubliez pas de faire l'enregistrement dns) :

Configuration File /etc/apache2/sites-available/observium
<VirtualHost *:80>
    DocumentRoot /var/www/observium/html/
    ServerName  observium.deimos.fr    CustomLog /var/log/apache2/access.log combined
    ErrorLog /var/log/apache2/error.log
    <Directory "/var/www/observium/html/">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>

Puis on active cette nouvelle configuration, on s'assure que le module rewrite est bien actif et on reload apache :

Command a2ensite
a2enmod rewrite
a2ensite observium
/etc/init.d/apache2 reload

2.5 SNMP

Pour le SNMP, nous allons éditer le fichier de configuration pour lui ajouter une ligne contenant des informations sur les mibs :

Configuration File /etc/snmp/snmp.conf
#
# As the snmp packages come without MIB files due to license reasons, loading
# of MIBs is disabled by default. If you added the MIBs you can reenable
# loaging them by commenting out the following line.
# mibs :mibdirs /var/www/observium/mibs

2.6 Contrab

Il va vous falloir créer un utilisateur admin par exemple et ajouter un host avant d'initialiser et récupérer les premières données.

Une fois fait, on lance pour la première fois la moulinette :

Command
./discovery.php -h all
./poller.php -h all

Et enfin on créer un fichier de cron pour ce service :

Configuration File /etc/cron.d/observium
33 */6 * * *   root    cd /var/www/observium/ && ./discovery.php -h all >> /dev/null 2>&1
*/5 * * * *   root    cd /var/www/observium/ && ./discovery.php -h new >> /dev/null 2>&1
*/5 * * * *   root    cd /var/www/observium/ && ./poller.php -h all >> /dev/null 2>&1

Et enfin, on reload le service :

Command
/etc/init.d/cron reload

3 Configuration

3.1 Ajouter un utilisateur

Ceci est normalement uniquement pour l'admin. Ensuite il est préférable d'avoir un backend en LDAP :

Command
/var/www/observium/adduser.php <username> <password> 10

  • 10 : C'est le niveau de droits allant de 0 à 10 (10 étant admin).

3.2 Ajouter une machine à surveiller

Voici comment rajouter une machine pour la monitorer en SNMP :

Command addhost.php
/var/www/observium/addhost.php <hostname> <community> v2c

Voici un exemple :

Command addhost.php
> /var/www/observium/addhost.php localhost public v2c
Created host : localhost (id:1) (os:linux)

3.3 Collectd

Si vous souhaitez ajouter Collectd à vos graphs de serveurs, c'est possible. Il vous faut pour cela éditer la configuration du serveur et rajouter ceci :

Configuration File config.php
...
### Locations
$config['collectd_dir'] = '/var/lib/collectd/rrd';
...

Côté client, il faut s'assurer que la variable Hostname soit correctement configurée, comme par exemple :

Configuration File
Hostname "localhost"

Tous les serveurs existants dans collectd doivent exister sur Observium. C'est pour cela que nous allons ajouter automatiquement toutes les machines :

Command addhost.php
cd /var/lib/collectd/rrd/ ; for i in * ; do /var/www/observium/addhost.php $i lookullink v2c ; done

3.3.1 Hack hostname en majuscule

J'ai beau avoir contacté les dev d'Obervium, vous aurez des soucis si vous voulez intégrer Collectd avec des hostnames ayant des noms avec des majuscules. En effet, du fait qu'il soit logique d'avoir des hostname en minuscule, ils se sont dit qu'ils ne géreraient pas les majuscules. Et si comme moi vos hostnames sous Collectd sont en majuscule, impossible alors de faire une intégration. J'ai chercher 1000 manières de contourner proprement ce problème et à chaque fois ça nécessitait de la réécriture de code et non de la configuration côté Collectd ou Observium.

Bref, j'ai donc fini par modifier le code, mais très très très légèrement. En fait je me suis simplement occupé du script de création d'host pour qu'il créer des liens symbolique (je sais c'est pas ultra propre) :

Configuration File addhost.php
#!/usr/bin/env php
<?php
 
/* Observium Network Management and Monitoring System
 * Copyright (C) 2006-2011, Observium Developers - http://www.observium.org
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * See COPYING for more details.
 */
 
include("includes/defaults.inc.php");
include("config.php");
include("includes/functions.php");
 
if (isset($argv[1]) && $argv[1])
{
  $host    = strtolower($argv[1]);
  $community = $argv[2];
  $snmpver   = strtolower($argv[3]);
  $host_upper = strtoupper($host);  $host_fullpath = $config['collectd_dir'] . '/' . $host;  $host_fullpath_upper = $config['collectd_dir'] . '/' . $host_upper; 
  if (is_numeric($argv[4]))
  {
    $port = $argv[4];
  }
  else
  {
    $port = 161;
  }
 
  if (@!$argv[5])
  {
    $transport = 'udp';
  }
  else
  {
    $transport = $argv[5];
  }
 
  if (!$snmpver) $snmpver = "v2c";
 
  if ($community)
  {
    unset($config['snmp']['community']);
    $config['snmp']['community'][] = $community;
  }
 
  addHost($host, $community, $snmpver, $port = '161', $transport = 'udp');
 
    # Add symlink to correct uppercase hostname problems    if (is_dir($host_fullpath) or is_link($host_fullpath))    {        exit(0);    }    elseif (is_dir($host_fullpath_upper))    {        symlink($host_fullpath_upper, $host_fullpath);    } 
} else { 
 
print Console_Color::convert("
Observium v".$config['version']." Add Host Tool
 
Usage: ./addhost.php <%Whostname%n> [community] [v1|v2c] [port] [" . join("|",$config['snmp']['transports']) . "]
 
%rRemeber to discover the host afterwards.%n
 
");
}
 
?>

4 Ressources

http://www.observium.org/wiki/Ubuntu_SVN_Installation
http://www.outsidaz.org/blog/2012/02/09/deploying-observium-on-rhel6-with-selinux/