2016-12-06 31 views
0

Я работаю над производственным приложением с несколькими серверами рельсов позади nginx loadbalancer. Мы отслеживаем процессы sidekiq с monit, и это работает отлично - когда sidekiq proces умирает, monit начинает его обратно.Как вы отслеживаете процессы sidekiq?

Однако недавно столкнулась с ситуацией, когда один из этих процессов работал и был видимым для monit, но почему-то не был виден sidekiq. Это привело к многим неудачным работам, и нам потребовалось некоторое время, чтобы заметить, что мы пропускаем один процесс в веб-интерфейсе sidekiq, так как monit рассказывал нам, что все в порядке, и все процессы запущены. Проблема была решена простым перезапуском.

И это подводит меня к моему вопросу: как вы контролируете свои процессы sidekiq? Я знаю, что могу использовать что-то вроде rollbar, чтобы уведомлять меня о неудачах рабочих мест, но я хотел бы знать, есть ли способ контролировать количество процессов и предпочтительно отправлять почту, когда кто-то умирает. Какие-либо предложения?

Что-то, что бы ping sidekiq/stats и проверить ответ.

ответ

0

Мы столкнулись с этой проблемой, когда наши процессы sidekiq перестали работать за ночь, и мы понятия не имели. Нам потребовалось около 30 минут для интеграции http://deadmanssnitch.com, следуя этим instructions.

Это не самый красивый или самый дешевый вариант, но он выполняет свою работу (хорошо сочетается с Pagerduty) и сэкономил наш прикладом за последние несколько месяцев.

По нашим жалобам с услугой - это самый короткий интервал времени, который мы можем установить, это 15 минут, что слишком долго для нас. Таким образом, мы оцениваем подобные услуги, как Healthchecks и т.д.

0

Мой подход заключается в следующем:

  1. создать фоновую работу, которая делает что-то
  2. вызов эту работу регулярно
  3. проверки, что вещь делается!

so; используя хрон сценарий (или что-то вроде whenever) каждые 5 минут, я бегу:

CheckinJob.perform_later 

Это теперь до sideqik (или delayed_job, или что активная работа, которую вы используете) на самом деле выполнить задание.

Задача просто должна сделать то, что вы можете проверить.

Раньше у меня было задание обновить запись в моей таблице состояния (по существу, список записей ключа/значения). Тогда у меня будет страница /status, которая возвращает код состояния :500, если запись не была обновлена ​​за последние 6 минут.

(очевидно, ваше время может варьироваться)

Затем я использую сервис мониторинга для мониторинга состояния страницы!(что-то вроде StatusCake)

Сегодня у меня более простой подход; Я просто получить фоновое задание, чтобы проверить с службой мониторинга хрон как

служба мониторинга, которая ожидает ваша задача проверить через каждые Х минут. Если ваша задача не проверяется - тогда служба мониторинга сообщит вам об этом.

Интеграция мертва проста для всех служб. Для Is It Working это будет:

IsItWorkingInfo::Checkin.ping(key:"CHECKIN_IDENTIFIER") 

полное раскрытие информации: Я написал IsItWorking!