Comment configurer Sensu Monitoring, RabbitMQ et Redis sur Ubuntu 14.04

introduction

Sensu est un outil de surveillance écrit en Ruby qui utilise RabbitMQ en tant que courtier de messages et Redis pour le stockage de données. Il est bien adapté à la surveillance des environnements en nuage.

Sensu connecte la sortie des scripts de «vérification» à des scripts de «gestionnaire» pour créer un système de surveillance et d’alerte robuste. Les scripts de vérification peuvent s’exécuter sur de nombreux nœuds et indiquer si une condition donnée est remplie, telle qu’Apache en cours d’exécution. Les scripts de gestionnaire peuvent prendre des mesures telles que l’envoi d’un courrier électronique d’alerte.

Les scripts «check» et les scripts «handler» s’exécutent sur le serveur maître Sensu, qui est chargé d’orchestrer les exécutions de contrôle sur les serveurs clients Sensu et de traiter les résultats. Si une vérification déclenche un événement, il est transmis au gestionnaire, qui effectuera une action spécifiée.

Un exemple de ceci est une vérification qui surveille le statut d’un serveur Web Apache. Le contrôle sera exécuté sur les clients Sensu. Si la vérification signale qu’un serveur est en panne, le serveur Sensu transmettra l’événement au gestionnaire, ce qui peut déclencher une action telle que l’envoi d’un courrier électronique ou la collecte de statistiques d’indisponibilité.

Dans ce didacticiel, nous allons installer et configurer un serveur maître Sensu et un serveur client Sensu.

Conditions préalables

Pour configurer Sensu, vous aurez besoin de:

  • Un noeud maître Droplet sous * Ubuntu 14.04 *. C’est le nœud que vous utiliserez pour afficher toutes les données de surveillance.

  • Au moins un nœud supplémentaire que vous souhaitez surveiller, exécutant * Ubuntu 14.04 *.

Créez un utilisateur sudo sur chaque droplet. Tout d’abord, créez l’utilisateur avec la commande, en remplaçant le nom d’utilisateur par le nom que vous souhaitez utiliser.

adduser

Cela créera l’utilisateur et le répertoire de base et le groupe appropriés. Vous serez invité à définir un mot de passe pour le nouvel utilisateur et à confirmer le mot de passe. Vous serez également invité à entrer les informations de l’utilisateur. Confirmez les informations utilisateur pour créer l’utilisateur.

Ensuite, accordez à l’utilisateur sudo les privilèges avec la commande + visudo +.

visudo

Cela ouvrira le fichier. Dans la section + Spécification des privilèges utilisateur +, ajoutez une autre ligne pour l’utilisateur créé afin qu’elle ressemble à ceci (avec votre nom d’utilisateur choisi à la place de):

# User privilege specification
root ALL=(ALL:ALL) ALL
ALL=(ALL:ALL) ALL

Enregistrez le fichier et basculez vers le nouvel utilisateur.

su -

Mettez à jour les packages système et mettez-les à niveau.

sudo apt-get update && sudo apt-get -y upgrade

Première étape - Installation sur le maître

Tout d’abord, nous allons configurer le serveur maître Sensu. Cela nécessite RabbitMQ, Redis, Sensu lui-même et le tableau de bord Uchiwa, ainsi que certains logiciels de support.

Ajoutez la source RabbitMQ à la liste de sources APT.

echo "deb http://www.rabbitmq.com/debian/ testing main" | sudo tee -a /etc/apt/sources.list.d/rabbitmq.list

Téléchargez et ajoutez la clé de signature pour RabbitMQ.

curl -L -o ~/rabbitmq-signing-key-public.asc http://www.rabbitmq.com/rabbitmq-signing-key-public.asc

sudo apt-key add ~/rabbitmq-signing-key-public.asc

Installez RabbitMQ et Erlang.

sudo apt-get update && sudo apt-get install -y rabbitmq-server erlang-nox

Le service RabbitMQ devrait démarrer automatiquement. Si ce n’est pas le cas, démarrez-le avec la commande suivante.

sudo service rabbitmq-server start

Sensu utilise SSL pour une communication sécurisée entre ses composants et RabbitMQ. Bien qu’il soit possible d’utiliser Sensu sans SSL, cela est fortement déconseillé. Pour générer des certificats, téléchargez le générateur de certificats de Sensu dans le répertoire et générez les certificats SSL.

cd /tmp && wget http://sensuapp.org/docs/0.13/tools/ssl_certs.tar && tar -xvf ssl_certs.tar

cd ssl_certs && ./ssl_certs.sh generate

Créez un répertoire SSL RabbitMQ et copiez les certificats.

sudo mkdir -p /etc/rabbitmq/ssl && sudo cp /tmp/ssl_certs/sensu_ca/cacert.pem /tmp/ssl_certs/server/cert.pem /tmp/ssl_certs/server/key.pem /etc/rabbitmq/ssl

Créez et éditez le fichier.

sudo vi /etc/rabbitmq/rabbitmq.config

Ajoutez les lignes suivantes au fichier. Ceci configure le port d’écoute SSL RabbitMQ pour qu’il écoute sur le port 5671 et utilise le certificat d’autorité de certification et de serveur généré. Il vérifiera également la connexion et échouera s’il n’y a pas de certificat.

[
   {rabbit, [
   {ssl_listeners, [5671]},
   {ssl_options, [{cacertfile,"/etc/rabbitmq/ssl/cacert.pem"},
                  {certfile,"/etc/rabbitmq/ssl/cert.pem"},
                  {keyfile,"/etc/rabbitmq/ssl/key.pem"},
                  {verify,verify_peer},
                  {fail_if_no_peer_cert,true}]}
 ]}
].

Redémarrez RabbitMQ.

sudo service rabbitmq-server restart

Créez un hôte virtuel RabbitMQ et un utilisateur pour Sensu. Changer le mot de passe (). Vous aurez besoin de ce mot de passe ultérieurement lorsque vous configurerez le serveur Sensu et les clients à surveiller.

sudo rabbitmqctl add_vhost /sensu
sudo rabbitmqctl add_user sensu
sudo rabbitmqctl set_permissions -p /sensu sensu ".*" ".*" ".*"

Installez Redis.

sudo apt-get -y install redis-server

Le service Redis devrait démarrer automatiquement. Si ce n’est pas le cas, démarrez-le avec la commande suivante. (Notez que si Redis est déjà en cours d’exécution, vous recevrez le message suivant: “Démarrage du serveur redis: échec.”)

sudo service redis-server start

Ajoutez les sources et les clés pour installer Sensu.

wget -q http://repos.sensuapp.org/apt/pubkey.gpg -O- | sudo apt-key add -

echo "deb     http://repos.sensuapp.org/apt sensu main" | sudo tee -a /etc/apt/sources.list.d/sensu.list

Installez Sensu et Uchiwa (Uchiwa est le tableau de bord de surveillance).

sudo apt-get update && sudo apt-get install -y sensu uchiwa

Sensu a besoin des informations de connexion sécurisée à RabbitMQ. Créez un répertoire SSL pour Sensu et copiez-le sur les certificats générés.

sudo mkdir -p /etc/sensu/ssl && sudo cp /tmp/ssl_certs/client/cert.pem /tmp/ssl_certs/client/key.pem /etc/sensu/ssl

Maintenant, tous les composants pour la surveillance Sensu sont installés.

Deuxième étape - Configuration sur le maître

Nous devons maintenant configurer Sensu. Nous allons créer des fichiers de configuration individuels dans le dossier pour en faciliter la lecture et la gestion. Si vous n’avez pas configuré les services et les composants mentionnés dans les fichiers de configuration sur des ordinateurs distincts, vous pouvez laisser la plupart des exemples de valeurs indiqués ci-dessous inchangés. Alternativement, /etc/sensu/config.json.example <^> est un autre exemple de fichier de configuration que vous pouvez copier et utiliser pour configurer Sensu.

Créez et éditez le fichier.

sudo vi /etc/sensu/conf.d/rabbitmq.json

Ajoutez les lignes suivantes, ce qui permettra à Redis de se connecter de manière sécurisée à l’instance RabbitMQ à l’aide de votre certificat SSL. Les * utilisateur * et * pass * devraient être ceux que vous avez définis pour l’hôte virtuel RabbitMQ.

{
 "rabbitmq": {
   "ssl": {
     "cert_chain_file": "/etc/sensu/ssl/cert.pem",
     "private_key_file": "/etc/sensu/ssl/key.pem"
   },
   "host": "localhost",
   "port": 5671,
   "vhost": "/sensu",
   "user": "",
   "password": ""
 }
}

Créez et éditez le fichier.

sudo vi /etc/sensu/conf.d/redis.json

Ajoutez les lignes suivantes, qui incluent les informations de connexion permettant à Sensu d’accéder à l’instance Redis.

{
 "redis": {
   "host": "localhost",
   "port": 6379
 }
}

Créez et éditez le fichier.

sudo vi /etc/sensu/conf.d/api.json

Ajoutez les lignes suivantes, qui incluent les informations de connexion permettant à Sensu d’accéder au service API.

{
 "api": {
   "host": "localhost",
   "port": 4567
 }
}

Créez et éditez le fichier.

sudo vi /etc/sensu/conf.d/uchiwa.json

Ajoutez les lignes suivantes. Celles-ci incluent les informations de connexion permettant au tableau de bord Uchiwa d’accéder à l’API Sensu. Vous pouvez éventuellement créer un nom d’utilisateur et un mot de passe dans le bloc pour l’authentification du tableau de bord. Si vous souhaitez que le tableau de bord soit accessible au public, laissez-le tel quel.

{
   "sensu": [
       {
           "name": "Sensu",
           "host": "localhost",
           "ssl": false,
           "port": 4567,
           "path": "",
           "timeout": 5000
       }
   ],
   "uchiwa": {
       "port": 3000,
       "stats": 10,
       "refresh": 10000
   }
}

Dans cet exemple, le serveur maître Sensu se surveillera lui-même en tant que client. Alors, créez et éditez le fichier.

sudo vi /etc/sensu/conf.d/client.json

Ajoutez les lignes suivantes et modifiez la valeur du client Sensu. C’est le nom du serveur que vous verrez dans le tableau de bord Uchiwa. * Le nom ne peut pas avoir d’espaces ou de caractères spéciaux. *

Vous pouvez laisser la valeur car nous surveillons ce serveur. Nous créerons ultérieurement un fichier similaire pour chaque hôte client à surveiller.

{
 "client": {
   "name": "",
   "address": "localhost",
   "subscriptions": [ "ALL" ]
 }
}

Activez le démarrage automatique des services Sensu.

sudo update-rc.d sensu-server defaults
sudo update-rc.d sensu-client defaults
sudo update-rc.d sensu-api defaults
sudo update-rc.d uchiwa defaults

Démarrer les services Sensu.

sudo service sensu-server start
sudo service sensu-client start
sudo service sensu-api start
sudo service uchiwa start

À ce stade, vous pouvez accéder à Sensu à l’adresse http: //: 3000.

image: https: //assets.digitalocean.com/articles/sensu/uchiwa-home.png [Tableau de bord par défaut de Sensu]

Troisième étape - Installation sur le client

Vous devrez installer Sensu sur chaque ordinateur client à surveiller.

Tout en restant * sur le serveur maître Sensu *, copiez les certificats SSL dans le dossier + / tmp du serveur client à l’aide de SCP. Remplacer et ci-dessous par l’utilisateur sudo et l’adresse IP du serveur client.

scp /tmp/ssl_certs/client/cert.pem /tmp/ssl_certs/client/key.pem @:/tmp
  • Sur le client * à surveiller, ajoutez la clé Sensu et la source.

wget -q http://repos.sensuapp.org/apt/pubkey.gpg -O- | sudo apt-key add -
echo "deb     http://repos.sensuapp.org/apt sensu main" | sudo tee -a /etc/apt/sources.list.d/sensu.list

Installez Sensu.

sudo apt-get update && sudo apt-get -y install sensu

Vous devez fournir au client les informations de connexion à RabbitMQ. Créez un répertoire SSL pour Sensu et copiez les certificats du dossier + / tmp + copiés à partir du serveur maître Sensu.

sudo mkdir -p /etc/sensu/ssl && sudo cp /tmp/cert.pem /tmp/key.pem /etc/sensu/ssl

Créez et éditez le fichier.

sudo vi /etc/sensu/conf.d/rabbitmq.json

Ajoutez les lignes suivantes. Modifiez la valeur pour utiliser l’adresse IP du serveur RabbitMQ. c’est-à-dire l’adresse IP du serveur maître Sensu. Les valeurs et doivent être celles que vous avez définies pour l’hôte virtuel RabbitMQ sur le serveur maître Sensu.

{
 "rabbitmq": {
   "ssl": {
     "cert_chain_file": "/etc/sensu/ssl/cert.pem",
     "private_key_file": "/etc/sensu/ssl/key.pem"
   },
   "host": "",
   "port": 5671,
   "vhost": "/sensu",
   "user": "",
   "password": ""
 }
}

Fournissez des informations de configuration pour ce serveur Sensu en créant et en modifiant le fichier.

sudo vi /etc/sensu/conf.d/client.json

Ajoutez les lignes suivantes. Vous devez modifier la valeur de la manière dont vous souhaitez que ce serveur soit appelé dans le tableau de bord Uchiwa. * Le nom ne peut pas avoir d’espaces ou de caractères spéciaux. *

Vous pouvez laisser la valeur définie sur, car nous surveillons ce serveur client Sensu.

{
 "client": {
   "name": "",
   "address": "",
   "subscriptions": [ "ALL" ]
 }
}

Activer et démarrer le client.

sudo update-rc.d sensu-client defaults

sudo service sensu-client start

Vous devriez maintenant voir le client sous l’onglet Clients du tableau de bord Sensu.

Quatrième étape - Configurer un chèque

Maintenant que Sensu est en cours d’exécution, nous devons ajouter une vérification sur les deux serveurs. Nous allons créer un script Ruby qui vérifiera si Apache est en cours d’exécution.

Si Apache n’est pas installé, installez-le maintenant sur le serveur maître Sensu et sur le serveur client Sensu.

sudo apt-get install -y apache2

Apache devrait être exécuté par défaut sur les deux serveurs.

Avant d’installer le gem sensu-plugin, assurez-vous de disposer de toutes les bibliothèques requises. Installez les bibliothèques Ruby et la bibliothèque essentielle à la construction sur le serveur maître Sensu et le serveur client Sensu.

sudo apt-get install -y ruby ruby-dev build-essential

Installez la gem sensu-plugin à la fois sur le serveur maître Sensu et sur le serveur client Sensu.

sudo gem install sensu-plugin

Créez un fichier dans le dossier des plugins Sensu et modifiez les autorisations de fichier sur le serveur maître Sensu et le serveur client Sensu.

sudo touch /etc/sensu/plugins/check-apache.rb && sudo chmod 755 /etc/sensu/plugins/check-apache.rb

Modifiez le fichier sur le serveur maître Sensu et sur le serveur client Sensu.

sudo vi /etc/sensu/plugins/check-apache.rb

Ajoutez les lignes suivantes, qui écrivent le processus de vérification d’Apache.

#!/usr/bin/env ruby

procs = `ps aux`
running = false
procs.each_line do |proc|
 running = true if proc.include?('apache2')
end
if running
 puts 'OK - Apache daemon is running'
 exit 0
else
 puts 'WARNING - Apache daemon is NOT running'
 exit 1
end

Créez et modifiez le fichier uniquement sur le serveur maître Sensu.

sudo vi /etc/sensu/conf.d/check_apache.json

Ajoutez les lignes suivantes qui exécuteront le script pour vérifier Apache toutes les 60 secondes.

{
 "checks": {
   "apache_check": {
     "command": "/etc/sensu/plugins/check-apache.rb",
     "interval": 60,
     "subscribers": [ "ALL" ]
   }
 }
}

Redémarrez le serveur Sensu et l’API sur le serveur maître Sensu.

sudo service sensu-server restart && sudo service sensu-api restart

Redémarrez le client Sensu sur le serveur client Sensu.

sudo service sensu-client restart

Au bout de quelques minutes, la vérification devrait apparaître dans l’onglet «Vérifications» du tableau de bord Sensu.

Arrêtez le service Apache sur l’un des deux serveurs pour vérifier que le script fonctionne.

sudo service apache2 stop

Une alerte devrait apparaître sur le tableau de bord * Events * après quelques minutes. Cliquez sur l’alerte pour afficher plus d’informations et prendre des mesures telles que la désactiver ou la résoudre.

Dans cette image, Apache a été arrêté sur le serveur client. Ceci est la page * Clients *.

image: https: //assets.digitalocean.com/articles/sensu/uchiwa-checks.png [Clients du tableau de bord Sensu]

Démarrez le service Apache pour arrêter les avertissements.

sudo service apache2 start

Cinquième étape - Configurer un gestionnaire

Les gestionnaires peuvent envoyer des courriels de notification ou des données à d’autres applications, telles que Graphite, en fonction d’événements. Ici, nous allons créer un gestionnaire qui envoie un courrier électronique en cas d’échec de la vérification Apache. Veuillez noter que votre serveur doit être configuré pour envoyer un courrier électronique. Vous pouvez utiliser ce Postfix Tutorial pour configurer un serveur de messagerie simple. (Vous souhaiterez peut-être que les messages soient envoyés à un utilisateur du serveur maître Sensu pour une configuration plus simple.)

Sur le serveur principal Sensu, créez et modifiez le fichier.

sudo vi /etc/sensu/conf.d/handler_email.json

Ajoutez les lignes suivantes en remplaçant par l’adresse électronique à laquelle vous souhaitez recevoir les notifications. En fonction de la configuration de votre serveur de messagerie, il peut s’avérer plus simple de définir un alias pour un utilisateur du serveur maître Sensu. Ce gestionnaire s’appelle «email» et utilisera l’utilitaire de messagerie pour envoyer un email d’alerte avec le sujet «événement sensu» à l’adresse email spécifiée.

{
 "handlers": {
   "email": {
     "type": "pipe",
     "command": "mail -s 'sensu event' "
   }
 }
}

Modifier le.

sudo vi /etc/sensu/conf.d/check_apache.json

Ajoutez la nouvelle ligne avec le gestionnaire dans le bloc.

{
 "checks": {
   "apache_check": {
     "command": "/etc/sensu/plugins/check-apache.rb",
     "interval": 60,
     "handlers": ["default", "email"],
     "subscribers": [ "ALL" ]
   }
 }
}

Redémarrez sensu-api et sensu-server.

sudo service sensu-api restart && sudo service sensu-server restart

Arrêtez à nouveau le service Apache pour tester l’alerte par courrier électronique. Vous devriez en avoir un toutes les 60 secondes.

sudo service apache2 stop

Votre email devrait ressembler un peu à ceci:

Return-Path: <sensu@sensu-master>
...
Subject: sensu event
To: <[email protected]>
...
From: sensu@sensu-master (Sensu Monitoring Framework)

{"id":"481c85c4-485d-4f25-b835-cea5aef02c69","client":{"name":"Sensu-Master-Server","address":"localhost","subscriptions":["ALL"],"version":"0.13.1","timestamp":1411681990},"check":{"command":"/etc/sensu/plugins/check-apache.rb","interval":60,"handlers":["default","email"],"subscribers":["ALL"],"name":"apache_check","issued":1411682001,"executed":1411682001,"duration":0.023,"output":"WARNING - Apache daemon is NOT running\n","status":1,"history":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","1"]},"occurrences":1,"action":"create"}

Redémarrez le service Apache pour ne plus recevoir d’alertes par courrier électronique.

sudo service apache2 start

Conclusion

Sensu est un outil de surveillance polyvalent avec ses plugins et les scripts personnalisés que vous pouvez écrire pour cela. Vous pouvez également créer des gestionnaires pour faire presque tout avec les données. Continuez à explorer pour le faire juste pour vous.