Wie halten Sie mit Nagios / Capistrano-Konfigurationen Schritt, wenn Sie EC2 verwenden?

11

Ich verwende Amazon EC2 für meine mobile App. Abhängig von der Auslastung der Anwendung zu einem bestimmten Zeitpunkt kann es vorkommen, dass neue Instanzen erzeugt werden und diese dann heruntergefahren werden, wenn die Auslastung geringer ist, um Kosten zu sparen.

Wie kann man mit Nagios-Konfigurationen für eine solch dynamische Umgebung Schritt halten? Wenn es um verwaltete Hardware geht, sind Konfigurationsdateien vorhersehbar. In diesem Fall müssten Nagios, Capistrano und eine Reihe anderer Konfigurationsdateien hinzugefügt werden. Capistrano muss wissen, wo ein neuer Build für einen App-Server bereitgestellt werden soll. Nagios muss wissen, wie eine vorhandene Instanz entfernt oder eine neue Instanz zur Überwachung hinzugefügt werden kann. Nagios muss auch wissen, ob ein Knoten absichtlich heruntergefahren wurde oder ob der Host aufgrund eines Fehlers heruntergefahren ist.

Wie geht das mit der wundervollen Welt der VPS / dynamischen Instanzen?

einfallsreich
quelle

Antworten:

9

Wir verwenden ein Konfigurationsmanagement-Tool (in unserem Fall Chef), das die Nagios-Konfiguration aus den Knoteninformationen schreibt.

cjc
quelle
1
Natürlich ist die Verwendung von Puppet / Chef eine Selbstverständlichkeit. Der Trick besteht jedoch darin, die Konfiguration pro Knoten verwaltbar zu machen (z. B. keine Liste von Knoten in der Puppet-Konfiguration des Nagios-Servers replizieren zu müssen) und den Nagios-Server dennoch dazu zu bringen, die hinzugefügten / gelöschten / geänderten Knoten zu verfolgen. Ich berühre diesen Punkt in meiner Antwort unten.
Amos Shapira
3

Schrieb meine eigenen kleinen PHP-Skripte, die Nagios-Konfigurationen in eine Datei schreiben. Nagios ist einfach, da es sich nur um eine Textdatei handelt. Sie müssen also nur eine Vorlage für jeden Servertyp erstellen. Wenn der Server startet, fügen Sie mithilfe der Vorlage eine Datei hinzu. Die einzigen Daten, die sich in der Datei ändern, sind die Host-IP und der Name.

Für statischere Server habe ich ein Skript erstellt, das ausgeführt wird, ec2-describe-instancesund für jede zurückgegebene Instanz eine Datei erstellt. Jede Instanz ist mit dem Tag markiert: Zweck = XXXX, damit ich weiß, welche Vorlage angewendet werden soll.

Für unsere automatisch skalierenden Gruppen richten wir eine Benachrichtigung mit dem as-put-notification-configurationBefehl ein, der eine Nachricht an eine SQS-Warteschlange sendet. Das PHP-Skript wird von einem Crontab ausgeführt. Wenn das Skript ausgeführt wird, überprüft es die Warteschlange auf neue Server. Immer wenn ein neuer Server gefunden wird, wird eine neue Datei erstellt. Das gleiche passiert, wenn ein Server entfernt wird. Wahrscheinlich einfacher, Chef oder etwas zu benutzen, wenn Sie es bereits benutzen, aber wenn Sie es nicht sind, können Sie in ein paar Tagen einen einfachen PHP-Dienst wie meinen schreiben.

bwight
quelle
1

Wir verwenden Opsview , einen weiteren Nagios + Datenbank + Rest-API-Wrapper. Ich weiß nicht, ob dies die beste Lösung für alle (oder sogar für uns) ist, aber es ermöglicht uns, den Nagios-Server dynamisch über eine einfache REST-API vom Knoten (oder einem anderen Verwaltungsknoten) zu konfigurieren, wenn er gestartet und entfernt wird die Konfiguration, wenn es fertig ist. Ich verwende Definitionen von Host-Vorlagen als Teil des Puppet-Manifests des Opsview (/ Nagios) -Servers, und die überwachten Hosts registrieren sich einfach damit und verbinden die richtige Host-Vorlage als Teil ihres Puppet-Manifests.

Ein "allgemeinerer" Ansatz, der mit so ziemlich allem funktionieren sollte, selbst mit den ursprünglichen Nagios und seinen statischen Dateien, ist die Puppet Stored Configuration. Auf diese Weise können Sie ein Skript erstellen, um jedes gewünschte Tool basierend auf den von Puppet gesammelten Informationen zu konfigurieren sein Manifest.

Ich würde vorschlagen, dass Sie aus forensischen Gründen die Konfiguration des Knotens nicht vollständig löschen sollten, wenn er heruntergefahren wird, sondern versuchen, ihn und die darüber gesammelten Überwachungsinformationen zu archivieren, während er aktiv war.

Amos Shapira
quelle
1

Ein paar Möglichkeiten.

  • Verwenden vorkonfigurierter Amazon EC2-Vorlagen.

  • Verwenden des Puppenmanifests mit variablen Vorlagen.

  • Richten Sie ein VPN zwischen Ihrem Nagios-Netzwerk und Ihrem Amazon VM ein. Wenn Ihre gesamte Amazon-VM über eine statische IP-Adresse verfügt, können Sie sogar ein DNS darauf einrichten. Wir haben einen Nagios, der alle unsere Amazon-Instanzen ausführt und überwacht. Wir brauchen nicht einmal eine elastische IP. Wir verwenden openvpn für unser VPN.

  • Erstellen Sie Nagios, die externe Befehle abhören, und aktualisieren Sie die Konfiguration entsprechend. Schließlich können sich Maschinen auf den Nagios registrieren, die Registrierung aufheben, aussetzen und wieder aufnehmen.

Chakri
quelle
0

Ich habe keine Silberkugel, um dieses Problem mit Nagios zu lösen. Für capistrano gibt es jedoch capify-ec2 , eine Erweiterung für capistrano, die Serverrollenlisten mithilfe von Amazon-Tagging-Funktionen löst.

Theist
quelle