# Monitoring-ng (a.k.a. Monitoring-v3) Outil de monitoring de serveur * Tourne sur le serveur a monitorer * Appelé par argus * Peut être utilisé dans un environnement light avec : [PHP-5.4 Web Server](https://wiki.euro-web.fr/PHP-5.4_Web_Server) ## Fonctionnement ### Fichiers Le monitoring est repartit sur plusieurs fichiers: * **tests_sdfrance.php**: fichier principal, qui est appelé par argus * **testsdf_config.php**: le fichier de configuration * **sdf-raid-{megacli,sas2ircu,tw_cli,mpt,areca}.pl**: scripts pour tester le raid * **sdf-monitoring.cron.php**: script appelé par cron pour les tests que l'on ne veut faire qu'une fois par heure ### URL de monitoring L'url de monitoring peut marcher en 3 modes: * **srvXXX.sd-france.net/tests_sdfrance.php**: uniquement les tests qui sont fatals en cas d'erreur * **srvXXX.sd-france.net/tests_sdfrance.php?warning=yes**: uniquement les tests non fatals * **srvXXX.sd-france.net/tests_sdfrance.php?warning=hard**: renvoie un code de succès sans faire aucun tests ### Liste des tests * ipfailover (ancienne syntaxe) * mustlisten (ancienne syntaxe) * checkmounts (ancienne syntaxe) * diskfree (warning=yes only) * dns * glsa (cron) * io * kernel * load (warning=yes only) * mail * memory (warning=yes only) * mysql * raid (cron) * smart (cron, warning=yes only) * supervise (cron) * time ### Zenexity features Fonctionnalité pour zenexity (ne marche que si *$disabling\_by\_file = TRUE;* dans la configuration): Si le fichier **/home/sdfrance/www/disable-monitoring** existe, tests_sdfrance.php renvois directement **SDF200802SUCCES** On peux tester si c'est le cas avec l'url: **srvXXX.sd-france.net/tests_sdfrance.php?test** ## Installation ### Requis * PHP en cli * smartmontools, megacli, sas2ircu, tw_cli (optionnels, au besoin) * perl * un cron qui gère /etc/cron.hourly * un apache configuré pour faire pointer srvXXX.sdfrance.net/tests_sdfrance.php et srvXXX.sdfrance.net/glsa.html aux bons endroits ### Megacli * 64Bits wget blog.yacoubi.fr/public/Dell/MegaCli-8.02.16_x86_64.tar.bz2 && tar xvjpf MegaCli-8.02.16_x86_64.tar.bz2 && mv MegaCli64 /usr/sbin/megacli && mv libsysfs.so.2.0.2 /lib64/ && rm MegaCli-8.02.16_x86_64.tar.bz2 * 32Bits wget blog.yacoubi.fr/public/Dell/MegaCli-8.02.16_x86.tar.bz2 && tar xvjpf MegaCli-8.02.16_x86.tar.bz2 && mv MegaCli /usr/sbin/megacli && mv libsysfs.so.2.0.2 /lib/ && rm MegaCli-8.02.16_x86.tar.bz2 ### Copie de fichiers Assurez vous que *MON_BASEDIR* est correct avant de copier/coller aveuglement export MON_BASEDIR="/home/sdfrance/www" export MON_USER="sdfrance" export MON_GROUP="users"

    mkdir -p "$MON_BASEDIR"

    if [ -e "$MON_BASEDIR/tests_sdfrance.php" ]; then mv "$MON_BASEDIR/tests_sdfrance.php" "$MON_BASEDIR/tests_sdfrance.php.old"; fi
    if [ -e "$MON_BASEDIR/testsdf_config.php" ]; then mv "$MON_BASEDIR/testsdf_config.php" "$MON_BASEDIR/testsdf_config.php.old"; fi

    for i in guess.pl sdf-raid-megacli.pl sdf-raid-sas2ircu.pl sdf-raid-tw_cli.pl sdf-raid-mpt.pl sdf-raid-areca.pl tests_sdfrance.php testsdf_config.php;
    do wget -nv http://stash.hegerys.com/projects/MONIT/repos/monitoring-ng/browse/"$i"?raw -P "$MON_BASEDIR" -O "$MON_BASEDIR/$i"; done

    chown -R "$MON_USER:$MON_GROUP" "$MON_BASEDIR"
    chmod 755 "$MON_BASEDIR"/tests_sdfrance.php "$MON_BASEDIR"/*.pl

    wget http://stash.hegerys.com/projects/MONIT/repos/monitoring-ng/browse/sdf-monitoring.cron.php?raw -P /etc/cron.hourly -O /etc/cron.hourly/sdf-monitoring.cron.php
    chmod 755 /etc/cron.hourly/sdf-monitoring.cron.php

### Configuration
Le fichier de configuration est **testsdf_config.php**, c'est le *seul* fichier que vous devez modifier

La seule exception à cette regle est si $MON\_BASEDIR n'est ni /var/lib/sdfrance, ni /home/sdfrance/www, ni /var/www  
Dans ce cas vous devez l'ajouter au début de /etc/cron.hourly/sdf-monitoring.cron.php  
Attention: il faut que $MON\_BASEDIR soit égal au $basepath de testsdf_config.php !

#### guess.pl
Ce script sert à générer une configuration de départ à partir de ce qui est actuellement présent  
Il suffit de lancer le script et il génère la configuration sur stdout, que vous pouvez alors rediriger vers testsdf\_config.php

    cd "$MON_BASEDIR"
    ./guess.pl > testsdf_config.php
    # Merci de penser à monitorer "/" et abaisser les seuils d'alertes d'espace disque à 80%

* Tests qu'il détecte automatiquement et active : mustlisten, checkmounts, diskfree, io, smart, supervise
* Tests qu'il ne détecte pas automatiquement et désactive : ipfailover, mysql, raid
* Tests non détectables qu'il active par défaut : dns, glsa, kernel, load, mail, memory, time

#### RAID
Chacun des 5 scripts prend en argument la liste des périphériques à tester, les teste et sort le résultat sur stdout  
Ils sont complément passif et n'écrivent nul part, ils peuvent donc être lancé en console sans risque d'interférer avec le monitoring

Les arguments sont de type **c0:p1** pour tw_cli, et **c0:e1:s1** pour megacli et sas2ircu, cela correspond aux **c**ontrollers, **p**orts, **e**nclosures et **s**lots  
Exemple: c0:e1:s1 = controller 0, enclosure 1, slot1

Heureusement le script peut vous donner ces valeurs !  
A chaque fois qu'il trouve un périphérique non demandé en argument, il fail et donne l'argument correspondant  
Il suffit alors de rajouter l'argument et de le relancer, et ainsi de suite jusqu'à ce qu'il dise OKRAID

Exemple concret:

    # ./sdf-raid-tw_cli.pl
    Controller #0, Port #1 exists but was not requested ( add 'c0:p1' )
    FAILRAID
    # ./sdf-raid-tw_cli.pl c0:p1
    Controller #0, Port #0 exists but was not requested ( add 'c0:p0' )
    FAILRAID
    # ./sdf-raid-tw_cli.pl c0:p1 c0:p0
    OKRAID

Il faut ensuite recopier la liste des arguments dans la configuration (voir exemples dans la config)

Attention:
* Pour megacli, il faut que la commande s'appelle *megacli* et soit dans le PATH de root
* Pour sas2ircu, il faut que la commande s'appelle *sas2ircu* et soit dans le PATH de root
Si ça n'est pas possible, il faut éditer le script raid correspondant, il y a une variable tout au début pour cela

### Fin de l'installation
Vous devez lancer /etc/cron.hourly/sdf-monitoring.cron.php à la main (en root) 1 fois pour qu'il crée des fichiers dont tests_sdfrance.php à besoin

Et voila, le monitoring est installé


## Fonctionnement en ligne de commande
Vous pouvez lancer les scripts directement en ligne de commande pour vérifier si tout marche bien, ou voir pourquoi ça ne marche pas

### tests_sdfrance.php
Il faut **impérativement** le lancer avec le user qu'utiliserais apache !

    setuidgid $MON_USER php tests_sdfrance.php

On peut aussi lui donner un argument pour émuler les options de l'url

    setuidgid $MON_USER php tests_sdfrance.php warnings=yes
    setuidgid $MON_USER php tests_sdfrance.php warnings=hard
    setuidgid $MON_USER php tests_sdfrance.php test


### /etc/cron.hourly/sdf-monitoring.cron.php
Il faut **imperativement** le lancer en **root**  
Il donne les fichiers qu'il écrit et leur contenu pour faciliter le debug, exemple:

    # /etc/cron.hourly/sdf-monitoring.cron.php
    /home/sdfrance/www/glsa.html: GLSASDFOK
    /var/run/sdf-supervise: OK

Vous pouvez aussi le lancer à la main pour forcer une update des tests cron


## Extra Tests
### Monitoring_-_php-fpm

    // php-fpm monitoring trought nginx
    $uris = array('http://127.0.0.1:80/php-fpm_owncloud_ping', 'http://127.0.0.1:80/php-fpm_mysqlblv_ping');
    foreach($uris AS $uri)
    {
        $res = @file_get_contents($uri);
        if( ($res === FALSE ) || ($res != 'pong') ) die('nginx or a php-fpm instance is down : ' . $uri);
    }

dans nginx :

    location ~ ^/php-fpm_mysqlblv_(ping|status)$ {

    include fastcgi.conf;
    fastcgi_param PATH_INFO $path_info;
    fastcgi_pass 127.0.0.1:9001;
    }

 dans php-fpm.conf

    pm.status_path = /php-fpm_owncloud_status

    ping.path = /php-fpm_owncloud_ping
    ping.response = pong