[Tuto] : Observium sur un environnement LEMP


Observium est un outil de monitoring, qui demande peu de configuration, de maintenance est assez light en ressource. Observium utilise principalement les traps SNMP pour récolté les informations, il est compatible avec la plupart des équipement réseaux, ainsi que des serveurs Unix, AIX, Windows,etc..
Observium existe aussi en version payante (~150€/an) qui intègres un système d'alerte, des mises à jours plus fréquente, ainsi qu'un support dédie.



La procédure d'installation suivante, se base sur Nginx+MySql sur un environnement debian, donc une installation de type LEMP est nécessaire 🙂.
De base Observium est pour apache2, d'ou le manque de documentation pour son déploiement sur nginx.

1. Installation des prérequis
apt update
apt install php5-fpm php5-cli php5-mysql php5-gd php5-mcrypt php5-json php-pear snmp fping mysql-client python-mysqldb rrdtool subversion whois mtr-tiny libvirt-bin ipmitool graphviz imagemagick
2. Télechargement d'observium
mkdir -p /opt/observium
wget -P /tmp wget http://www.observium.org/observium-community-latest.tar.gz
tar -zxvf /tmp/observium-community-latest.tar.gz
cp -R /tmp/observium/* /opt/observium/
3.Création de la base de données
mysql -u root -p
<mysql root password>
mysql> CREATE DATABASE observium DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql>CREATE USER 'observium'@'localhost' IDENTIFIED BY 'votremotdepasse';
mysql> GRANT ALL PRIVILEGES ON observium.* TO 'observium'@'localhost'
    -> IDENTIFIED BY 'votremotdepasse';
mysql>FLUSH PRIVILEGES;
mysql>EXIT;
si tout ce passe bien vous ne devriez pas avoir d'erreurs


4. Configuration D'Observium

changer les identifiants de votre base de données par rapport a la partie 3
cd /opt/observium
cp config.php.default config.php
nano config.php
et créer les dossiers dans /opt/observium
mkdir {logs,rrd}
chown www-data:www-data rrd
puis lancer ce script pour qu'il se configure :
php includes/update/update.php
5. Configuration Nginx :
nano /etc/nginx/sites-enabled/observium.conf
Vous pouvais tweaker la configuration au besoin
server {
  listen 80;
  server_name truc.bidule.com ou bidule.com;

  access_log /var/log/nginx/observium-access_log combined;
  error_log /var/log/nginx/observium-error_log warn;

  root /opt/observium/html;
  client_max_body_size 10m;
  client_body_buffer_size 8K;
  client_header_buffer_size 1k;
  large_client_header_buffers 4 8k;

  location / {
    index index.php index.html index.htm;
    autoindex on;
    try_files $uri $uri/ /index.php;

    location ~ \.php$ {
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      fastcgi_pass unix:/var/run/php5-fpm.sock;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
    }
  }
}
puis un petit coup de systemctl restart nginx
vérifier que la page est bien accessible.

6.Ajout d'utilisateurs

Observium supporte plusieurs mode d'authentification, LDAP, MySQL, html Auth.
je vais expliquer l’authentification par MySql, car c'est la méthode par défaut.
cd /observium
./adduser.php <pseudo> <motdepasse> 10
le numéro 10 correspond au niveau de l'utilisateur, 10 étant le plus haut.

7. Finition et ajout de devices

à partir de la Observium est fonctionnel, vous pouvez vous loguer, vous baladez, mais il manque les serveurs ou équipements à monitorer.

Dans un premier temps nous allons mettre en place les tâches crons :
crontab -e
33  */6   * * *       /opt/observium/discovery.php -h all >> /dev/null 2>&1
*/5 *     * * *       /opt/observium/discovery.php -h new >> /dev/null 2>&1
*/5 *     * * *       /opt/observium/poller-wrapper.py 2 >> /dev/null 2>&1
/opt/observium/poller-wrapper.py 2, 2 est le nombre de thread qui lancera, plus le nombres de serveurs est grand plus il faudra augmenter ce chiffre.


Dans un premier temps nous allons ajouter le serveur Observium dans les devices :
apt-get install snmpd xinetd nano

sed -e "/SNMPDOPTS=/ s/^#*/SNMPDOPTS='-Lsd -Lf \/dev\/null -u snmp -p \/var\/run\/snmpd.pid'\n#/" -i /etc/default/snmpd

cp /opt/observium/scripts/distro /usr/bin/distro
chmod 755 /usr/bin/distro

mv /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.org


nano /etc/snmp/snmpd.conf

et insérer le bloc suivant, en modifiant $SNMP_COMMUNITY par votre identifiant SNMP (par défaut c'est public, mais on peu mettre ce que vous voulez), $SYSLOCATION par l’adresse postale complète de l'emplacement du serveur, pour la MAP sur l’écran d’accueil, $SYSCONTACT par ce que vous voulez ça ne change pas grand chose ^^, en général c'est une adresse mail.

com2sec readonly  default         $SNMP_COMMUNITY
group MyROGroup v1         readonly
group MyROGroup v2c        readonly
group MyROGroup usm        readonly
view all    included  .1                               80
access MyROGroup ""      any       noauth    exact  all    none   none
syslocation $SYSLOCATION
syscontact $SYSCONTACT
#This line allows Observium to detect the host OS if the distro script is installed
extend .1.3.6.1.4.1.2021.7890.1 distro /usr/bin/distro
ensuite :
cp /opt/observium/scripts/observium_agent_xinetd /etc/xinetd.d/observium_agent

cp /opt/observium/scripts/observium_agent /usr/bin/observium_agent

mkdir -p /usr/lib/observium_agent/local

cp /opt/observium/scripts/agent-local/dpkg /usr/lib/observium_agent/local/

/etc/init.d/xinetd restart
/etc/init.d/snmpd restart 
Puis pour finir :
./add_device.php localhost public(ou l'identifiant SNMP choisie) v2c
et pour le mettre à jour directement :

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

à savoir qu'observium ne fonctionne qu'avec des nom dns, et pas d'ip, donc pour un serveurs qui n'est pas en DNS, il faudra au préalable l'ajouter dans /etc/hosts

Bonus :

Afin de facilité l'ajout de devices UNIX, j'ai fork un script plus vraiment à jour (que j'ai mis à jour) pour installer snmp et les outils d'Observium automatiquement.


il faut penser à changer les 3ieres variables !


# CONFIG
SNMP_COMMUNITY=public
SYSCONTACT=tonmail
SYSLOCATION=l'adresse du serveur
# CONFIG
SNMP_COMMUNITY=public
SYSCONTACT=tonmail
SYSLOCATION=l'adresse du serveur

# get packages
apt-get install snmpd xinetd nano

mkdir -p /opt/observium && cd /opt

wget [url]http://www.observium.org/observium-community-latest.tar.gz[/url]
tar zxvf observium-community-latest.tar.gz

sed -e "/SNMPDOPTS=/ s/^#*/SNMPDOPTS='-Lsd -Lf \/dev\/null -u snmp -p \/var\/run\/snmpd.pid'\n#/" -i /etc/default/snmpd

cp observium/scripts/distro /usr/bin/distro
chmod 755 /usr/bin/distro

mv /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.org
cat >/etc/snmp/snmpd.conf <<EOL
com2sec readonly  default         $SNMP_COMMUNITY
group MyROGroup v1         readonly
group MyROGroup v2c        readonly
group MyROGroup usm        readonly
view all    included  .1                               80
access MyROGroup ""      any       noauth    exact  all    none   none
syslocation $SYSLOCATION
syscontact $SYSCONTACT
#This line allows Observium to detect the host OS if the distro script is installed
extend .1.3.6.1.4.1.2021.7890.1 distro /usr/bin/distro 
EOL


cp observium/scripts/observium_agent_xinetd /etc/xinetd.d/observium_agent

# change "only_from" to match your observium server ip
nano /etc/xinetd.d/observium_agent

cp observium/scripts/observium_agent /usr/bin/observium_agent

mkdir -p /usr/lib/observium_agent/local

# copy all agent helper scripts that you want (bind, dpkg, freeradius, ksm, munin, mysql.cnf, ntpd, postfix_qshape, powerdns, rpm, shoutcast.conf, unbound, apache, crashplan, drbd, hddtemp, lmsensors, munin-scripts, nfs, nvidia-smi, postgresql.conf, powerdns-recursor, sabnzbd-qstatus, shoutcast.default.conf, vmwaretools, asterisk, dmi, exim-mailqueue.sh, ipmitool-sensor, memcached, mysql, nginx, postfix_mailgraph, postgresql.pl, raspberrypi, shoutcast, temperature)
# to make this work you have to enable the unix-agent module on your device's settings or globally in config.php ($config['poller_modules']['unix-agent'] = 1;)
#cp observium/scripts/agent-local/AGENTHELPER /usr/lib/observium_agent/local/
cp /opt/observium/scripts/agent-local/dpkg /usr/lib/observium_agent/local/

/etc/init.d/xinetd restart
/etc/init.d/snmpd restart
API de la map :

J'ai constaté que l'api Mapquest ne fonctionne pas très bien, donc pour que de base tout fonctionne, nous allons utilisé l'api google, pour cela
il faut ajouter
$config['geocoding']['api'] = 'google';
dans config.php, et au prochain poll de vos serveurs la map devrait fonctionner

Vous pouvez à présent profiter de pleins de graphs de fou et de statistiques de malades !
Si vous avez des questions, des suggestions, n'hésitez pas à m'en faire part sur le sujet de discussion.
Répondre…