FreeBSD : Shinken

Bonjour à tous,

Aujourd'hui un billet sur l'installation et la configuration (rapide) de Shinken sur une FreeBSD 12.

Il faut savoir qu'au moment où j'écris ce billet, Shinken est uniquement compatible python2.7.
Avant d'installer Shinken, certains paquets sont nécessaires :

pkg install py27-pip py27-pycurl py27-bottle nagios-plugins mongodb40

Un utilisateur dédié à Shinken est nécessaire :

pw adduser shinken
chsh -s /usr/local/bin/bash shinken

On peut maintenant effectuer l'installation de Shinken via pip :

pip install shinken pymongo bottle

L'installation de Shinken doit être initialisée, pour cela il faut passer au compte créé précédemment et lancer l'initialisation :

su - shinken
shinken --init

Cette initialisation va créer le fichier .shinken.ini (dans le dossier home de l'utilisateur) qui doit être modifié pour fonctionner correctement sous FreeBSD :

[paths]
# # set the paths according to your setup. defaults follow # the linux standard base
etc = /usr/local/etc/shinken
lib = /usr/local/libexec/shinken
share = %(lib)s/share
cli = %(lib)s/cli
packs = %(etc)s/packs
modules = %(lib)s/modules
doc = %(lib)s/doc
inventory = %(lib)s/inventory
libexec = %(lib)s/libexec

[shinken.io]
# options for connection to the shinken.io website.  # proxy: curl style, should look as http://user:password@server:3128 # api_key: useful for publishing packages or earn xp after each install. create an account at http://shinken.io and go to http://shinken.io/~
proxy =
api_key =

Il faut éditer deux lignes :

  • etc = le chemin d'origine est pour linux
  • lib = même problématique, chemin pour linux et pas FreeBSD

L'initialisation doit être relancée pour que tout soit en ordre.

Afin de pouvoir installer des modules à Shinken, un dossier doit être créé :

mkdir /usr/local/libexec/shinken/share

Le fichier /usr/local/libexec/shinken/resource.d/path.cfg contient les différentes variables utilisables au sein de Shinken dont celle concernant le dossier contenant les plugins. Le path de la variable NAGIOSPLUGINSDIR doit être changé de /usr/lib/nagios/plugins à /usr/local/libexec/nagios/.

Avant de pouvoir démarrer Shinken, il faut rajouter dans le fichier /etc/rc.conf les différents daemons :

shinken_arbiter_enable="YES"
shinken_broker_enable="YES"
shinken_poller_enable="YES"
shinken_reactionner_enable="YES"
shinken_receiver_enable="YES"
shinken_scheduler_enable="YES"

D'origine, les fichiers de configuration des daemons bind sur le localhost mais il est nécessaire d'éditer les fichiers dans /usr/local/etc/shinken/daemons pour confirmer ce paramétrage.

/usr/local/etc/rc.d/shinken-arbiter restart
/usr/local/etc/rc.d/shinken-broker restart
/usr/local/etc/rc.d/shinken-poller restart
/usr/local/etc/rc.d/shinken-reactionner restart
/usr/local/etc/rc.d/shinken-receiver restart
/usr/local/etc/rc.d/shinken-scheduler restart

Afin de bénéficier d'une IHM web, il est nécessaire d'installer des modules :

shinken install webui2
shinken install auth-cfg-password

Pour que le module webui2 soit pris en compte, il faut éditer le fichier /usr/local/etc/shinken/brokers/brokers-master.cfg et rajouter à la ligne module webui2.

Il est également nécessaire d'éditer le fichier /usr/local/etc/shinken/modules/webui2.cfg afin de pouvoir gérer les password et d'ajouter à la ligne module :

auth-cfg-password

Les lignes host et port doivent également être modifiés pour que le daemon écoute en local uniquement.

Depuis l'IHM webui2, il est possible que les utilisateurs déclarés configurent une homepage spécifique avec des widgets, pour cela il faut que la configuration soit stockée dans MongoDB. Le fichier /usr/local/etc/shinken/modules/webui2.cfg doit être modifié :

uri                        mongodb://localhost/?safe=false
database                   shinken

Avant de démarrer tous les daemons, il faut vérifier la configuration :

shinken-arbiter -v -c /usr/local/etc/shinken/shinken.cfg

Il est maintenant possible de démarrer les daemons dans de bonnes conditions :

/usr/local/etc/rc.d/shinken-arbiter start
/usr/local/etc/rc.d/shinken-broker start
/usr/local/etc/rc.d/shinken-poller start
/usr/local/etc/rc.d/shinken-reactionner start
/usr/local/etc/rc.d/shinken-receiver start
/usr/local/etc/rc.d/shinken-scheduler start

Pour vérifier que tout est en ordre, il faut voir si tous les ports nécessaires sont en écoutes :

sockstat -4l | grep shinken
shinken  python2.7  58144 9  tcp4   127.0.0.1:7767        *:*
shinken  python2.7  58143 4  tcp4   127.0.0.1:26122       *:*
shinken  python2.7  58142 4  tcp4   127.0.0.1:7768        *:*
shinken  python2.7  58132 4  tcp4   127.0.0.1:26119       *:*
shinken  python2.7  58131 4  tcp4   127.0.0.1:7773        *:*
shinken  python2.7  58121 4  tcp4   127.0.0.1:26114       *:*
shinken  python2.7  58120 4  tcp4   127.0.0.1:7769        *:*
shinken  python2.7  58114 4  tcp4   127.0.0.1:26109       *:*
shinken  python2.7  58113 4  tcp4   127.0.0.1:7771        *:*
shinken  python2.7  58109 4  tcp4   127.0.0.1:26102       *:*
shinken  python2.7  58106 4  tcp4   127.0.0.1:7772        *:*

Les ports principaux sont 7767, 7768, 7769, 7770, 7771 et 7772. Sans ceux-là, Shinken ne sera pas pleinement opérationnel.

Pour que l'IHM webui2 soit accessible depuis l'extérieur, j'ai configuré un virtual host nginx avec la configuration suivante (avec un certificat Let's Encrypt) :

server {
        listen   80;
        listen [::]:80 ipv6only=on;
        server_name     my.ndd.fr;

        location ^~ /.well-known/acme-challenge/ {
            #default_type "text/plain";
            #allow all;
            root /var/www/acme-challenge/;
        }

        return 301 https://$server_name$request_uri;

}

server {
        listen 443 ssl;
        listen [::]:443 ssl ipv6only=on;
        server_name     my.ndd.fr;

        if ($host = 'ndd.fr' ) {
                rewrite  ^/(.*)$  https://my.ndd.fr/$1  permanent;
        }

        access_log /var/log/nginx/shinken.access.log;
        error_log /var/log/nginx/shinken.error.log;

        include /usr/local/etc/nginx/ssl.conf;

        ssl_certificate /usr/local/etc/letsencrypt/live/my.ndd.fr/fullchain.pem;
        ssl_certificate_key /usr/local/etc/letsencrypt/live/my.ndd.fr/privkey.pem;

        location / {
                proxy_pass         http://127.0.0.1:7767;
        }
}

Le compte par défaut d'accès est défini dans /usr/local/etc/shinken/contacts/admin.cfg.

Have a nice day.