[RUBY] So legen Sie ein Wiederholungslimit für Sidekiq fest und benachrichtigen tote Warteschlangen mit Slack

Einführung

Wenn Sie sidekiq einführen, das Jobs asynchron verarbeitet, können Sie Einstellungen anpassen, die in solchen Fällen nützlich sind, wenn Sie sie für Ihre eigene Anwendung anpassen und dabei die Vorteile nutzen möchten Es ist zusammengefasst.

Was ist Sidekiq

sidekiq ist eine Bibliothek, die die asynchrone Verarbeitung ermöglicht. Wenn Sie mehrere Jobs gleichzeitig ausführen, können Sie die Verarbeitungspriorität angeben, indem Sie den Warteschlangennamen jedes Jobs trennen. Ich denke, es gibt ähnliche Bibliotheken wie resque und delay_job. Es ist einfach zu installieren, aber es gibt auch problematische Punkte, z. B. das 25-malige oder 26-malige Wiederholen der gestolperten Warteschlange und das Nicht-Anzeigen des Protokolls der Warteschlange, die als TOT ausgeführt wurde. Es gibt. In diesem Artikel werde ich darüber sprechen, wie Sie die Obergrenze auf DEAD setzen können, ohne es erneut zu versuchen, wenn eine Ausnahme ausgelöst wird. Anschließend wird der Inhalt der Warteschlange festgelegt und eine Fehlermeldung auf "Slack" gesetzt.

Umgebung

Ruby 2.6.6 Rails 6.0.2 redis ist für sidekiq erforderlich.

# On OSX
brew update
brew install redis
brew services start redis

Überprüfen Sie das Dashboard auf fehlgeschlagene Warteschlangen

Sie können dies im Dashboard überprüfen, indem Sie Sidekiq-Fehler zum Edelstein hinzufügen, und Sie können sogar alle fehlgeschlagenen Warteschlangen wiederholen.

gem 'sidekiq-failures'

image.png

Sie können auch die Details des Fehlers in der Liste der Fehler überprüfen. image.png

Es scheint, dass es viele andere Juwelen gibt, wie das Wissen und Analysieren der geworfenen Warteschlange, also werde ich sie als Referenz veröffentlichen.

Legen Sie die Obergrenze für Wiederholungsversuche fest

Ich denke, dass Sidekiq eine Spezifikation hatte, die die Warteschlange beendet, nachdem sie standardmäßig etwa 25 oder 6 Mal wiederholt wurde. Für diejenigen, die viele Jobs gleichzeitig bearbeiten möchten, muss ich nicht so viel wiederholen, also habe ich es mehrmals versucht und mir gesagt, ob es fehlgeschlagen ist. Beschreiben Sie in der Datei.

app/jobs/your_job.rb


class YourJob < ActiveJob::Base
  ...
  queue_as :default
  sidekiq_options retry: 5
  ...
end

Damit wird die Warteschlange, die fünfmal fehlgeschlagen ist, zur TOTEN Warteschlange.

Benachrichtigen Sie den Tod der Warteschlange mit Durchhang

Slack-Incoming-Webhooks ist ein Juwel, das Slack-Benachrichtigungen in Rails-Apps sehr einfach macht.

gem 'slack-incoming-webhooks'

Rufen Sie die URL des zu benachrichtigenden Kanals ab [diese Seite](https://slack.com/intl/ja-jp/help/articles/115005265063-Slack-%E3%81%A7%E3%81%AE-Incoming-Webhook -Überprüfen Sie% E3% 81% AE% E5% 88% A9% E7% 94% A8).

Legen Sie fest, was zu tun ist, wenn die Warteschlange im Initialisierer stirbt (Kanal-URL in .env speichern).

app/config/initializers/sidekiq.rb


Sidekiq.configure_server do |config|
  config.death_handlers << ->(job, ex) do
    slack = Slack::Incoming::Webhooks.new(ENV['SLACK_WEBHOOK_URL'])
    attachments = [{
      title: "Sidekiq failure",
      text: "ONE DEAD JOB IS FOUND:\n (#{job['args']}) \n msg(#{job['error_message']})",
      color: "#fb2489"
    }]
    slack.post "", attachments: attachments
  end
end

Warteschlangen, die natürlich TOT geworden sind, werden jetzt durch Slack benachrichtigt. image.png

wichtiger Punkt

--Rescure_from Exception wird nicht wiederholt, wenn die Benachrichtigung festgelegt ist Da es sich um eine Ausnahmeverarbeitung handelt, wird der Job nach seiner Verarbeitung und dem Auftreten eines Fehlers als tot betrachtet und Sie werden über einen Durchhang informiert, aber nicht erneut versucht. Wenn es aus irgendeinem Grund nicht verarbeitet wird und Sie dennoch möchten, dass es erneut versucht wird, empfehlen wir, in config.death_handlers wie oben beschrieben Slack-Benachrichtigungen festzulegen.

Recommended Posts

So legen Sie ein Wiederholungslimit für Sidekiq fest und benachrichtigen tote Warteschlangen mit Slack
So legen Sie die IP-Adresse und den Hostnamen von CentOS8 fest
[Java-Verbesserungsfall] Wie man die Grenze des Selbststudiums und darüber hinaus erreicht
[Grobe Erklärung] So trennen Sie den Betrieb der Produktionsumgebung und der Entwicklungsumgebung mit Rails
Zusammenfassung der Verwendung des im IE festgelegten Proxy-Sets bei der Verbindung mit Java
So überprüfen Sie die Erweiterung und Größe der hochgeladenen Dateien
Umgang mit verschiedenen Versionen von rbenv und Ruby
Überprüfen Sie, wie Sie das Zeitlimit festlegen, wenn Sie eine Verbindung zu Spring + HikariCP + MySQL herstellen und SQL ausführen
[Rails] So erhalten Sie die URL der Übergangsquelle und leiten sie um
[Swift5] So erhalten Sie ein Array und eine Reihe von Unterschieden zwischen Arrays
[Rails] Wie man Kaminari mit Slim einführt und das Design ändert
[Hinweis] So starten Sie den mit Docker-Compose eingerichteten Windows-Container neu
So machen Sie den Einzug zu zwei Einzelbyte-Leerzeichen in der JAXB-Implementierung des JDK
So dekorieren Sie CSS auf Rails6 form_with (Hilfs-) Optionsfeldern
So greifen Sie mit der TCP-Funktion von Spring Integration direkt auf Socket zu
So ändern Sie die maximale und maximale Anzahl von POST-Daten in Spark
[swift5] So ändern Sie die Farbe der TabBar oder die Farbe des TabBar-Elements mit Code
Ich habe versucht, die Geschwindigkeit von Graal VM mit JMH zu messen und zu vergleichen
So bestimmen Sie die Anzahl der Parallelen
So richten Sie kapt ein und verwenden es
[Java] So stellen Sie die Datums- und Uhrzeit auf 00:00:00 ein
So sortieren Sie eine Liste von SelectItems
Wie man die Zehner und Einsen findet
Verwendung der Symbolleiste mit Superrand Teil 1 Stellen Sie Zeichen ein und ändern Sie die Farben
So erhalten Sie die ID eines Benutzers, der sich in Swift bei Firebase authentifiziert hat
Unterschied zwischen Java, C # und JavaScript (wie man den Grad der Fettleibigkeit findet)
Der Name ist und das Alter ist Senden Sie eine Benachrichtigung an Slack mit der Java-freien Version von Sentry (mit Lambda)
So legen Sie Umgebungsvariablen in der Eigenschaftendatei der Spring-Boot-Anwendung fest
So richten Sie Computer Vision für die Verfolgung von Bildern und Videos mit TrackingJs ein
So verwenden Sie Eclipse auf meinem PC mit 32 Bit und 2 GB Speicher
Freigeben auf der Hostseite (Windows) und der Gastseite (CentOS 7) mit VirtualBox
JDBC Versprechen und Schreibbeispiel
So finden Sie die Ursache des Ruby-Fehlers
Passen Sie an, wie der Inhalt von Recyclerview aufgeteilt wird
Stellen Sie die Zeit von LocalDateTime auf eine bestimmte Zeit ein
Wie komme ich zum heutigen Tag?
Ausgabe der Verwendung der Slice-Methode
[Java] (für MacOS) Methode zur Einstellung des Klassenpfads
So richten Sie jEnv (Mac) ein und bedienen es
So erstellen Sie einen Jenkins-Server mit einem Docker-Container unter CentOS 7 von VirtualBox und greifen von einem lokalen PC auf den Jenkins-Server zu
So erstellen Sie eine API mit GraphQL und Rails
So zeigen Sie das Ergebnis des Ausfüllens des Formulars an
So finden Sie die Gesamtpunktzahl und die Durchschnittspunktzahl
Wenn Sie SQLite mit VSCode verwenden, verwenden Sie die Erweiterung (wie die Binärdatei von sqlite3 angezeigt wird)
So legen Sie die Protokollstufe fest, die in der Release-Version von orhanobut / logger angezeigt werden soll
Verwendung von git mit der Leistung von jgit in einer Umgebung ohne git-Befehle
Anfordern durch Übergeben eines Arrays an eine Abfrage mit dem HTTP-Client von Ruby
[Docker] So sehen Sie den Inhalt von Volumes. Starten Sie einen Container mit Root-Rechten.
Implementieren wir eine Funktion, um die Anzahl der Zugriffe auf die API mit SpringBoot + Redis zu begrenzen
[Java] So erhalten Sie die URL der Übergangsquelle
So ändern Sie die Aktion mit mehreren Senden-Schaltflächen
So stellen Sie die Anzeigezeit in Rails auf japanische Zeit ein
Wie schreibe ich Scala aus der Perspektive von Java
[Java] Arten von Kommentaren und wie man sie schreibt
Konvertieren Sie das Array von error.full_messages in Zeichen und geben Sie es aus