Saltstack Управлять и запрашивать Tally/Threshold через события и вызов соли?

У меня есть более 100 экземпляров веб-серверов, на которых запущено приложение php. используя apc, и мы время от времени (порядка одного раза в неделю по всему парку) обнаруживают повреждение одного из кэшей, что приводит к отчетливому сообщению в журнале об ошибках.

Как только это произойдет, приложение на этом узле перестанет работать, любые транзакции, направляемые к нему, завершатся ошибкой.

Я написал простую оболочку вокруг tail -F, которая может обнаруживать шаблон в любое время, когда он появляется в файле журнала, и оценивать команду оболочки (используя bash eval), чтобы отреагировать. У меня есть это с помощью команды salt-call из salt-stack для запуска обработки пользовательского модуля, который отключает nginx сервер, прогревает (обновляет) кэш и, конечно же, перезапускает веб-сервер. (На самом деле у меня есть две формы этой оболочки: bash и Python).

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

Моей первой мыслью было обернуть мой salt-call в redis проверить (у нас уже есть инфраструктура Redis, используемая для кэширования и некоторых других структур данных). Это будет реализовано как целое число с истечением срока действия. Проверка вызовет INCR, проверит результат и приостановит работу, если будет возвращено больше N (или если сервер Redis недоступен). Если бы результат был ниже порогового значения, то было бы отправлено salt-call, и после того, как сервер будет запущен и запущен, будет вызван декремент. (Истечение срока действия ключа Redis убьет любые устаревшие инкременты, возможно, через день или даже несколько часов ... наша система оповещения уже уведомит нас о неработающих серверах, и наше время отклика более чем достаточно для таких временных рамок).

Тем не менее, я читал о функциях обработки событий Saltstack и задавался вопросом, не лучше ли использовать их вместо этого. (Преимущество в том, что на узлах нет командного инструмента redis-cli и библиотек Python Redis, но, очевидно, salt-call уже есть с его необходимой поддержкой). Таким образом, использование чего-то в Salt сведет к минимуму необходимость добавления дополнительных пакетов и зависимостей в эти системы. (В качестве альтернативы я мог бы просто написать всю обработку Redis в виде отдельной утилиты командной строки PHP и просто вызвать ее в моем сценарии оболочки).

Есть ли HOWTO для написания простых модулей Saltstack? Документы, кажется, глубоко погружаются в справочные детали без какой-либо ориентации. Даже некоторые предложения о том, по каким терминам искать, были бы полезны (потому что их использование таких терминов, как столбы, зерна, миньоны и т. д., кажется несколько непрозрачным).


person Jim Dennis    schedule 15.02.2014    source источник
comment
У вас есть решение для централизованного мониторинга, такое как nagios, которое имеет встроенную функциональность для запуска произвольных сценариев с определяемыми пользователем задержками между каждым запуском?   -  person Jason Zhu    schedule 15.02.2014


Ответы (1)


Основной документ для написания модуля Salt находится здесь: http://docs.saltstack.com/en/latest/ref/modules/index.html

Вместе с Salt поставляется множество модулей, которые могут быть полезны для вдохновения. Вы можете найти их здесь: https://github.com/saltstack/salt/tree/develop/salt/modules

Следует иметь в виду, что соляной миньон ничего не делает, пока вы не прикажете ему что-то сделать. Таким образом, вы можете создать модуль, который проверяет шаблон ошибки, который вы упомянули, но вам нужно добавить его в Salt Scheduler или cron, чтобы он часто запускался.

Если вам нужна дополнительная помощь, вы можете найти полезных людей в IRC в #salt на freenode.

person Utah_Dave    schedule 08.09.2014