2016-07-12 23 views
1

Ich habe einen Logstash Container, der zwei Datenquellen synchronisiert hält. Wenn es ausgeführt wird, fragt es nicht synchronisierte Einträge in einer Datenbank ab und stellt sie in die andere Datenbank ein. Ich möchte diesen Behälter sagen alle 10 Sekunden sagen.Unterstützt Docker das Neustarten von Containern alle X Sekunden

Was ich getan habe, ist --restart=always zu spezifizieren, so dass wenn der Container austritt, er sich neu startet, was ungefähr 5 Sekunden dauert, was für diesen Anwendungsfall ein bisschen zu oft ist.

Unterstützt Docker das, was ich erreichen möchte (Warten auf X Sekunden zwischen Neustarts oder irgendeine Art von Planung) oder sollte ich die Neustart-Richtlinie entfernen und mit Cron so planen, dass sie alle 10 Sekunden ausgeführt wird?

Antwort

0

Wenn Ihr Container erfolgreich beendet, wird es sofort wird

Eine stetig wachsende Verzögerung (das Doppelte der vorherigen Verzögerung bei 100 Millisekunden beginnend) mit --restart=always vor jedem hinzugefügt neu gestartet werden, starten Sie den Server verhindern Überschwemmungen. Dies bedeutet, dass der Daemon auf 100 ms, dann auf 200 ms, 400, 800, 1600 usw. wartet, bis entweder der Grenzwert für den Fehler erreicht wird oder wenn docker angehalten oder das Andockfenster rm -f des Containers angezeigt wird.

Hier Ihrerseits ist ich denke:

Wenn ein Container erfolgreich neu gestartet wird (der Container gestartet und läuft 10 Sekunden lang mindestens) ist die Verzögerung auf den Standardwert von 100 ms zurückgesetzt .

Was können Sie tun, ist:

    Ihre Behälter mit einem cron
  • Konfigurieren Sie einen cron in Ihrem Container alle 10 Sekunden neu starten
  • und starten logstash alle 10 Sekunden
  • Verwenden Sie ein Shell-Skript, das , in einer Schleife, starten Sie Logstash dann schlafen 10
  • Vielleicht Logstash hat so etwas schon eingebaut? (Ich weiß, dass zum Beispiel das jdbc-Input-Plugin einige Zeitplanparameter hat)
+0

Ich werde mit Cron neu starten. Aber ich mochte auch die Idee, 10 Sekunden zu schlafen, nachdem logstash in 'docker-entrypoint.sh' existiert, und dann den Container zu verlassen, so dass 10s übergeben werden, wenn es sofort neu gestartet wird. Ich glaube aufrichtig und unterstütze, dass Container so einfach wie möglich gehalten werden sollten und die geringste Anzahl von Dingen möglich machen, so dass ich keinen Cron in meinem Logstash Container haben möchte und afaik, ich kann die Input/Output Plugins von Logstash nicht verwenden . –

+1

Ich stimme Ihnen zu, einige meiner Vorschläge sind eindeutig schlechte Praktiken, ich wollte nur so erschöpfend wie möglich sein. –

+1

Sie können einen separaten verknüpften Container einrichten, um Logstash zu starten, den Zeitplan zu verwalten und einen Bericht zu erstellen, wenn er nicht erneut gestartet wird. Auf diese Weise erhalten Sie die Vorteile der Portabilität und Host-Abstraktion bei der Verwendung eines Containers. Eine andere Möglichkeit wäre, Logstash als Server einzurichten und Abfragen nach einem Zeitplan auszuführen, was auch Abstraktionsvorteile bringen könnte. – ldg