So konfigurieren Sie Sensu Monitoring, RabbitMQ und Redis unter Ubuntu 14.04

Einführung

Sensu ist ein in Ruby geschriebenes Überwachungstool, das RabbitMQ als Nachrichtenbroker und Redis zum Speichern von Daten verwendet. Es eignet sich gut zur Überwachung von Cloud-Umgebungen.

Sensu verbindet die Ausgabe von "Check" -Skripten mit "Handler" -Skripten, um ein robustes Überwachungs- und Warnsystem zu erstellen. Überprüfungsskripte können auf vielen Knoten ausgeführt werden und melden, ob eine bestimmte Bedingung erfüllt ist, beispielsweise, dass Apache ausgeführt wird. Handler-Skripte können Aktionen wie das Senden einer Benachrichtigungs-E-Mail ausführen.

Sowohl die "Check" -Skripte als auch die "Handler" -Skripte werden auf dem Sensu-Masterserver ausgeführt, der für die Orchestrierung der Überprüfungsausführungen zwischen den Sensu-Client-Servern und die Verarbeitung der Überprüfungsergebnisse verantwortlich ist. Wenn eine Prüfung ein Ereignis auslöst, wird es an den Handler übergeben, der eine bestimmte Aktion ausführt.

Ein Beispiel hierfür ist eine Überprüfung, die den Status eines Apache-Webservers überwacht. Die Prüfung wird auf den Sensu-Clients ausgeführt. Wenn bei der Überprüfung ein Server als nicht verfügbar gemeldet wird, leitet der Sensu-Server das Ereignis an den Handler weiter, wodurch eine Aktion wie das Senden einer E-Mail oder das Sammeln von Ausfallzeiten ausgelöst werden kann.

In diesem Tutorial werden wir einen Sensu Master Server und einen Sensu Client Server installieren und konfigurieren.

Voraussetzungen

Um Sensu einzurichten, benötigen Sie:

  • Ein Hauptknoten Droplet läuft * Ubuntu 14.04 *. Über diesen Knoten können Sie alle Überwachungsdaten anzeigen.

  • Mindestens ein zusätzlicher Knoten, den Sie überwachen möchten und auf dem * Ubuntu 14.04 * ausgeführt wird.

Erstellen Sie einen sudo-Benutzer für jedes Droplet. Erstellen Sie zunächst den Benutzer mit dem Befehl und ersetzen Sie den Benutzernamen durch den Namen, den Sie verwenden möchten.

adduser

Dadurch werden der Benutzer sowie das entsprechende Basisverzeichnis und die entsprechende Gruppe erstellt. Sie werden aufgefordert, ein Kennwort für den neuen Benutzer festzulegen und das Kennwort zu bestätigen. Sie werden außerdem aufgefordert, die Benutzerinformationen einzugeben. Bestätigen Sie die Benutzerinformationen, um den Benutzer zu erstellen.

Als nächstes gewähren Sie dem Benutzer sudo-Rechte mit dem Befehl + visudo +.

visudo

Dadurch wird die Datei geöffnet. Fügen Sie im Abschnitt "+ Benutzerberechtigungsspezifikation +" eine weitere Zeile für den erstellten Benutzer hinzu, damit diese so aussieht (mit Ihrem gewählten Benutzernamen anstelle von):

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

Speichern Sie die Datei und wechseln Sie zum neuen Benutzer.

su -

Aktualisieren Sie die Systempakete und aktualisieren Sie sie.

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

Erster Schritt - Installation auf dem Master

Zunächst richten wir den Sensu-Masterserver ein. Dies erfordert RabbitMQ, Redis, Sensu selbst und das Uchiwa-Dashboard sowie einige unterstützende Software.

Fügen Sie die RabbitMQ-Quelle der APT-Quellenliste hinzu.

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

Laden Sie den Signaturschlüssel für RabbitMQ herunter und fügen Sie ihn hinzu.

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

Installieren Sie RabbitMQ und Erlang.

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

Der RabbitMQ-Dienst sollte automatisch gestartet werden. Wenn dies nicht der Fall ist, starten Sie es mit dem folgenden Befehl.

sudo service rabbitmq-server start

Sensu verwendet SSL für die sichere Kommunikation zwischen seinen Komponenten und RabbitMQ. Obwohl es möglich ist, Sensu ohne SSL zu verwenden, wird dringend davon abgeraten. Laden Sie zum Generieren von Zertifikaten den Zertifikatsgenerator von Sensu in das Verzeichnis herunter und generieren Sie die SSL-Zertifikate.

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

Erstellen Sie ein RabbitMQ-SSL-Verzeichnis und kopieren Sie die Zertifikate.

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

Erstellen und bearbeiten Sie die Datei.

sudo vi /etc/rabbitmq/rabbitmq.config

Fügen Sie der Datei die folgenden Zeilen hinzu. Dadurch wird der RabbitMQ-SSL-Listener so konfiguriert, dass er den Port 5671 überwacht und die generierte Zertifizierungsstelle und das Serverzertifikat verwendet. Es überprüft auch die Verbindung und schlägt fehl, wenn kein Zertifikat vorhanden ist.

[
   {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}]}
 ]}
].

Starten Sie RabbitMQ neu.

sudo service rabbitmq-server restart

Erstellen Sie einen virtuellen RabbitMQ-Host und -Benutzer für Sensu. Änder das Passwort (). Sie benötigen dieses Kennwort später, wenn Sie den Sensu-Server und die zu überwachenden Clients konfigurieren.

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

Installieren Sie Redis.

sudo apt-get -y install redis-server

Der Redis-Dienst sollte automatisch gestartet werden. Wenn dies nicht der Fall ist, starten Sie es mit dem folgenden Befehl. (Beachten Sie, dass, wenn Redis bereits ausgeführt wird, die Fehlermeldung "Starten von Redis-Server: fehlgeschlagen" angezeigt wird.)

sudo service redis-server start

Fügen Sie die Quellen und Schlüssel hinzu, um Sensu zu installieren.

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

Installieren Sie Sensu und Uchiwa (Uchiwa ist das Überwachungs-Dashboard).

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

Sensu benötigt die sicheren Verbindungsinformationen zu RabbitMQ. Erstellen Sie ein SSL-Verzeichnis für Sensu und kopieren Sie die generierten Zertifikate.

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

Jetzt sind alle Komponenten für die Sensu-Überwachung installiert.

Zweiter Schritt - Konfiguration auf dem Master

Jetzt müssen wir Sensu konfigurieren. Zur Vereinfachung der Lesbarkeit und Verwaltung werden im Ordner individuelle Konfigurationsdateien erstellt. Sofern Sie die in den Konfigurationsdateien genannten Dienste und Komponenten nicht auf separaten Computern konfiguriert haben, können Sie die meisten unten gezeigten Beispielwerte unverändert lassen. Alternativ ist /etc/sensu/config.json.example <^> eine weitere Beispielkonfigurationsdatei, die Sie kopieren und zur Konfiguration von Sensu verwenden können.

Erstellen und bearbeiten Sie die Datei.

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

Fügen Sie die folgenden Zeilen hinzu, damit Redis mithilfe Ihres SSL-Zertifikats eine sichere Verbindung zur RabbitMQ-Instanz herstellen kann. Die * Benutzer * und * Pass * sollten diejenigen sein, die Sie für den virtuellen RabbitMQ-Host festgelegt haben.

{
 "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": ""
 }
}

Erstellen und bearbeiten Sie die Datei.

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

Fügen Sie die folgenden Zeilen hinzu, die die Verbindungsinformationen für den Zugriff von Sensu auf die Redis-Instanz enthalten.

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

Erstellen und bearbeiten Sie die Datei.

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

Fügen Sie die folgenden Zeilen hinzu, die die Verbindungsinformationen für den Zugriff von Sensu auf den API-Dienst enthalten.

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

Erstellen und bearbeiten Sie die Datei.

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

Fügen Sie die folgenden Zeilen hinzu. Dazu gehören die Verbindungsinformationen für das Uchiwa-Dashboard, um auf die Sensu-API zuzugreifen. Optional können Sie im Block einen Benutzernamen und ein Kennwort für die Dashboard-Authentifizierung erstellen. Wenn Sie möchten, dass das Dashboard öffentlich zugänglich ist, lassen Sie es einfach unverändert.

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

In diesem Beispiel wird der Sensu-Masterserver selbst als Client überwacht. Erstellen und bearbeiten Sie die Datei.

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

Fügen Sie die folgenden Zeilen hinzu und bearbeiten Sie den Wert für den Sensu-Client. Dies ist der Name für den Server, der im Uchiwa-Dashboard angezeigt wird. * Der Name darf keine Leerzeichen oder Sonderzeichen enthalten. *

Sie können den Wert unverändert lassen, da wir diesen Server überwachen. Wir werden später wieder eine ähnliche Datei für jeden zu überwachenden Client-Host erstellen.

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

Aktivieren Sie den automatischen Start der Sensu-Dienste.

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

Starten Sie die Sensu-Dienste.

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

Zu diesem Zeitpunkt können Sie unter http: //: 3000 auf Sensu zugreifen.

Dritter Schritt - Installation auf dem Client

Sie müssen Sensu auf jedem Client-Computer installieren, der überwacht werden soll.

Kopieren Sie die SSL-Zertifikate, während Sie sich noch * auf dem Sensu-Masterserver * befinden, mit SCP in den Client-Server-Ordner "+ / tmp". Ersetzen Sie und unten durch den sudo-Benutzer und die IP-Adresse des Client-Servers.

scp /tmp/ssl_certs/client/cert.pem /tmp/ssl_certs/client/key.pem @:/tmp

Fügen Sie auf dem zu überwachenden Client den Sensu-Schlüssel und die Quelle hinzu.

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

Installieren Sie Sensu.

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

Sie müssen dem Client Verbindungsinformationen zu RabbitMQ bereitstellen. Erstellen Sie ein SSL-Verzeichnis für Sensu und kopieren Sie die Zertifikate in den Ordner "+ / tmp +", die vom Sensu-Masterserver kopiert wurden.

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

Erstellen und bearbeiten Sie die Datei.

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

Fügen Sie die folgenden Zeilen hinzu. Bearbeiten Sie den Wert, um die IP-Adresse des RabbitMQ-Servers zu verwenden. Dies ist die IP-Adresse des Sensu-Masterservers. Die Werte und sollten diejenigen sein, die Sie für den virtuellen RabbitMQ-Host auf dem Sensu-Masterserver festgelegt haben.

{
 "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": ""
 }
}

Geben Sie Konfigurationsinformationen für diesen Sensu-Server ein, indem Sie die Datei erstellen und bearbeiten.

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

Fügen Sie die folgenden Zeilen hinzu. Sie sollten den Wert so ändern, wie dieser Server im Uchiwa-Dashboard aufgerufen werden soll. * Der Name darf keine Leerzeichen oder Sonderzeichen enthalten. *

Sie können den Wert auf setzen lassen, da wir diesen Sensu-Client-Server überwachen.

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

Aktivieren und starten Sie den Client.

sudo update-rc.d sensu-client defaults

sudo service sensu-client start

Sie sollten den Client jetzt auf der Registerkarte Clients im Sensu Dashboard sehen.

Vierter Schritt - Richten Sie einen Scheck ein

Jetzt, da Sensu läuft, müssen wir eine Überprüfung auf beiden Servern hinzufügen. Wir werden ein Ruby-Skript erstellen, das überprüft, ob Apache ausgeführt wird.

Wenn Sie Apache nicht installiert haben, installieren Sie es jetzt sowohl auf dem Sensu-Master-Server als auch auf dem Sensu-Client-Server.

sudo apt-get install -y apache2

Apache sollte standardmäßig auf beiden Servern ausgeführt werden.

Stellen Sie vor der Installation des sensu-plugin gem sicher, dass Sie über alle erforderlichen Bibliotheken verfügen. Installieren Sie die Ruby-Bibliotheken und die Build-Essential-Bibliothek sowohl auf dem Sensu-Masterserver als auch auf dem Sensu-Clientserver.

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

Installieren Sie das sensu-plugin gem sowohl auf dem Sensu-Masterserver als auch auf dem Sensu-Clientserver.

sudo gem install sensu-plugin

Erstellen Sie eine Datei im Ordner "Sensu Plugins" und ändern Sie die Dateiberechtigungen sowohl auf dem Sensu Master-Server als auch auf dem Sensu Client-Server.

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

Bearbeiten Sie die Datei sowohl auf dem Sensu-Master-Server als auch auf dem Sensu-Client-Server.

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

Fügen Sie die folgenden Zeilen hinzu, in denen die Prüfung von Apache per Skript ausgeführt wird.

#!/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

Erstellen und bearbeiten Sie die Datei nur auf dem Sensu-Masterserver.

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

Fügen Sie die folgenden Zeilen hinzu, in denen das Skript ausgeführt wird, um Apache alle 60 Sekunden zu überprüfen.

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

Starten Sie den Sensu-Server und die API auf dem Sensu-Masterserver neu.

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

Starten Sie den Sensu-Client auf dem Sensu-Client-Server neu.

sudo service sensu-client restart

Nach einigen Minuten sollte das Häkchen auf der Registerkarte "Häkchen" im Sensu Dashboard angezeigt werden.

Beenden Sie den Apache-Dienst auf einem der beiden Server, um zu testen, ob das Skript funktioniert.

sudo service apache2 stop

Eine Warnung sollte nach einigen Minuten im Dashboard * Ereignisse * angezeigt werden. Klicken Sie auf die Warnung, um weitere Informationen anzuzeigen und Maßnahmen wie das Stummschalten oder das Beheben dieser zu ergreifen.

In diesem Image wurde Apache auf dem Client-Server gestoppt. Dies ist die Seite * Clients *.

Starten Sie den Apache-Dienst, um die Warnungen zu beenden.

sudo service apache2 start

Fünfter Schritt - Richten Sie einen Handler ein

Handler können Benachrichtigungs-E-Mails senden oder Daten basierend auf Ereignissen an andere Anwendungen wie Graphite senden. Hier erstellen wir einen Handler, der eine E-Mail sendet, wenn die Apache-Prüfung fehlschlägt. Bitte beachten Sie, dass Ihr Server zum Senden von E-Mails konfiguriert sein muss. Sie können dieses Postfix Tutorial verwenden, um einen einfachen Mailserver einzurichten. (Möglicherweise möchten Sie zur einfachsten Konfiguration E-Mails an einen Benutzer auf dem Sensu-Masterserver senden lassen.)

Erstellen und bearbeiten Sie die Datei auf dem Sensu-Masterserver.

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

Fügen Sie die folgenden Zeilen hinzu und ersetzen Sie sie durch die E-Mail-Adresse, an der Sie Benachrichtigungen erhalten möchten. Abhängig von Ihrem Mailserver-Setup kann es am einfachsten sein, einen Alias ​​für einen Benutzer auf dem Sensu-Masterserver festzulegen. Dieser Handler heißt "email" und sendet mithilfe des Mail-Dienstprogramms eine Warn-E-Mail mit dem Betreff "sensu event" an die angegebene E-Mail-Adresse.

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

Bearbeiten Sie die.

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

Fügen Sie die neue Zeile mit dem Handler in den Block ein.

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

Starten Sie sensu-api und sensu-server neu.

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

Beenden Sie den Apache-Dienst erneut, um die E-Mail-Warnung zu testen. Sie sollten alle 60 Sekunden eine bekommen.

sudo service apache2 stop

Ihre E-Mail sollte ungefähr so ​​aussehen:

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"}

Starten Sie den Apache-Dienst erneut, um keine E-Mail-Benachrichtigungen mehr zu erhalten.

sudo service apache2 start

Fazit

Sensu ist ein vielseitiges Überwachungstool mit seinen Plugins und den benutzerdefinierten Skripten, die Sie dafür schreiben können. Sie können auch Handler erstellen, um fast alles mit den Daten zu tun. Erforschen Sie weiter, um es genau richtig für Sie zu machen.