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.