my talk on graphite stack on 58it.ru

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

Upload: alexander-chistyakov

Post on 29-Nov-2014

493 views

Category:

Technology


0 download

DESCRIPTION

My talk on Graphite stack on 58it.ru

TRANSCRIPT

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

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

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