my talk on graphite stack on 58it.ru
DESCRIPTION
My talk on Graphite stack on 58it.ruTRANSCRIPT
Использование стека Graphite/StatsD для
мониторинга
Александр Чистяков, главный инженер Git in Sky,
2014
Давайте познакомимся
§ Меня зовут Саша§ Я работаю в компании Git in Sky§ Мне, почему-то, не нравится должность “Chief
Monitoring Officer”§ Поэтому моя должность называется просто
“главный инженер”
Использование стека Graphite/StatsD для мониторинга. 2014
А как называется ваша должность?
§ Старший веб-разработчик?§ Ведущий системный администратор?§ Главный архитектор?§ Верховный шаман?§ Президент Галактики?
Использование стека Graphite/StatsD для мониторинга. 2014
О чем пойдет речь?
§ Всё плохо зделоно!§ “Всё” — мы занимаемся веб-проектами, поэтому
речь пойдет о них§ Если точнее — серверной частью веб-проектов§ “Плохо” — работает медленно, некачественно, с
ошибками, ресурсоемко
Использование стека Graphite/StatsD для мониторинга. 2014
Краткое руководство “как сделать хорошо”
§ Нажать на кнопку “сделать хорош Если кнопки поблизости нет:§ Собрать стенд — измерить — подумать — что-то
поменять — измерить — подумать — ... — стало хорошо
§ Вопросов нет, кроме
§ “Как собрать стенд?” и “как измерить?”
Использование стека Graphite/StatsD для мониторинга. 2014
Как собрать стенд?
§ Лучший стенд повторяет ситуацию в продакшне 1:1§ Надо взять такие же машины, таких же
пользователей и такую же нагрузку§ Чем больше и сложнее проект, тем меньше
вероятность построения хорошего стенда§ Почему бы не измерять параметры “живой”
системы?
Использование стека Graphite/StatsD для мониторинга. 2014
Какие параметры измерять?
§ Стандартные параметры любого сервера: потребление CPU, потребление памяти, количество занятого места на диске, IOPS на диске
§ Измеряются в первую очередь, любое средство мониторинга думает, что умеет эти параметры измерять
§ Почему “думает”? (Как измеряется disk latency в Munin?)
Использование стека Graphite/StatsD для мониторинга. 2014
Какие параметры измерять?
§ Параметры самого приложения:§ Сколько времени приложение тормозило при обращении к БД?§ Сколько времени приложение тормозило при обращении к внешнему API?§ Какова частота попаданий в кэш? (У нас ведь есть кэш?)§ Важные бизнес-метрики:§ Как идут продажи?§ Сколько пользователей залогинено и кто они?
Использование стека Graphite/StatsD для мониторинга. 2014
Что потом делать с этими параметрами?
§ Давайте нарисуем котика!§ Давайте нарисуем графики!§ Важные свойства графиков:§ На них видно, что происходит сейчас§ На них видно, что было в прошлом§ Если долго смотреть на графики, начинаешь
понимать, что происходит в приложении
Использование стека Graphite/StatsD для мониторинга. 2014
Переходим к заключительной части
§ Лучшее средство рисования графиков — Graphite§ Почему?§ Потому что его используют в Mail.Ru
Использование стека Graphite/StatsD для мониторинга. 2014
Как, вообще, рисуют графики?
§ Надо принять данные§ Надо сохранить данные§ Надо извлечь данные за указанный период§ И нарисовать их на графике!§ Звучит довольно несложно
Использование стека Graphite/StatsD для мониторинга. 2014
Как всегда, все дело в деталях
§ Как принять данные?§ Надо написать веб-сервис приема данных, или REST-сервис
приема данных, или просто TCP-сервис приема данных§ Как сохранить данные?§ В базе данных, например, в MySQL§ Как извлечь и нарисовать данные?§ Еще один веб-сервис, умеющий отвечать на GET-запросы
Использование стека Graphite/StatsD для мониторинга. 2014
Мы только что придумали Zabbix :(
§ Чем проще протокол обмена данными, тем он лучше будет работать
§ Чем короче сообщения, тем меньше нагрузки на канал они создадут
§ TCP лучше не использовать — что будет, если сервер приема статистики упадет?
§ MySQL тоже лучше не использовать, даже если его использует Mail.Ru
Использование стека Graphite/StatsD для мониторинга. 2014
Что мы можем улучшить?
§ Мы всегда точно знаем, сколько именно данных мы будем хранить для заданного параметра удержания
§ Round Robin Database§ Каждая метрика хранится отдельно в своем файле§ Метрики могут усредняться§ ^ Это хорошая идея, если у вас нет бесконечного диска§ UDP, а не TCP
Использование стека Graphite/StatsD для мониторинга. 2014
Но постойте
§ Я девочка, я не хочу ничего решать, я хочу платье§ Я верховный шаман, я не хочу ничего настраивать, я
хочу бубен§ Я программист, я не хочу никакие метрики, я хочу
фреймворк
Использование стека Graphite/StatsD для мониторинга. 2014
Существуют законченные решения
§ Как мы сюда попали? (Если вы не помните — значит, вы внутри сна)
§ Я приехал сюда на машине§ Как я начал рисовать графики в Graphite?§ Сначала я делал это в Munin, Munin — офигенный!§ Потом появился NewRelic, он настолько офигенный,
что стоит кучу денег
Использование стека Graphite/StatsD для мониторинга. 2014
Что не устраивало?
§ Период опроса у Munin — 5 минут, это редко§ Писать плагины для Munin просто, но неэффективно§ Если у вас 50 серверов, однажды Munin начнет
страшно тормозить§ NewRelic, кроме того, что стоит денег, ничего не знает
ни о потрохах конкретного приложения, ни о потрохах виртуальной машины языка Perl
Использование стека Graphite/StatsD для мониторинга. 2014
Как устроен Graphite/StatsD стек
§ Dashboard (сначала я пользовался стандартным от Graphite)
§ Веб-сервис отдачи графиков (на Python/Django)
§ Коллектор с RRD-like хранилищем, которое называется Whisper (тоже на Python)
§ Агрегатор/препроцессор с UDP-интерфейсом (собственно, StatsD)
Нетрадиционный PostgreSQL: хранение бинарных данных в БД . 2014
Как выглядит стандартный dashboard Graphite
Использование стека Graphite/StatsD для мониторинга. 2014
Имплементации StatsD-сервера
§ Исходно — Node.JS§ Есть на C, Perl, Ruby, Python, Go, ...§ Сначала я взял Python
§ Потом был Perl, сейчас я перехожу на Go (меньше памяти, быстрее)
Использование стека Graphite/StatsD для мониторинга. 2014
Что работает хорошо
§ Метрики сохраняются§ Графики рисуются :)§ Легко расставлять в коде новые метрики§ Легко создавать новые графики
Использование стека Graphite/StatsD для мониторинга. 2014
Что работает плохо
§ Почему-то исторические данные Graphite у меня рисует очень плохо
§ Grafana использует ElasticSearch§ ElasticSearch лучше наружу не выставлять — в нем
уязвимость
Использование стека Graphite/StatsD для мониторинга. 2014
Как это выглядит?
§
§ Надо сохранить данные§ Надо извлечь данные за указанный период§ И нарисовать их на графике!§ Звучит довольно несложно
Использование стека Graphite/StatsD для мониторинга. 2014
Как этим пользуюсь я
§ Смотрю в редакторе унаследованный код§ Не понимаю в нем НИЧЕГО§ Расставляю в коде какие-нибудь таймеры и какие-
нибудь счетчики§ Смотрю на полученные графики§ Смотрю в редакторе унаследованный код
Использование стека Graphite/StatsD для мониторинга. 2014
Кусочек моей работы
§
§ Надо сохранить данные§ Надо извлечь данные за указанный период§ И нарисовать их на графике!§ Звучит довольно несложно
Использование стека Graphite/StatsD для мониторинга. 2014
Истории успеха (офигительные)
§ Однажды я инструментировал интерпретатор Perl, чтобы убедиться, что в нем не течет память
§ Это было очень печально:§ В программах на C есть глобальное внутреннее
состояние (переменная errno)§ Аллокации памяти происходят по 5000 раз в секунду§ Передать по сети 5000 метрик — это непросто (я так и
не делал, агрегировал метрики по месту)
Использование стека Graphite/StatsD для мониторинга. 2014
Истории успеха (офигительные)
§ Однажды у нас было два асинхронных сервиса на Perl, которые общались друг с другом по HTTP
§ Кроме того, один из них общался со внешним источником
§ Пару раз в месяц в продакшне все начинало переставать работать
§ Пришлось обвешать всё внутри графиками, чтобы найти магическую глобальную переменную
Использование стека Graphite/StatsD для мониторинга. 2014
Выводы
§ Рисуйте графики и котиков§ Непрерывно улучшайтесь§ Приходите послушать меня еще раз
Использование стека Graphite/StatsD для мониторинга. 2014
С вами был Александр Чистяков,главный инженер Git in Sky
[email protected]://gitinsky.com
http://meetup.com/DevOps-40
Пожалуйста, ваши вопросы.
Спасибо за внимание!