От Low Level к Super Discovery
Илья Аблеев
в
или как переложить мониторинг на девелопера
Инфраструктура:
~3K Linux хостов;
~4 датацентра: Европа, Америка, Азия, Россия;
2 девел-площадки: Москва, Лондон
Отдел мониторинга:
реакция на проблемы
введение нового и поддержание старого добра;
автоматизация.
Badoo
Всё
!
– доступность серверов / сетевых железок
!
– “хардварную” статистику: память, CPU, load average, RAID
!
– сервисы: MySQL, Nginx, PHP-FPM, самописные
!
– статистику сервисов: количество запросов / время ответа
Что мониторим Zabbix’ом?
А ещё…
!
– логику приложений: очереди, актуальность /
консистентность данных
!
– бизнес-метрики (активность пользователей): онлайн,
регистрации, загрузка фото
Что мониторим Zabbix’ом?
!
Когда:
• подумали заранее, при создании сервиса
• что-то сломалось, нужно предотвратить повторение
!
Как:
• оформляем задачу, описываем требования
• реализовываем логику (скрипты)
• прикручиваем триггеры, уведомления
!
!
Как решаем, что нужно мониторить?
!
!
Но долго, если у нас очень много мелких задач.
!
!
Больше задач –> больше времени тратится на повторение уже
существующих приёмов.
Замониторить – просто
Коллеги, нам бы мониторить количество записей
в таблице и если превысит 100 – слать sms’ку.
Можете?
!
mysql -uzabbix -SNe “SELECT COUNT(*) FROM MyDb1.MyTable1”
!
Вроде просто.
!
Добавили в zabbix, подписали на SMS.
Пример
Коллеги, слушайте, тут аналогичная база есть.
Можете добавить?
!
mysql -uzabbix -SNe “SELECT COUNT(*) FROM MyDb2.MyTable1”
!
Опять просто.
!
Добавили в zabbix, подписали на SMS.
Пример
Мы тут подумали… У нас есть десяток таких
таблиц. Сможете? И по каждой нужно выставить
свой лимит…
!
mysql -uzabbix -SNe “SELECT COUNT(*) FROM MyDb1.MyTable1”
mysql -uzabbix -SNe “SELECT COUNT(*) FROM MyDb2.MyTable1”
mysql -uzabbix -SNe “SELECT COUNT(*) FROM MyDb2.MyTable2”
mysql -uzabbix -SNe “SELECT COUNT(*) FROM MyDb2.MyTable3”
mysql -uzabbix -SNe “SELECT COUNT(*) FROM MyDb2.MyTable4”
…
mysql -uzabbix -SNe “SELECT COUNT(*) FROM MyDb2.MyTable10”
Пример
А у нас тут база
переехала…
А давайте нечётные не
проверять!
А можете новый номер для
SMS добавить?
Давайте на пятую
таблицу недельку
позабиваем?
А таблицы из первой базы вообще не
используются уже давно, чо вы их до сих пор
мониторите-то???
ЧО ТАК ДОЛГО-ТО?
ДЕВЕЛОПЕР(ы)
ХОЧУ БОЛЬШЕ!
ОТПИШИТЕ МЕНЯ ОТ
СМС…
МОНИТОРИНГ
mysql> DROP DATABASE zabbix;
Шаблоны
• массово раскатываем на кучу хостов
• меняем всё и сразу
• нет возможности менять триггеры для одного хоста
!
API
• сложно ввести в курс дела тех, кто не видел заббикс
Нужно делать быстрее и больше
Низкоуровневое обнаружение
!
Не слышали? Быстро изучать:
https://www.zabbix.com/documentation/2.0/manual/discovery/low_level_discovery
В двух словах: что-то среднее между API и шаблонами.
!
Новые объекты доставляются в JSON массиве.
Low Level Discovery
Low Level Discovery
Low Level Discovery
Просто обнаружить и повесить лампочки – скучно.
!
Макросы можно подставлять в разные объекты:
айтемы: {названия, ключи},
триггеры: {текст, формула, лимит}
!
Нельзя подставить макрос в функцию 😟
https://support.zabbix.com/browse/ZBXNEXT-1667
(ровно через два дня – тикету исполнится три!!! года)
Low Level Discovery
Привет, Zabbix 3.0
https://www.zabbix.com/documentation/3.0/manual/config/macros/usermacros
!
Общий смысл: позволит использовать разные значения
для разных LLD макросов, которые были обнаружены.
!
Если не найдёт – будет использовать дефолтное.
!
* Контекстные макросы
!
Даже с контекстными макросами приходится совершать
два действия:
– дискаверить новые метрики
– задавать лимиты (через API или руками)
!
Оставили в старом варианте: значение задаётся прямо во
время дискавери, в одном действии.
А как у нас?
Расширяем JSON массив
дефолтные лимиты
кастомные лимиты
Создаём ОДИН раз айтемы:
И триггеры:
Лёгким движением руки…
У разработчиков – много однотипных сервисов.
У этих однотипных сервисов – ещё больше айтемов.
!
Чем отличаются:
– названием
– критичностью
– ответственными
!
Всё это “укладывается” в LLD.
Дискаверим на более “высоком” уровне
Дискаверим сервисы. Как? Доклад прошлого года :)
https://youtu.be/ZfZL39By0cw?t=10m15s
!
В заббиксе нет понятия “сервис”, поэтому для удобства
каждый сервис добавляем как хост.
!
Список сервисов предоставляет девелопер.
!
Например: online_users, registration, push_send,
push_click, email_send, email_open, …
Шаг первый
Создаём “универсальный” шаблон дискавери.
!
Универсальный – значит применим для всех сервисов.
!
Все айтемы с типом “траппер”:
!
status[{#ID}] состояние метрики
count[{#ID}] текущее значение
limit_disaster[{#ID}] порог для самого критичного
limit_high[{#ID}] для менее критичного
limit_high[{#ID}] для наименее критичного
Шаг второй
Макросы:
!
{#ID} уникальный id метрики
{#TRIGGER} название триггера
{#EMAIL} список адресов для уведомлений
{#SMS} список телефонов
!
Название для триггера – чтобы назвали так, как будет удобно.
Шаг второй
Шаг второй
Все айтемы – трапперы.
!
Девелоперы сами будут отправлять нам данные через
zabbix_sender: из крона, из “облаков”, и тд.
!
Логику, когда нужно зажечь триггер – пишут они же.
!
Список адресов и телефонов – заботятся снова они, заранее.
!
Заббикс зажигает лампочки и отправляет уведомления.
Шаг третий
А у нас тут база
переехала…
А давайте нечётные не
проверять!
А можете новый номер для
SMS добавить?
Давайте на пятую
таблицу недельку
позабиваем?
А таблицы из первой базы вообще не
используются уже давно, чо вы их до сих пор
мониторите-то???
Сейчас сам всё поправлю
Итоги
Вопросы?
http://habrahabr.ru/company/Badoo/
!
!
Илья Аблеев
ableev@corp.badoo.com

Zabbix в badoo, от lld к super discovery

  • 1.
    От Low Levelк Super Discovery Илья Аблеев в или как переложить мониторинг на девелопера
  • 2.
    Инфраструктура: ~3K Linux хостов; ~4датацентра: Европа, Америка, Азия, Россия; 2 девел-площадки: Москва, Лондон Отдел мониторинга: реакция на проблемы введение нового и поддержание старого добра; автоматизация. Badoo
  • 4.
    Всё ! – доступность серверов/ сетевых железок ! – “хардварную” статистику: память, CPU, load average, RAID ! – сервисы: MySQL, Nginx, PHP-FPM, самописные ! – статистику сервисов: количество запросов / время ответа Что мониторим Zabbix’ом?
  • 5.
    А ещё… ! – логикуприложений: очереди, актуальность / консистентность данных ! – бизнес-метрики (активность пользователей): онлайн, регистрации, загрузка фото Что мониторим Zabbix’ом?
  • 6.
    ! Когда: • подумали заранее,при создании сервиса • что-то сломалось, нужно предотвратить повторение ! Как: • оформляем задачу, описываем требования • реализовываем логику (скрипты) • прикручиваем триггеры, уведомления ! ! Как решаем, что нужно мониторить?
  • 7.
    ! ! Но долго, еслиу нас очень много мелких задач. ! ! Больше задач –> больше времени тратится на повторение уже существующих приёмов. Замониторить – просто
  • 8.
    Коллеги, нам бымониторить количество записей в таблице и если превысит 100 – слать sms’ку. Можете? ! mysql -uzabbix -SNe “SELECT COUNT(*) FROM MyDb1.MyTable1” ! Вроде просто. ! Добавили в zabbix, подписали на SMS. Пример
  • 9.
    Коллеги, слушайте, тутаналогичная база есть. Можете добавить? ! mysql -uzabbix -SNe “SELECT COUNT(*) FROM MyDb2.MyTable1” ! Опять просто. ! Добавили в zabbix, подписали на SMS. Пример
  • 10.
    Мы тут подумали…У нас есть десяток таких таблиц. Сможете? И по каждой нужно выставить свой лимит… ! mysql -uzabbix -SNe “SELECT COUNT(*) FROM MyDb1.MyTable1” mysql -uzabbix -SNe “SELECT COUNT(*) FROM MyDb2.MyTable1” mysql -uzabbix -SNe “SELECT COUNT(*) FROM MyDb2.MyTable2” mysql -uzabbix -SNe “SELECT COUNT(*) FROM MyDb2.MyTable3” mysql -uzabbix -SNe “SELECT COUNT(*) FROM MyDb2.MyTable4” … mysql -uzabbix -SNe “SELECT COUNT(*) FROM MyDb2.MyTable10” Пример
  • 11.
    А у настут база переехала… А давайте нечётные не проверять! А можете новый номер для SMS добавить? Давайте на пятую таблицу недельку позабиваем? А таблицы из первой базы вообще не используются уже давно, чо вы их до сих пор мониторите-то???
  • 12.
    ЧО ТАК ДОЛГО-ТО? ДЕВЕЛОПЕР(ы) ХОЧУБОЛЬШЕ! ОТПИШИТЕ МЕНЯ ОТ СМС…
  • 13.
  • 14.
    Шаблоны • массово раскатываемна кучу хостов • меняем всё и сразу • нет возможности менять триггеры для одного хоста ! API • сложно ввести в курс дела тех, кто не видел заббикс Нужно делать быстрее и больше
  • 15.
    Низкоуровневое обнаружение ! Не слышали?Быстро изучать: https://www.zabbix.com/documentation/2.0/manual/discovery/low_level_discovery В двух словах: что-то среднее между API и шаблонами. ! Новые объекты доставляются в JSON массиве. Low Level Discovery
  • 16.
  • 17.
  • 18.
    Просто обнаружить иповесить лампочки – скучно. ! Макросы можно подставлять в разные объекты: айтемы: {названия, ключи}, триггеры: {текст, формула, лимит} ! Нельзя подставить макрос в функцию 😟 https://support.zabbix.com/browse/ZBXNEXT-1667 (ровно через два дня – тикету исполнится три!!! года) Low Level Discovery
  • 19.
    Привет, Zabbix 3.0 https://www.zabbix.com/documentation/3.0/manual/config/macros/usermacros ! Общийсмысл: позволит использовать разные значения для разных LLD макросов, которые были обнаружены. ! Если не найдёт – будет использовать дефолтное. ! * Контекстные макросы
  • 20.
    ! Даже с контекстнымимакросами приходится совершать два действия: – дискаверить новые метрики – задавать лимиты (через API или руками) ! Оставили в старом варианте: значение задаётся прямо во время дискавери, в одном действии. А как у нас?
  • 21.
    Расширяем JSON массив дефолтныелимиты кастомные лимиты
  • 22.
    Создаём ОДИН разайтемы: И триггеры:
  • 23.
  • 24.
    У разработчиков –много однотипных сервисов. У этих однотипных сервисов – ещё больше айтемов. ! Чем отличаются: – названием – критичностью – ответственными ! Всё это “укладывается” в LLD. Дискаверим на более “высоком” уровне
  • 25.
    Дискаверим сервисы. Как?Доклад прошлого года :) https://youtu.be/ZfZL39By0cw?t=10m15s ! В заббиксе нет понятия “сервис”, поэтому для удобства каждый сервис добавляем как хост. ! Список сервисов предоставляет девелопер. ! Например: online_users, registration, push_send, push_click, email_send, email_open, … Шаг первый
  • 26.
    Создаём “универсальный” шаблондискавери. ! Универсальный – значит применим для всех сервисов. ! Все айтемы с типом “траппер”: ! status[{#ID}] состояние метрики count[{#ID}] текущее значение limit_disaster[{#ID}] порог для самого критичного limit_high[{#ID}] для менее критичного limit_high[{#ID}] для наименее критичного Шаг второй
  • 27.
    Макросы: ! {#ID} уникальный idметрики {#TRIGGER} название триггера {#EMAIL} список адресов для уведомлений {#SMS} список телефонов ! Название для триггера – чтобы назвали так, как будет удобно. Шаг второй
  • 28.
  • 29.
    Все айтемы –трапперы. ! Девелоперы сами будут отправлять нам данные через zabbix_sender: из крона, из “облаков”, и тд. ! Логику, когда нужно зажечь триггер – пишут они же. ! Список адресов и телефонов – заботятся снова они, заранее. ! Заббикс зажигает лампочки и отправляет уведомления. Шаг третий
  • 30.
    А у настут база переехала… А давайте нечётные не проверять! А можете новый номер для SMS добавить? Давайте на пятую таблицу недельку позабиваем? А таблицы из первой базы вообще не используются уже давно, чо вы их до сих пор мониторите-то??? Сейчас сам всё поправлю Итоги
  • 31.