Ansible: Überprüfen Sie, ob der Dienst einen bestimmten Port abhört

8

Wie würden Sie mit Ansible gehen, um zu bestätigen, ob ein Dienst an einem bestimmten Port ausgeführt wird?

Zum Beispiel:

  • Läuft Apache auf Port 80?
  • Hört MySQL auf Port 3912?
  • Hört Tomcat Port 8080?

Ich verstehe, dass es die Befehle service und wait_for gibt, die einzeln prüfen, ob ein Dienst läuft und ob ein Port verwendet wird - aber ich habe noch nichts gefunden, um zu überprüfen, ob ein bestimmter Dienst existiert an einem bestimmten Port hören. service und wait_for zeigen an, dass es einen Dienst und einen Port gibt, aber es gibt keine Garantie dafür, dass der Port von diesem bestimmten Dienst verwendet wird - er könnte von allem genommen werden. wait_for , wie ich es verstehe, überprüft einfach, ob es verwendet wird.

Es gibt einen regex_search -Parameter auf wait_for , der das Suchen in einer Socket-Verbindung für eine bestimmte Zeichenkette erwähnt, aber wie ich es verstehe, liest es einfach alle Informationen, die aus dem Socket kommen, anstatt irgendeinen Zugriff darauf zu haben Senden dieser Informationen.

Wie können wir das machen?

    
Johnathan Wells 19.02.2015, 12:49
quelle

4 Antworten

5

Es gibt ein paar Möglichkeiten, Ihre Frage zu interpretieren, also werde ich versuchen, beide zu beantworten:

Überprüfen eines Netzwerkdienstes

Wenn Sie überprüfen möchten, ob ein bestimmter Port ein bestimmtes Anwendungsprotokoll bedient, würde ich dies überprüfen, indem Sie einen geeigneten Client ausführen.

  • Um Apache und Tomcat zu überprüfen, würde ich GET eine spezifische URL eingeben und den Ergebniscode überprüfen. Zum Beispiel:

    %Vor%

    Und ähnlich für Tomcat.

  • Um MySQL zu überprüfen, würde ich den MySQL-Client verwenden:

    %Vor%

Überprüfen, welcher Prozess einen Socket besitzt

Wenn Sie wirklich sehen wollten, welcher Prozess einen bestimmten Port geöffnet hat, könnten Sie ss und grep kombinieren, aber das erscheint seltsam und unnötig. Etwas wie:

%Vor%

Wenn Sie eine bestimmte Prozess-ID überprüfen möchten, könnten Sie etwas Ähnliches mit lsof :

machen %Vor%

Aber ich finde diese Optionen nicht unbedingt besonders nützlich. Die Service-Checks im vorherigen Abschnitt scheinen geeigneter zu sein.

    
larsks 19.02.2015, 14:01
quelle
2

Es gibt kein integriertes Modul, das eine Kombination aus einem Port und einem Service überprüft. Was Sie wahrscheinlich tun müssen, ist herauszufinden, einen entsprechenden Aufruf an einen Befehl wie Netstat und rufen Sie dies über die Befehl oder < a href="http://docs.ansible.com/shell_module.html"> Shell Module. Zum Beispiel zeigt der folgende Befehl auf einer Linux-Box an, welcher Prozess Port 80 überwacht:

%Vor%

Also von Ansible würden Sie wahrscheinlich so etwas tun wollen:

%Vor%

Wenn Sie etwas schicker sein möchten, könnten Sie ein Shell-Skript schreiben, das den Netstat-Aufruf kapselt und die Ausgabe etwas ausführlicher analysiert / validiert, bevor die Ergebnisse ans ansible zurückgegeben werden. Aber dann müssen Sie dieses Skript vor dem Aufruf installieren.

    
Bruce P 19.02.2015 14:00
quelle
2

AFAIK gibt es kein eingebautes Modul, das dies tut. Wahrscheinlich ist es trivial, es mit dem Shell-Modul zu tun oder einen kleinen Shell-Befehl zu schreiben, der alle Überprüfungen durchführt.

Sie können den Befehl fuser verwenden, um zu überprüfen, welcher Prozess an einem bestimmten TCP-Port abgehört wird:

%Vor%

Sie können ps verwenden, um den Namen des Prozesses zu sehen:

%Vor%

Kombinieren Sie alles:

%Vor%     
Paulo Scardine 19.02.2015 16:01
quelle
1

Vielleicht betrachten Sie dieses Problem mit einem falschen Ansatz. Sie würden Konfigurationsverwaltungssysteme (wie Ansible) verwenden, um Änderungen an Ihrem System vorzunehmen, aber Sie würden etwas wie Serverspec verwenden, um sicherzustellen, dass korrekte Prozesse die richtigen Ports abhören. Darüber hinaus sollten Ihre Playbooks so aufgebaut sein, dass Sie sich nie in einer mehrdeutigen Situation befinden, in der verschiedene Dienste auf den gleichen Ports hören können.

    
Mxx 19.02.2015 16:28
quelle

Tags und Links