Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Plug pour vérifier le bon fonctionnement du worker #4399

Merged
merged 6 commits into from
Dec 19, 2024

Conversation

AntoineAugusti
Copy link
Member

@AntoineAugusti AntoineAugusti commented Dec 19, 2024

Ajoute un plug pour vérifier que notre worker fonctionne correctement.

Le plug répond pour toutes les requêtes HTTP sur le worker, il répond un statut 200 si :

  • l'application a été démarrée il y a moins de 20 minutes
  • au moins 1 job a été exécuté dans les dernières 60 minutes par Oban

Si ces 2 conditions sont fausses alors le plug répond un statut 503, ce qui causera un redémarrage de l'application par le monitoring de notre hébergeur.

PS : cette branche est déployée sur prochainement depuis quelques heures

@AntoineAugusti AntoineAugusti requested a review from a team as a code owner December 19, 2024 10:27
@AntoineAugusti
Copy link
Member Author

Je vais voir pour ajouter une metric dans AppSignal ensuite https://docs.appsignal.com/metrics/custom.html

Ou voir si le plugin Oban fait l'affaire, sans être cher.

@thbar
Copy link
Contributor

thbar commented Dec 19, 2024

Merci - je vérifie auprès de l'hébergeur qu'un 503 est bien comme on s'y attend tous les deux, un indicateur qu'ils vont respecter à 100% pour redémarrer.

@AntoineAugusti
Copy link
Member Author

En regardant la doc AppSignal pour Oban et les metrics en particulier,

je pense que j'activerais bien la configuration, pour les metrics et en limitant le bruit pour les erreurs uniquement aux jobs qui ont vraiment échoué (et non une nouvelle tentative).

Soit

  # See https://docs.appsignal.com/elixir/integrations/oban.html
  instrument_oban: true,
  # Report errors when the job is discarded due to the error.
  # Use this option to only report errors when all job retries have been exhausted.
  report_oban_errors: "discard",

On pourra alors regarder le graph de

oban_job_count: the amount of jobs processed, tagged by the job's worker, queue and status.

et éventuellement ajouter une alerte en plus

@thbar
Copy link
Contributor

thbar commented Dec 19, 2024

Je vais voir pour ajouter une metric dans AppSignal ensuite https://docs.appsignal.com/metrics/custom.html

Si besoin ->

Appsignal.add_distribution_value("ecto.queue_time", System.convert_time_unit(queue_time, :native, :millisecond))

@thbar
Copy link
Contributor

thbar commented Dec 19, 2024

En regardant la doc AppSignal pour Oban et les metrics en particulier,

On n'a pas activé le logging moderne non plus qui est dans la documentation.

Par contre un peu préoccupé que ça perturbe le système si on change trop de choses, je me demande si rester sur un simple restart, qui aide à passer les fêtes, n'est pas suffisant ; est-ce que tu veux passer le reste avant les fêtes aussi ?

@AntoineAugusti
Copy link
Member Author

@thbar Non, peut-être trop gourmand. Restart peut-être suffisant, avec une distribution uniquement. Pour pas ajouter trop de choses dans AppSignal ou avoir des listeners de partout.

Mais dans une PR à suivre. Pour vérifier le bon fonctionnement en conditions réelles le plus vite possible (c'est déjà OK en staging depuis ce matin).

@thbar
Copy link
Contributor

thbar commented Dec 19, 2024

Je partage aussi les réponses de l'auteur d'Oban en chat:

There are a few possibilities, and the fact that restarting helps narrows it down. Did you have any database issues (high load, slow queries, etc)?
Which version of Oban, and do you have logging enabled?
There are only a few possible causes: leadership issue, notification issue, job staging issue, job fetching issue. The logging and other info will help diagnose.
Side note—this is the subject of one of our talk proposals for ElixirConf EU

I mean Oban specific logging (https://hexdocs.pm/oban/preparing_for_production.html#logging) via attach_default_logger/1. That includes information about whether the instance is isolated, which “staging” mode it’s using, etc.

As Jason noted, this could be from a crashed Postgres notifier, like this seemingly related forum post https://elixirforum.com/t/oban-supervisor-not-restarting-oban-notifiers-postgres/68192

@AntoineAugusti
Copy link
Member Author

Yes faut qu'on plug le logger par défaut d'Oban pour capturer les erreurs dans AppSignal, mais ça semble être un problème de pool Ecto qui est plein ou lent et qui déconnecte le scheduler.

Surement expliqué par la pression de la validation NeTEx et du trafic sur le proxy GTFS-RT.

@AntoineAugusti
Copy link
Member Author

AntoineAugusti commented Dec 19, 2024

J'ai mis quelques tests en plus 35f64e7

@AntoineAugusti
Copy link
Member Author

J'ai ajouté la metric, j'ai push la branche sur staging, j'irai vérifier que ça remonte bien dans AppSignal.

Copy link
Contributor

@thbar thbar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Top, c'est cool d'avoir un hot-fix pour les vacances, merci beaucoup.

Deux remarques mineures mais ça me paraît cool, et Clever Cloud a confirmé que HTTP 503 était fiable à utiliser car ils redémarrent bien avec ça.

@AntoineAugusti
Copy link
Member Author

Je peux bien graph la metric dans AppSignal

image

@thbar
Copy link
Contributor

thbar commented Dec 19, 2024

Je peux bien graph la metric dans AppSignal

Top ! On pourra se mettre une alerte sur seuil je pense.

Ou bien j'ajoute dans updown avec notification dans Mattermost...

@AntoineAugusti AntoineAugusti added this pull request to the merge queue Dec 19, 2024
Merged via the queue into master with commit d1730e6 Dec 19, 2024
4 checks passed
@AntoineAugusti AntoineAugusti deleted the plug_worker_healthcheck branch December 19, 2024 15:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Traitements de fond (jobs) en panne de façon régulière (impact: validations etc)
2 participants