Моніторинг - це важлива складова будь-якої серверної архітектури. Найбільш популярні варіанти його організації - це Nagios та Zabbix. Проте вони мають багато недоліків. Основні з них - це необхідність описувати кожен сервер, що потребує спостереження, окремо на сервері моніторингу; необхідність розміщення клієнта та сервера в прямій доступності та брак гнучкості. Процес автоматичного додавання хостів в моніторинги, на зразок Nagios, не дуже легко автоматизується, адже про це в 1999 році, підозрюю, особливо не думали. І це вже не кажучи про
проблеми маштабування, убогість програмних інтерфейсів і т.п.
Поставивши собі за мету вирішення згаданих вище проблем, з'явився проект
Sensu. Він має дві версії:
Sensu Core (free, opensource) та
Sensu Enterprise. Архітектура роботи Sensu досить цікава і змушує повірити в світле майбутнє. Основні особливості:
- Написаний на Ruby. Схоже люди поділяються на тих, хто любить Ruby, за його гнучкість синтаксису і ненавидить Python за його більшу строгість, і навпаки. Я відношусь до другого табору. :) Тому в кожного емоції щодо цього різні.
- Конфігураційні файли - JSON. Шкода, що не YAML.
- Може працювати з перевірками від Nagios. Що чудово - не треба все знову переписувати.
- Перевірка описується лише одноразово на сервері і підключається до аналогічної групи серверів. Кожен новий хост додається в моніторинг значно простіше і з мінімумом ручної роботи.
- Чудова архітектура, яка добре масштабується.
Зупинюсь детальніше на схемі роботи Sensu.
Sensu-server процес у якості сервера черг використовує
RabbitMQ, а у якості місця збереження результатів відпрацювань чеків -
Redis. Процес
sensu-server має бути відповідно сконфігурований на їх використання. Одразу після старту процесу
sensu-client на вузлі, що буде моніторитись, опитує
sensu-server на предмет призначених для нього перевірок і надалі відсилає результати перевірок напряму в сервер черг
RabbitMQ.
Sensu-server підключається до останнього, робить обробку черги і записує дані в
Redis. За певних обставин
sensu-server може викликати відповідний
handler.
Handler - це деяка логіка сповіщення у разі певних проблем чи пересилки даних на окремі бекенди у разі їх появи і т.п.
Sensu-api - процес, котрий надає інтерфейс взаємодії з іншими сторонніми скриптами чи сервісами. Якраз
Uchiwa (frontend на схемі) і користується API задля відображення всього, що відбувається з моніторингом.