29
Использование стека Graphite/StatsD для мониторинга Александр Чистяков, главный инженер Git in Sky, 2014

My talk on Graphite stack on 58it.ru

Embed Size (px)

DESCRIPTION

My talk on Graphite stack on 58it.ru

Citation preview

Page 1: My talk on Graphite stack on 58it.ru

Использование стека Graphite/StatsD для

мониторинга

Александр Чистяков, главный инженер Git in Sky,

2014

Page 2: My talk on Graphite stack on 58it.ru

Давайте познакомимся

§ Меня зовут Саша§ Я работаю в компании Git in Sky§ Мне, почему-то, не нравится должность “Chief

Monitoring Officer”§ Поэтому моя должность называется просто

“главный инженер”

Использование стека Graphite/StatsD для мониторинга. 2014

Page 3: My talk on Graphite stack on 58it.ru

А как называется ваша должность?

§ Старший веб-разработчик?§ Ведущий системный администратор?§ Главный архитектор?§ Верховный шаман?§ Президент Галактики?

Использование стека Graphite/StatsD для мониторинга. 2014

Page 4: My talk on Graphite stack on 58it.ru

О чем пойдет речь?

§ Всё плохо зделоно!§ “Всё” — мы занимаемся веб-проектами, поэтому

речь пойдет о них§ Если точнее — серверной частью веб-проектов§ “Плохо” — работает медленно, некачественно, с

ошибками, ресурсоемко

Использование стека Graphite/StatsD для мониторинга. 2014

Page 5: My talk on Graphite stack on 58it.ru

Краткое руководство “как сделать хорошо”

§ Нажать на кнопку “сделать хорош Если кнопки поблизости нет:§ Собрать стенд — измерить — подумать — что-то

поменять — измерить — подумать — ... — стало хорошо

§ Вопросов нет, кроме

§ “Как собрать стенд?” и “как измерить?”

Использование стека Graphite/StatsD для мониторинга. 2014

Page 6: My talk on Graphite stack on 58it.ru

Как собрать стенд?

§ Лучший стенд повторяет ситуацию в продакшне 1:1§ Надо взять такие же машины, таких же

пользователей и такую же нагрузку§ Чем больше и сложнее проект, тем меньше

вероятность построения хорошего стенда§ Почему бы не измерять параметры “живой”

системы?

Использование стека Graphite/StatsD для мониторинга. 2014

Page 7: My talk on Graphite stack on 58it.ru

Какие параметры измерять?

§ Стандартные параметры любого сервера: потребление CPU, потребление памяти, количество занятого места на диске, IOPS на диске

§ Измеряются в первую очередь, любое средство мониторинга думает, что умеет эти параметры измерять

§ Почему “думает”? (Как измеряется disk latency в Munin?)

Использование стека Graphite/StatsD для мониторинга. 2014

Page 8: My talk on Graphite stack on 58it.ru

Какие параметры измерять?

§ Параметры самого приложения:§ Сколько времени приложение тормозило при обращении к БД?§ Сколько времени приложение тормозило при обращении к внешнему API?§ Какова частота попаданий в кэш? (У нас ведь есть кэш?)§ Важные бизнес-метрики:§ Как идут продажи?§ Сколько пользователей залогинено и кто они?

Использование стека Graphite/StatsD для мониторинга. 2014

Page 9: My talk on Graphite stack on 58it.ru

Что потом делать с этими параметрами?

§ Давайте нарисуем котика!§ Давайте нарисуем графики!§ Важные свойства графиков:§ На них видно, что происходит сейчас§ На них видно, что было в прошлом§ Если долго смотреть на графики, начинаешь

понимать, что происходит в приложении

Использование стека Graphite/StatsD для мониторинга. 2014

Page 10: My talk on Graphite stack on 58it.ru

Переходим к заключительной части

§ Лучшее средство рисования графиков — Graphite§ Почему?§ Потому что его используют в Mail.Ru

Использование стека Graphite/StatsD для мониторинга. 2014

Page 11: My talk on Graphite stack on 58it.ru

Как, вообще, рисуют графики?

§ Надо принять данные§ Надо сохранить данные§ Надо извлечь данные за указанный период§ И нарисовать их на графике!§ Звучит довольно несложно

Использование стека Graphite/StatsD для мониторинга. 2014

Page 12: My talk on Graphite stack on 58it.ru

Как всегда, все дело в деталях

§ Как принять данные?§ Надо написать веб-сервис приема данных, или REST-сервис

приема данных, или просто TCP-сервис приема данных§ Как сохранить данные?§ В базе данных, например, в MySQL§ Как извлечь и нарисовать данные?§ Еще один веб-сервис, умеющий отвечать на GET-запросы

Использование стека Graphite/StatsD для мониторинга. 2014

Page 13: My talk on Graphite stack on 58it.ru

Мы только что придумали Zabbix :(

§ Чем проще протокол обмена данными, тем он лучше будет работать

§ Чем короче сообщения, тем меньше нагрузки на канал они создадут

§ TCP лучше не использовать — что будет, если сервер приема статистики упадет?

§ MySQL тоже лучше не использовать, даже если его использует Mail.Ru

Использование стека Graphite/StatsD для мониторинга. 2014

Page 14: My talk on Graphite stack on 58it.ru

Что мы можем улучшить?

§ Мы всегда точно знаем, сколько именно данных мы будем хранить для заданного параметра удержания

§ Round Robin Database§ Каждая метрика хранится отдельно в своем файле§ Метрики могут усредняться§ ^ Это хорошая идея, если у вас нет бесконечного диска§ UDP, а не TCP

Использование стека Graphite/StatsD для мониторинга. 2014

Page 15: My talk on Graphite stack on 58it.ru

Но постойте

§ Я девочка, я не хочу ничего решать, я хочу платье§ Я верховный шаман, я не хочу ничего настраивать, я

хочу бубен§ Я программист, я не хочу никакие метрики, я хочу

фреймворк

Использование стека Graphite/StatsD для мониторинга. 2014

Page 16: My talk on Graphite stack on 58it.ru

Существуют законченные решения

§ Как мы сюда попали? (Если вы не помните — значит, вы внутри сна)

§ Я приехал сюда на машине§ Как я начал рисовать графики в Graphite?§ Сначала я делал это в Munin, Munin — офигенный!§ Потом появился NewRelic, он настолько офигенный,

что стоит кучу денег

Использование стека Graphite/StatsD для мониторинга. 2014

Page 17: My talk on Graphite stack on 58it.ru

Что не устраивало?

§ Период опроса у Munin — 5 минут, это редко§ Писать плагины для Munin просто, но неэффективно§ Если у вас 50 серверов, однажды Munin начнет

страшно тормозить§ NewRelic, кроме того, что стоит денег, ничего не знает

ни о потрохах конкретного приложения, ни о потрохах виртуальной машины языка Perl

Использование стека Graphite/StatsD для мониторинга. 2014

Page 18: My talk on Graphite stack on 58it.ru

Как устроен Graphite/StatsD стек

§ Dashboard (сначала я пользовался стандартным от Graphite)

§ Веб-сервис отдачи графиков (на Python/Django)

§ Коллектор с RRD-like хранилищем, которое называется Whisper (тоже на Python)

§ Агрегатор/препроцессор с UDP-интерфейсом (собственно, StatsD)

Нетрадиционный PostgreSQL: хранение бинарных данных в БД . 2014

Page 19: My talk on Graphite stack on 58it.ru

Как выглядит стандартный dashboard Graphite

Использование стека Graphite/StatsD для мониторинга. 2014

Page 20: My talk on Graphite stack on 58it.ru

Имплементации StatsD-сервера

§ Исходно — Node.JS§ Есть на C, Perl, Ruby, Python, Go, ...§ Сначала я взял Python

§ Потом был Perl, сейчас я перехожу на Go (меньше памяти, быстрее)

Использование стека Graphite/StatsD для мониторинга. 2014

Page 21: My talk on Graphite stack on 58it.ru

Что работает хорошо

§ Метрики сохраняются§ Графики рисуются :)§ Легко расставлять в коде новые метрики§ Легко создавать новые графики

Использование стека Graphite/StatsD для мониторинга. 2014

Page 22: My talk on Graphite stack on 58it.ru

Что работает плохо

§ Почему-то исторические данные Graphite у меня рисует очень плохо

§ Grafana использует ElasticSearch§ ElasticSearch лучше наружу не выставлять — в нем

уязвимость

Использование стека Graphite/StatsD для мониторинга. 2014

Page 23: My talk on Graphite stack on 58it.ru

Как это выглядит?

§

§ Надо сохранить данные§ Надо извлечь данные за указанный период§ И нарисовать их на графике!§ Звучит довольно несложно

Использование стека Graphite/StatsD для мониторинга. 2014

Page 24: My talk on Graphite stack on 58it.ru

Как этим пользуюсь я

§ Смотрю в редакторе унаследованный код§ Не понимаю в нем НИЧЕГО§ Расставляю в коде какие-нибудь таймеры и какие-

нибудь счетчики§ Смотрю на полученные графики§ Смотрю в редакторе унаследованный код

Использование стека Graphite/StatsD для мониторинга. 2014

Page 25: My talk on Graphite stack on 58it.ru

Кусочек моей работы

§

§ Надо сохранить данные§ Надо извлечь данные за указанный период§ И нарисовать их на графике!§ Звучит довольно несложно

Использование стека Graphite/StatsD для мониторинга. 2014

Page 26: My talk on Graphite stack on 58it.ru

Истории успеха (офигительные)

§ Однажды я инструментировал интерпретатор Perl, чтобы убедиться, что в нем не течет память

§ Это было очень печально:§ В программах на C есть глобальное внутреннее

состояние (переменная errno)§ Аллокации памяти происходят по 5000 раз в секунду§ Передать по сети 5000 метрик — это непросто (я так и

не делал, агрегировал метрики по месту)

Использование стека Graphite/StatsD для мониторинга. 2014

Page 27: My talk on Graphite stack on 58it.ru

Истории успеха (офигительные)

§ Однажды у нас было два асинхронных сервиса на Perl, которые общались друг с другом по HTTP

§ Кроме того, один из них общался со внешним источником

§ Пару раз в месяц в продакшне все начинало переставать работать

§ Пришлось обвешать всё внутри графиками, чтобы найти магическую глобальную переменную

Использование стека Graphite/StatsD для мониторинга. 2014

Page 28: My talk on Graphite stack on 58it.ru

Выводы

§ Рисуйте графики и котиков§ Непрерывно улучшайтесь§ Приходите послушать меня еще раз

Использование стека Graphite/StatsD для мониторинга. 2014

Page 29: My talk on Graphite stack on 58it.ru

С вами был Александр Чистяков,главный инженер Git in Sky

[email protected]://gitinsky.com

http://meetup.com/DevOps-40

Пожалуйста, ваши вопросы.

Спасибо за внимание!