Notifications Slack pour Redmine, Gitlab, Jenkins et Centreon

Mise en place de notifications dans Slack pour Redmine, Gitlab, Jenkins et Centreon

Publié le 11/01/2016

On dispose d'un SI pour la création de d'applications web basé sur les composants suivants :

  • - Redmine : Gestion projet
  • - Gitlab : Intégration et déploiement continu
  • - Jenkins : Test fonctionnel
  • - Centreon : Supervision

Chaque éléments du SI va générer un certains nombre de notifications par mails qui vont encombrer nos boites mails. Aussi les notifications par email disposent d'un délais de transmission inférieur à une solution push.

Slack va nous fournir sous la forme d'un service en ligne, un espace collaboratif sous la forme d'un chat auquel on va pouvoir rattacher les flux de nos outils. Ces derniers vont pouvoir pousser leurs notifications dans le chat.

Ainsi les notifications des outils Redmine, Gitlab et Centreon seront paramètrées pour arriver un channel de notre espace de travail Slack.

Installation et paramétrage pour Redmine

Paramétrage de la VM Redmine

Installation de git :

apt-get install git

Téléchargement du plugin :


cd /opt/redmine/plugins
git clone https://github.com/sciyoshi/redmine-slack.git redmine_slack

Installation de la dépendance httpclient :


cd redmine_slack
gem install httpclient
bundle install

Migration des plugins :

rake redmine:plugins:migrate RAILS_ENV=production

Création d'un webhook dans l'admin de slack

A l'adresse : slack.com/apps

On va dans "Configure", puis dans l'onglet "Custom Integrations" on clique sur "Incoming WebHooks", puis "Add Configuration"'. On récupère l'url du webhook pour allez la coller dans la configuration de Redmine.

Configuration du webhook dans l'admin Redmine :

Dans l'interface d'admin de redmine, allez dans "Administration", puis "Plugins" et cliquer sur "Configurer". Coller le webhook dans le champs "Slack URL" et indiquer votre channel (#general par défaut).

Installation et paramétrage pour Gitlab

Création d'un webhook dans l'admin de slack

Gitlab fourni en standard un connecteur vers l'API de slack.

On va récupérer l'adresse du webhook dans l'admin de slack :

A l'adresse : slack.com/apps

On va dans "Configure", puis dans l'onglet "Custom Integrations" on clique sur "Incoming WebHooks", puis "Add Configuration"'.

On choisi le post channel dans lequel on veut que nos alertes arrivent. Puis on copie l'url du WebHook et enregistre.

Paramétrage de la VM Gitlab

Dans l'interface d'administration de Gitlab, allez dans le projet que vous souhaité configurer et dans le volet de gauche cliquer sur "Settings", puis "Services". Dans la liste cliquer sur "Slack" et configurer les paramètres suivants :

Cocher la case "Active"

Choisir les événements à pousser dans slack dans "Trigger".


Webhook : WEBHOOK_URL
Username : Gitlabs
Channel : #general

Installation et paramétrage pour Jenkins

Création d'un webhook dans l'admin de slack

Une fois connecté à notre compte slack dans le navigateur, on va aller à l'url suivante : slack.com/apps

Dans le champs de recherche tapper : "Jenkins CI"

Cliquer sur "Configure", puis "Add Configuration" et remplir comme suit :

  • - Choisir le post channel dans lequel apparaitront les alertes. Ici on choisir "#general".
  • - Copier le token pour l'ajouter par la suite dans la configuration de Jenkins.

Cliquer sur "Save Settings".

Paramétrage de la VM Jenkins

Dans Jenkins on va aller dans le volet de gauche et cliquer dur "Administrer Jenkins", puis "Gestion des plugins". On clique ensuite sur l'onglet "Disponible" et dans le filtre on va ajouter :

Slack Notification Plugin

Puis on installer le plugins et redémarre Jenkins.

On retourne dans "Administrer Jenkins", puis on clique sur "Configurer le système". Dans la section "Global Slack Notifier Settings", configurer comme suit :


Team Domain : votre_team
Integration Token : TOKEN
Channel:
Build Server URL : /

On enregistre la configuration en cliquant sur "Enregistrer".

On va aller ensuite dans la configuration d'un projet et le configurer pour pousser ses événements dans Slack.

Selection du projet, cliquer sur "Configurer" et dans la section Slack Notifications, activer les notifications désirées. Cliquer sur "Avancé" et configurer de nouveau l'accès à l'API de Slack :


Team Domain : votre_team
Integration Token : TOKEN
Project Channel: #general

Installation et paramétrage pour Centreon

Création d'un webhook dans l'admin de slack

Créer un nouveau webhook dans Slack : slack.com/apps

On va dans "Configure", puis dans l'onglet "Custom Integrations" on clique sur "Incoming WebHooks", puis "Add Configuration"'.

On choisit le post channel dans lequel on veut que nos alertes arrivent. Puis on copie l'url du WebHook et on enregistre.

Paramétrage sur la VM Centreon :

Télécharger le plugins pour Centreon à l'adresse suivante : github.com/Shini31/centreon-notifications

Décompresser l'archive et copier le contenu du dossier slack dans le dossier /usr/lib/nagios/plugins/ :


unzip centreon-notifications-master.zip
cp centreon-notifications-master/slack/* /usr/lib/nagios/plugins/

Rendre les fichiers exécutables :


chmod +x /usr/lib/nagios/plugins/host-slack.pl
chmod +x /usr/lib/nagios/plugins/service-slack.pl

Donner les droits pour l'utilisateur centreon-engine :


chown /usr/lib/nagios/plugins/centreon-engine host-slack.pl
chown /usr/lib/nagios/plugins/centreon-engine service-slack.pl

Dans les scripts modifier les variables suivantes :

  • $centreon_url : URL du serveur Centreon ( eg. https://centreon.foo.bar:8081 )
  • $slack_posturl : URL du webhook ( eg. https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX )
  • $slack_channel : #general
  • $slack_username : Centreon

Installation des dépendances perl pour le plugin : LWP::UserAgent, JSON, Getopt::Long et HTTP::Request::Common :


yum install 'perl(CGI)' 'perl(LWP::UserAgent)'
yum install 'perl(CGI)' 'perl(JSON)'
yum install 'perl(CGI)' 'perl(Getopt::Long)'
yum install 'perl(CGI)' 'perl(HTTP::Request::Common)'
yum install 'perl(CGI)' 'perl(LWP::Protocol::https)'
yum install perl-Crypt-SSLeay

Test du plugin host :


cd /usr/lib/nagios/plugins/
perl /usr/lib/nagios/plugins/host-slack.pl --host="bu-srv.fresh.local" --state="OK" --address="192.168.0.110" --channel="#general"

Pour un éventuel débug lors des test, voici le fichier de log à inspecter :

 tail -f /var/log/centreon-engine/centengine.log 

Dans l'interface de Centreon, allez dans "Configuration", puis "Commands", puis "Notifications" et cliquer sur "Add".

Créer deux nouvelles commandes de notification, host-notify-by-slack et service-notify-by-slack.

host-notify-by-slack :


perl /usr/lib/nagios/plugins/host-slack.pl --host="$HOSTNAME$" --state="$HOSTSTATE$" --address="$HOSTADDRESS$" --channel="#general"

service-notify-by-slack :


perl /usr/lib/nagios/plugins/service-slack.pl --host="$HOSTNAME$" --address="$HOSTADDRESS$" --output="$SERVICEOUTPUT$" --service="$SERVICEDESC$" --state="$SERVICESTATE$" --channel="#general"

Dans le menu Configuration > Users > Contact / Users, ajouter les notifications slack pour les utilisateurs de votre choix et supprimer les notifications par email :

Dans la section Notification :

Enable Notifications : yes

Dans la section Host :

  • Host Notification Options : Down, Unreachable, Recovery, Flapping
  • Host Notification Period : 24x7
  • Host Notification Commands : host-notify-by-slack

Dans la section Service :

  • Service Notification Options : Down, Unreachable, Recovery, Flapping
  • Service Notification Period : 24x7
  • Service Notification Commands : service-notify-by-slack

Dans l'onglet "Centreon Authenfication", ajouter et confirmer le mot de passe, puis ajouter le droit "ALL" dans la section "Access list groups". Enregistrer.

Redémarrer le poller dans le menu > Configuration > Pollers > Actions "Général configuration" (le logo avec la roue crantée dans la liste).

Sélectionner "Generate Configuration Files" et "Generate Configuration Files", cliquer sur "Export".

Décocher le cases sélectionnées et cocher "Move Export Files" et " Restart Monitoring Engine" en choisissant la méthode "Restart".