Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Использование стека
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
alex@gitinsky.com
http://gitinsky.com
http://meetup.com/DevOps-40
Пожалуйста, ваши вопросы.
Спасибо за внимание!

More Related Content

My talk on Graphite stack on 58it.ru

  • 2. Давайте познакомимся § Меня зовут Саша § Я работаю в компании Git in Sky § Мне, почему-то, не нравится должность “Chief Monitoring Officer” § Поэтому моя должность называется просто “главный инженер” Использование стека Graphite/StatsD для мониторинга. 2014
  • 3. А как называется ваша должность? § Старший веб-разработчик? § Ведущий системный администратор? § Главный архитектор? § Верховный шаман? § Президент Галактики? Использование стека Graphite/StatsD для мониторинга. 2014
  • 4. О чем пойдет речь? § Всё плохо зделоно! § “Всё” — мы занимаемся веб-проектами, поэтому речь пойдет о них § Если точнее — серверной частью веб-проектов § “Плохо” — работает медленно, некачественно, с ошибками, ресурсоемко Использование стека Graphite/StatsD для мониторинга. 2014
  • 5. Краткое руководство “как сделать хорошо” § Нажать на кнопку “сделать хорошо” § Если кнопки поблизости нет: § Собрать стенд — измерить — подумать — что-то поменять — измерить — подумать — ... — стало хорошо § Вопросов нет, кроме § “Как собрать стенд?” и “как измерить?” Использование стека Graphite/StatsD для мониторинга. 2014
  • 6. Как собрать стенд? § Лучший стенд повторяет ситуацию в продакшне 1:1 § Надо взять такие же машины, таких же пользователей и такую же нагрузку § Чем больше и сложнее проект, тем меньше вероятность построения хорошего стенда § Почему бы не измерять параметры “живой” системы? Использование стека Graphite/StatsD для мониторинга. 2014
  • 7. Какие параметры измерять? § Стандартные параметры любого сервера: потребление CPU, потребление памяти, количество занятого места на диске, IOPS на диске § Измеряются в первую очередь, любое средство мониторинга думает, что умеет эти параметры измерять § Почему “думает”? (Как измеряется disk latency в Munin?) Использование стека Graphite/StatsD для мониторинга. 2014
  • 8. Какие параметры измерять? § Параметры самого приложения: § Сколько времени приложение тормозило при обращении к БД? § Сколько времени приложение тормозило при обращении к внешнему API? § Какова частота попаданий в кэш? (У нас ведь есть кэш?) § Важные бизнес-метрики: § Как идут продажи? § Сколько пользователей залогинено и кто они? Использование стека Graphite/StatsD для мониторинга. 2014
  • 9. Что потом делать с этими параметрами? § Давайте нарисуем котика! § Давайте нарисуем графики! § Важные свойства графиков: § На них видно, что происходит сейчас § На них видно, что было в прошлом § Если долго смотреть на графики, начинаешь понимать, что происходит в приложении Использование стека Graphite/StatsD для мониторинга. 2014
  • 10. Переходим к заключительной части § Лучшее средство рисования графиков — Graphite § Почему? § Потому что его используют в Mail.Ru Использование стека Graphite/StatsD для мониторинга. 2014
  • 11. Как, вообще, рисуют графики? § Надо принять данные § Надо сохранить данные § Надо извлечь данные за указанный период § И нарисовать их на графике! § Звучит довольно несложно Использование стека Graphite/StatsD для мониторинга. 2014
  • 12. Как всегда, все дело в деталях § Как принять данные? § Надо написать веб-сервис приема данных, или REST-сервис приема данных, или просто TCP-сервис приема данных § Как сохранить данные? § В базе данных, например, в MySQL § Как извлечь и нарисовать данные? § Еще один веб-сервис, умеющий отвечать на GET-запросы Использование стека Graphite/StatsD для мониторинга. 2014
  • 13. Мы только что придумали Zabbix :( § Чем проще протокол обмена данными, тем он лучше будет работать § Чем короче сообщения, тем меньше нагрузки на канал они создадут § TCP лучше не использовать — что будет, если сервер приема статистики упадет? § MySQL тоже лучше не использовать, даже если его использует Mail.Ru Использование стека Graphite/StatsD для мониторинга. 2014
  • 14. Что мы можем улучшить? § Мы всегда точно знаем, сколько именно данных мы будем хранить для заданного параметра удержания § Round Robin Database § Каждая метрика хранится отдельно в своем файле § Метрики могут усредняться § ^ Это хорошая идея, если у вас нет бесконечного диска § UDP, а не TCP Использование стека Graphite/StatsD для мониторинга. 2014
  • 15. Но постойте § Я девочка, я не хочу ничего решать, я хочу платье § Я верховный шаман, я не хочу ничего настраивать, я хочу бубен § Я программист, я не хочу никакие метрики, я хочу фреймворк Использование стека Graphite/StatsD для мониторинга. 2014
  • 16. Существуют законченные решения § Как мы сюда попали? (Если вы не помните — значит, вы внутри сна) § Я приехал сюда на машине § Как я начал рисовать графики в Graphite? § Сначала я делал это в Munin, Munin — офигенный! § Потом появился NewRelic, он настолько офигенный, что стоит кучу денег Использование стека Graphite/StatsD для мониторинга. 2014
  • 17. Что не устраивало? § Период опроса у Munin — 5 минут, это редко § Писать плагины для Munin просто, но неэффективно § Если у вас 50 серверов, однажды Munin начнет страшно тормозить § NewRelic, кроме того, что стоит денег, ничего не знает ни о потрохах конкретного приложения, ни о потрохах виртуальной машины языка Perl Использование стека Graphite/StatsD для мониторинга. 2014
  • 18. Как устроен Graphite/StatsD стек § Dashboard (сначала я пользовался стандартным от Graphite) § Веб-сервис отдачи графиков (на Python/Django) § Коллектор с RRD-like хранилищем, которое называется Whisper (тоже на Python) § Агрегатор/препроцессор с UDP- интерфейсом (собственно, StatsD) Нетрадиционный PostgreSQL: хранение бинарных данных в БД . 2014
  • 19. Как выглядит стандартный dashboard Graphite Использование стека Graphite/StatsD для мониторинга. 2014
  • 20. Имплементации StatsD-сервера § Исходно — Node.JS § Есть на C, Perl, Ruby, Python, Go, ... § Сначала я взял Python § Потом был Perl, сейчас я перехожу на Go (меньше памяти, быстрее) Использование стека Graphite/StatsD для мониторинга. 2014
  • 21. Что работает хорошо § Метрики сохраняются § Графики рисуются :) § Легко расставлять в коде новые метрики § Легко создавать новые графики Использование стека Graphite/StatsD для мониторинга. 2014
  • 22. Что работает плохо § Почему-то исторические данные Graphite у меня рисует очень плохо § Grafana использует ElasticSearch § ElasticSearch лучше наружу не выставлять — в нем уязвимость Использование стека Graphite/StatsD для мониторинга. 2014
  • 23. Как это выглядит? § § Надо сохранить данные § Надо извлечь данные за указанный период § И нарисовать их на графике! § Звучит довольно несложно Использование стека Graphite/StatsD для мониторинга. 2014
  • 24. Как этим пользуюсь я § Смотрю в редакторе унаследованный код § Не понимаю в нем НИЧЕГО § Расставляю в коде какие-нибудь таймеры и какие- нибудь счетчики § Смотрю на полученные графики § Смотрю в редакторе унаследованный код Использование стека Graphite/StatsD для мониторинга. 2014
  • 25. Кусочек моей работы § § Надо сохранить данные § Надо извлечь данные за указанный период § И нарисовать их на графике! § Звучит довольно несложно Использование стека Graphite/StatsD для мониторинга. 2014
  • 26. Истории успеха (офигительные) § Однажды я инструментировал интерпретатор Perl, чтобы убедиться, что в нем не течет память § Это было очень печально: § В программах на C есть глобальное внутреннее состояние (переменная errno) § Аллокации памяти происходят по 5000 раз в секунду § Передать по сети 5000 метрик — это непросто (я так и не делал, агрегировал метрики по месту) Использование стека Graphite/StatsD для мониторинга. 2014
  • 27. Истории успеха (офигительные) § Однажды у нас было два асинхронных сервиса на Perl, которые общались друг с другом по HTTP § Кроме того, один из них общался со внешним источником § Пару раз в месяц в продакшне все начинало переставать работать § Пришлось обвешать всё внутри графиками, чтобы найти магическую глобальную переменную Использование стека Graphite/StatsD для мониторинга. 2014
  • 28. Выводы § Рисуйте графики и котиков § Непрерывно улучшайтесь § Приходите послушать меня еще раз Использование стека Graphite/StatsD для мониторинга. 2014
  • 29. С вами был Александр Чистяков, главный инженер Git in Sky alex@gitinsky.com http://gitinsky.com http://meetup.com/DevOps-40 Пожалуйста, ваши вопросы. Спасибо за внимание!