2. Содержание
1. Ostrovok.ru
2. Информация про API
3. Проблематика
4. Почему мы мониторим API?
5. Реализация
6. Преимущества
7. Мониторинг это просто
ostrovok.ru
2
3. 1. Ostrovok.ru
• Удобный сервис бронирования отелей
• Дружная команда из 200+ человек
• Быстро растём и движемся вперёд
ostrovok.ru
3
4. 2. Что такое API ostrovok.ru
• Веб-сервис с основными методами
продукта (бронирование и поиск отелей)
• Ответ в формате XML/JSON
ostrovok.ru
4
5. 2. Способы использования API
• Без хранения данных у клиента
(вся обработка запросов идет на лету)
• Храним некоторые данные у партнёра
(обновляем отели ежедневно)
ostrovok.ru
5
6. 2. Кто использует API
• Сайты сравнивающие цены
• Партнеры продающие наши отели, через
свои веб-сервисы
• Мобильное приложение (Iphone, Android)
ostrovok.ru
6
7. 2. Какие требования к API
• ~ 100 запросов в секунду в пике
• Партнёры накладывают ограничения
на максимальное время (Yandex - 200 мс)
• Нагрузка на API выросла в 4 раза за
полгода
ostrovok.ru
8. 3. С чем мы столкнулись?
• Большое количество клиентов
• Неизвестная эффективность обработки
запросов
• Нет оповещения о серьезных проблемах
ostrovok.ru
8
9. 3. Эксперименты партнёров
• Возникают глупые ошибки
• Разработчикам приходится
заниматься их поддержкой
ostrovok.ru
9
10. 3. Активность партнёров
Текущие статусы:
• Новые
• Активные
• Неактивные (N дней)
• Внутренние (для тестов)
ostrovok.ru
10
11. 3. Реверс–инжиниринг
• Полная картина использования API
• Помощь партнёру, если он что-то
делает не так (и мы видим это)
ostrovok.ru
11
12. 3. Необходим мониторинг API
• Дашборд с ключевыми метриками
• Анализ запросов в реальном времени
• Понимание как партнёры работают с нами
ostrovok.ru
12
13. 4. C помощью мониторинга
мы решаем задачи:
• Бизнеса
• Разработки
ostrovok.ru
13
14. 4. Задачи бизнеса
• Отслеживание эффективности партнёров
• Выполнение требований партнёров
ostrovok.ru
14
15. 4. Задачи разработки
• Снижение количества некоректных запросов
• Какие ошибки возникают на определенной
версии мобильного приложения
• Уменьшение времени ответа на запрос
ostrovok.ru
15
16. 4. Задачи разработки
• Отладка алгоритма ограничения числа
запросов в секунду
• Прогнозирование нагрузки на сервер
ostrovok.ru
16
17. 4. Примеры любознательности
• Пытаются закэшировать данные за 40 лет :)
• Забывают выключить нагрузочные тесты
• И просто неправильно используют API
ostrovok.ru
17
19. График количества запросов в минуту
Запросы с HTTP-статусом 200
Запросы с HTTP-статусом != 200
ostrovok.ru
19
20. График времени ответа
Среднее время ответа
Пороговое значение
Максимальное время ответа
ostrovok.ru
20
21. 5. Выбор из готовых решений
• Готовые решения (Zabbix, Munin)
• Разработка и изменение графиков – не
быстрый процесс
• Не такие гибкие как требуют наши задачи
ostrovok.ru
21
22. 5. Munin
• аггрегация по дням/неделям/месяцам
ostrovok.ru
22
23. 5. Zabbix
• Выстрел из пушки по воробьям
ostrovok.ru
23
24. 5. Cвой мониторинг API
• Perl
• PSGI/Plack (аналог WSGI в Python, Rack в Ruby)
• MySQL
• Bootstrap
ostrovok.ru
24
25. 5. Реализация
Logs API
Plack Браузер
server Мониторинг
rsync
Perl scripts Perl App
MySQL
ostrovok.ru
25
26. 5. Как парсим логи?
• Собираем все логи на одном сервере
• С помощью rsync забираем их
• Perl скрипты парсят логи и заполняют БД
ostrovok.ru
26
27. 5. Какие логи используем?
• access.log от Nginx (не требуют изменения в
существующем API)
• timings.log (код замеряет время потраченное
на определённые уровни работы API)
ostrovok.ru
27
28. 5. Как всё хранится в MySQL?
• Детальная информация за 3 месяца
• Аггрегируем данные в прошлом до часа
• Поэтому БД работает нормально
ostrovok.ru
28
29. 5. А как узнаем партнеров?
• В запросе передается специальный
параметр
• id партнёра + подпись запроса
ostrovok.ru
29
30. 5. Поддержка партнеров
• Есть удобная web-консоль
• Легкое воспроизведение запросов к API
• Службе поддержки не нужно отвлекать
разработчиков
ostrovok.ru
30
36. 6. Преимущества
• Диагностика API
• Реагирование на воздействие
изменений ядра продукта на API
• Улучшение производительности API
ostrovok.ru
36
37. 6. Преимущества
• Определяем на каком уровне возникла
проблема (БД и т.д.)
• Анализ любых странных действий
• Получение статистических данных для
других команд
ostrovok.ru
37
38. 7. Мониторинг это просто
Выбраем метрики:
• Время ответа
• Количество ошибок
• Запросы попадающие под лимит
ostrovok.ru
38
39. 7. Период детализации
• День, неделя, месяц
• По дням
• Прогнозирование
ostrovok.ru
39
40. 7. Пересчет данных
• Добавление новых метрик
• Важно ли вам в любой момент
пересчитать все данные
ostrovok.ru
40
41. 7. Возможные решения
• Zabbix
• Munin
• StatsD + Librato
• Написать свое
ostrovok.ru
41
42. 7. Оповещения
• Определить лимиты
• Оповещение должно быть умным
• SMS / Email
ostrovok.ru
42
43. Выводы
• Мониторинг это важно
• Несложная реализация
• Необязательно использовать готовые
решения
ostrovok.ru
43