SlideShare uma empresa Scribd logo
1 de 27
Мониторинг производительности web-
приложений на Python
Special for Minsk Python Meetup
Коротно о себе
Занимаюсь web программированием с 1999 года
Работал в Badoo, LinguaLeo и много где еще ;)
В настоящий момент работаю в http://melesta-games.com
Текущий проект небольшой
150-200 rps, 1 сервер, 300kb JSON на запрос ;)
Но мы активно РАСТЕМ
Виды мониторинга в web проектах
● Мониторинг программной и аппаратной
инфраструктуры (Zabbix, Icinga, Munin)
● Мониторинг пользовательской активности
(Google Analytics Alerts, внутренняя аналитика)
● Функциональный мониторинг
(Zabbix+Selenium+BrowserMob, site24x7.com)
● Мониторинг производительности приложения
(graphite, grafana, influxdb, pinba, statsd, datadoghq,
NewRelic) - НАШ ВЫБОР ;)
Мониторинг производительности приложения
это:● Измерение и анализ времени на обработку запроса и
различных его частей на application серверах
● Измерение и анализ времени загрузки страниц и ajax
запросов в браузере (на клиенте)
● Измерение потребления системных ресурсов (Disk,
Network, RAM, CPU) на application серверах в рамках
приложения
● Мониторинг кол-ва и аггрегация по типам ошибок,
возникающих при обработке запросов
Цели и особенности мониторинга производительности:
● Отвечает на вопрос какие именно участки кода
тормозят, но не отвечает на вопрос ПОЧЕМУ
● Помогает понять, какое влияние на скорость
обработки запросов оказывает то или иное изменение
в коде
● Помогает принять быстрое решение в случае
«выкатили новый релиз и все вкорячило»
Инструменты для сбора и анализа данных (1 из 3)
● Время исполнения на клиенте: https://github.com/dpp-
name/jinba - сбор метрик
● Время исполения на сервере:
https://github.com/johnnoone/pynba - сбор метрик
http://statsd.readthedocs.org - сбор метрик
http://pinba.org/, https://bitbucket.org/bloodjazman/pinba2graphite -
аггрегация метрик
https://github.com/github/brubeck - аггрегация метрик
http://influxdb.org/ - хранение метрик
http://graphite.readthedocs.org - хранение метрик
http://grafana.org/ - визуализация
http://github.com/urbanairship/tessera - визуализация
Инструменты для сбора и анализа данных (2 из 3)
● Системные метрики и сервисы
(PostgreSQL, redis, rabbit etc)
https://github.com/python-diamond/Diamond
● Ошибки во время исполнения
https://github.com/getsentry/sentry
● Детекторы аномалий
http://github.com/etsy/oculus, https://github.com/etsy/skyline
https://github.com/nathanielc/morgoth, https://github.com/eleme/bell.js
● Оповещения
https://github.com/klen/graphite-beacon
Инструменты для сбора и анализа данных (3 из 3)
● SaaS (все в одном)
http://newrelic.com/application-monitoring/pricing
https://www.datadoghq.com/pricing/ (хороший free пакет)
http://okmeter.io/
http://www.appdynamics.com/pricing/
● SaaS Детекторы аномалий
https://anomaly.io/pricing/ (не пробовал, потому что дорого :)
http://t.onthe.io (не пробовал, непонятно как работает)
ЧТО Я ПОЧУВСТВОВАЛ
КОГДА СОБРАЛ ВСЕ ЭТО ВМЕСТЕ ;)
Что такое “гистограмма распределения”
1)t = time.time()
timer = time.time()-t # время ms
2)отправляем таймер на “сервер статистики” (с
названием и с тегами)
3)Один раз за период (1 минута)
аггрегируем ЧАСТОТУ срабатывания таймера
(сколько раз было)
по ПЕРИОДУ (1 минута),
по “категориям значений” (<0.1s, 0.1-0.2s, 0.2-
0.5s, 0.5s-1s, >1s)
4)строим график
Хорошая производительность ;)
Плохая производительность ;)
Провокационное мнение
На самом деле этих трех графиков
ДОСТАТОЧНО ;)
для понимания где “тормоза”
в проекте
в котором от 1 до 10 серверов
Метрики PYNBA в python коде cyclone - монитор
https://gist.github.com/Slach/00c86b1341f738bc9dd5
Класс мониторинга реализован в виде MixIn, который подмешивается во все
классы контроллеров
Перед началом обработки запроса Mixin создает экземпляр кастомного
класса наследуемого от pynba.ScriptMonitor
После завершения, получает статус ответа и размер отосланных данных
Отсылает protobuf по UDP на PINBA сервер
Метрики PYNBA в python коде cyclone -
контроллер
class SetProfileHandler(CustomPynbaMonitoringMixin,
cyclone.web.RequestHandler):
@defer.inlineCallbacks
def post(self):
with self.pynba.timer(state='parse_request'):
parsed_request = service.unpack_request(self.request)
...
with self.pynba.timer(state='save_profile_data'):
yield profile.save_to_keyvalue(profile_data)
Метрики PYNBA в python коде - flask - монитор
https://gist.github.com/Slach/0cfdcc99711869d1764e
Добавляется старт pynba.utils.ScriptMonitor в функции с декораторами
@app.before_first_request, @app.before_request
И отсылка UDP protobuf пакета в фукнции с декораторами
@app.after_request, @app.teardown_request
Метрики PYNBA в python коде - flask - контроллер
@app.route('/test_action/', methods=['POST'])
def test_action():
with app.pynba.timer(state='flask_timer_global'):
# do something with database
data = {'var': 'All OK'}
status = 200
# вложенный таймер
with app.pynba.timer(state ='flask_generate_response'):
resp_string = app.render(data, 'template.html')
response = flask.Response(response=resp_string, status=status,
mimetype='text/html')
Недостатки pynba + pinba
В cyclone код асинхронный, значит в python процессе одновременно
существует несколько RequestHandler и соответсвенно необходимо
оборачивать “библиотечный” код в контект сразу в коде контоллера,
либо пробрасывать self.pynba через параметры внутрь библиотечного кода
Сложно анализировать ситуацию если есть вложенные куски кода, которые
нужно померить отдельными таймерами
Как поставить pinba1.1 + mysql5.6 в Ubuntu
Рецепт на fabric
https://gist.github.com/Slach/d61acbd153ea6d3e6c2b
Метрики statsd в python
pip install dogstatsd-python
import statsd
self.statsd = statsd.DogStatsd()
t = time.time()
# do something …
self.statsd.histogram(‘metric_name’,time.time() - t, tags={‘script’:self.request.uri’})
Недостатки statsd + python
● 1 метрика = 1 UDP пакет (можно отложить через pipeline)
● Нет нормальной python реализации histogram через
декораторы и контексты в pystatd (надо дописать ;)
● Нет глобального понятия “request” (надо делать замер
глобальной метрики), brubek реализация сервера не
поддерживает теги, надо включать их в название метрики
Дополнительные замечания
● При оценке времени не смотрите в МИНИМУМ (в идеале он должен
стремиться к нулю ;) или в СРЕДНЕЕ
● Смотрите «распределение по гистограмме»
● мы используем 0.2, 0.5, 1.0, 2.0 sec для СКРИПТОВ
● и 0.1, 0.2, 0.5, 1.0s для ТЕГОВ
● Для оценки качественных изменений, лучше смотреть перцентили (50%
и 90%)
● Снижение количества обращений к серверу может такой же хорошей
оптимизацией как и уменьшение времени работы отдельного URL
bloodjazman@gmail.com
skype: blooodjazman
http://github.com/Slach
http://bitbucket.com/bloodjazman
Задавайте вопросы ;)

Mais conteúdo relacionado

Mais procurados

Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Ontico
 
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Ontico
 
Нагруженный поиск на Sphinx
Нагруженный поиск на SphinxНагруженный поиск на Sphinx
Нагруженный поиск на Sphinx
Roman Pavlushko
 
Борис Каплуновский, Aviasales.ru
Борис Каплуновский, Aviasales.ruБорис Каплуновский, Aviasales.ru
Борис Каплуновский, Aviasales.ru
Ontico
 
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Ontico
 

Mais procurados (19)

Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
 
Михаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяц
Михаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяцМихаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяц
Михаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяц
 
Архитектура поиска в Avito / Андрей Смирнов (Avito)
Архитектура поиска в Avito / Андрей Смирнов (Avito)Архитектура поиска в Avito / Андрей Смирнов (Avito)
Архитектура поиска в Avito / Андрей Смирнов (Avito)
 
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
 
Нагруженный поиск на Sphinx
Нагруженный поиск на SphinxНагруженный поиск на Sphinx
Нагруженный поиск на Sphinx
 
Avito Stachka 2012
Avito Stachka 2012Avito Stachka 2012
Avito Stachka 2012
 
Доклад Ильи Аблеева на DevOps Meetup "Мониторинг высоконагруженного проекта".
Доклад Ильи Аблеева на DevOps Meetup "Мониторинг высоконагруженного проекта".Доклад Ильи Аблеева на DevOps Meetup "Мониторинг высоконагруженного проекта".
Доклад Ильи Аблеева на DevOps Meetup "Мониторинг высоконагруженного проекта".
 
Борис Каплуновский, Aviasales.ru
Борис Каплуновский, Aviasales.ruБорис Каплуновский, Aviasales.ru
Борис Каплуновский, Aviasales.ru
 
Типовое внедрение мониторинга
Типовое внедрение мониторингаТиповое внедрение мониторинга
Типовое внедрение мониторинга
 
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
 
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
 
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
 
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
 
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
 
Мониторинг, когда не тестируешь
Мониторинг, когда не тестируешьМониторинг, когда не тестируешь
Мониторинг, когда не тестируешь
 
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
 
Профилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системахПрофилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системах
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
 

Semelhante a мониторинг производительности Web приложений на python

Pavel Dovbush Toster
Pavel Dovbush Toster Pavel Dovbush Toster
Pavel Dovbush Toster
Pavel Dovbush
 
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центрМониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
sportgid
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Ontico
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Anton Baranov
 
вебинар взаимодействие Info watch traffic monitor c субд oracle
вебинар   взаимодействие  Info watch traffic monitor c субд oracleвебинар   взаимодействие  Info watch traffic monitor c субд oracle
вебинар взаимодействие Info watch traffic monitor c субд oracle
IW_test
 
Postman тестирование api v1.0 (1)
Postman тестирование api v1.0 (1)Postman тестирование api v1.0 (1)
Postman тестирование api v1.0 (1)
DataArt
 
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The GrinderИлья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
SQALab
 

Semelhante a мониторинг производительности Web приложений на python (20)

"Web Vitals monitoring & optimizations", Erik Himiranov
"Web Vitals monitoring & optimizations", Erik Himiranov"Web Vitals monitoring & optimizations", Erik Himiranov
"Web Vitals monitoring & optimizations", Erik Himiranov
 
Pavel Dovbush Toster
Pavel Dovbush Toster Pavel Dovbush Toster
Pavel Dovbush Toster
 
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центрМониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
 
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Применение фреймворка GStreamer в системе видеонаблюдения
Применение фреймворка GStreamer в системе видеонаблюденияПрименение фреймворка GStreamer в системе видеонаблюдения
Применение фреймворка GStreamer в системе видеонаблюдения
 
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
 
Jiramania презентации @augspb
Jiramania презентации   @augspbJiramania презентации   @augspb
Jiramania презентации @augspb
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
 
вебинар взаимодействие Info watch traffic monitor c субд oracle
вебинар   взаимодействие  Info watch traffic monitor c субд oracleвебинар   взаимодействие  Info watch traffic monitor c субд oracle
вебинар взаимодействие Info watch traffic monitor c субд oracle
 
Postman тестирование api v1.0 (1)
Postman тестирование api v1.0 (1)Postman тестирование api v1.0 (1)
Postman тестирование api v1.0 (1)
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
 
Александр Коротин. Безопасность систем управления турбинами в электроэнергетике
Александр Коротин. Безопасность систем управления турбинами в электроэнергетикеАлександр Коротин. Безопасность систем управления турбинами в электроэнергетике
Александр Коротин. Безопасность систем управления турбинами в электроэнергетике
 
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The GrinderИлья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
Илья Евлампиев - Нагрузочное тестирование веб-приложений с помощью The Grinder
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 
Protrarctor and Angular
Protrarctor and AngularProtrarctor and Angular
Protrarctor and Angular
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
 

мониторинг производительности Web приложений на python

  • 2. Коротно о себе Занимаюсь web программированием с 1999 года Работал в Badoo, LinguaLeo и много где еще ;) В настоящий момент работаю в http://melesta-games.com Текущий проект небольшой 150-200 rps, 1 сервер, 300kb JSON на запрос ;) Но мы активно РАСТЕМ
  • 3. Виды мониторинга в web проектах ● Мониторинг программной и аппаратной инфраструктуры (Zabbix, Icinga, Munin) ● Мониторинг пользовательской активности (Google Analytics Alerts, внутренняя аналитика) ● Функциональный мониторинг (Zabbix+Selenium+BrowserMob, site24x7.com) ● Мониторинг производительности приложения (graphite, grafana, influxdb, pinba, statsd, datadoghq, NewRelic) - НАШ ВЫБОР ;)
  • 4. Мониторинг производительности приложения это:● Измерение и анализ времени на обработку запроса и различных его частей на application серверах ● Измерение и анализ времени загрузки страниц и ajax запросов в браузере (на клиенте) ● Измерение потребления системных ресурсов (Disk, Network, RAM, CPU) на application серверах в рамках приложения ● Мониторинг кол-ва и аггрегация по типам ошибок, возникающих при обработке запросов
  • 5. Цели и особенности мониторинга производительности: ● Отвечает на вопрос какие именно участки кода тормозят, но не отвечает на вопрос ПОЧЕМУ ● Помогает понять, какое влияние на скорость обработки запросов оказывает то или иное изменение в коде ● Помогает принять быстрое решение в случае «выкатили новый релиз и все вкорячило»
  • 6. Инструменты для сбора и анализа данных (1 из 3) ● Время исполнения на клиенте: https://github.com/dpp- name/jinba - сбор метрик ● Время исполения на сервере: https://github.com/johnnoone/pynba - сбор метрик http://statsd.readthedocs.org - сбор метрик http://pinba.org/, https://bitbucket.org/bloodjazman/pinba2graphite - аггрегация метрик https://github.com/github/brubeck - аггрегация метрик http://influxdb.org/ - хранение метрик http://graphite.readthedocs.org - хранение метрик http://grafana.org/ - визуализация http://github.com/urbanairship/tessera - визуализация
  • 7. Инструменты для сбора и анализа данных (2 из 3) ● Системные метрики и сервисы (PostgreSQL, redis, rabbit etc) https://github.com/python-diamond/Diamond ● Ошибки во время исполнения https://github.com/getsentry/sentry ● Детекторы аномалий http://github.com/etsy/oculus, https://github.com/etsy/skyline https://github.com/nathanielc/morgoth, https://github.com/eleme/bell.js ● Оповещения https://github.com/klen/graphite-beacon
  • 8. Инструменты для сбора и анализа данных (3 из 3) ● SaaS (все в одном) http://newrelic.com/application-monitoring/pricing https://www.datadoghq.com/pricing/ (хороший free пакет) http://okmeter.io/ http://www.appdynamics.com/pricing/ ● SaaS Детекторы аномалий https://anomaly.io/pricing/ (не пробовал, потому что дорого :) http://t.onthe.io (не пробовал, непонятно как работает)
  • 9.
  • 10. ЧТО Я ПОЧУВСТВОВАЛ КОГДА СОБРАЛ ВСЕ ЭТО ВМЕСТЕ ;)
  • 11. Что такое “гистограмма распределения” 1)t = time.time() timer = time.time()-t # время ms 2)отправляем таймер на “сервер статистики” (с названием и с тегами) 3)Один раз за период (1 минута) аггрегируем ЧАСТОТУ срабатывания таймера (сколько раз было) по ПЕРИОДУ (1 минута), по “категориям значений” (<0.1s, 0.1-0.2s, 0.2- 0.5s, 0.5s-1s, >1s) 4)строим график
  • 14.
  • 15. Провокационное мнение На самом деле этих трех графиков ДОСТАТОЧНО ;) для понимания где “тормоза” в проекте в котором от 1 до 10 серверов
  • 16.
  • 17.
  • 18. Метрики PYNBA в python коде cyclone - монитор https://gist.github.com/Slach/00c86b1341f738bc9dd5 Класс мониторинга реализован в виде MixIn, который подмешивается во все классы контроллеров Перед началом обработки запроса Mixin создает экземпляр кастомного класса наследуемого от pynba.ScriptMonitor После завершения, получает статус ответа и размер отосланных данных Отсылает protobuf по UDP на PINBA сервер
  • 19. Метрики PYNBA в python коде cyclone - контроллер class SetProfileHandler(CustomPynbaMonitoringMixin, cyclone.web.RequestHandler): @defer.inlineCallbacks def post(self): with self.pynba.timer(state='parse_request'): parsed_request = service.unpack_request(self.request) ... with self.pynba.timer(state='save_profile_data'): yield profile.save_to_keyvalue(profile_data)
  • 20. Метрики PYNBA в python коде - flask - монитор https://gist.github.com/Slach/0cfdcc99711869d1764e Добавляется старт pynba.utils.ScriptMonitor в функции с декораторами @app.before_first_request, @app.before_request И отсылка UDP protobuf пакета в фукнции с декораторами @app.after_request, @app.teardown_request
  • 21. Метрики PYNBA в python коде - flask - контроллер @app.route('/test_action/', methods=['POST']) def test_action(): with app.pynba.timer(state='flask_timer_global'): # do something with database data = {'var': 'All OK'} status = 200 # вложенный таймер with app.pynba.timer(state ='flask_generate_response'): resp_string = app.render(data, 'template.html') response = flask.Response(response=resp_string, status=status, mimetype='text/html')
  • 22. Недостатки pynba + pinba В cyclone код асинхронный, значит в python процессе одновременно существует несколько RequestHandler и соответсвенно необходимо оборачивать “библиотечный” код в контект сразу в коде контоллера, либо пробрасывать self.pynba через параметры внутрь библиотечного кода Сложно анализировать ситуацию если есть вложенные куски кода, которые нужно померить отдельными таймерами
  • 23. Как поставить pinba1.1 + mysql5.6 в Ubuntu Рецепт на fabric https://gist.github.com/Slach/d61acbd153ea6d3e6c2b
  • 24. Метрики statsd в python pip install dogstatsd-python import statsd self.statsd = statsd.DogStatsd() t = time.time() # do something … self.statsd.histogram(‘metric_name’,time.time() - t, tags={‘script’:self.request.uri’})
  • 25. Недостатки statsd + python ● 1 метрика = 1 UDP пакет (можно отложить через pipeline) ● Нет нормальной python реализации histogram через декораторы и контексты в pystatd (надо дописать ;) ● Нет глобального понятия “request” (надо делать замер глобальной метрики), brubek реализация сервера не поддерживает теги, надо включать их в название метрики
  • 26. Дополнительные замечания ● При оценке времени не смотрите в МИНИМУМ (в идеале он должен стремиться к нулю ;) или в СРЕДНЕЕ ● Смотрите «распределение по гистограмме» ● мы используем 0.2, 0.5, 1.0, 2.0 sec для СКРИПТОВ ● и 0.1, 0.2, 0.5, 1.0s для ТЕГОВ ● Для оценки качественных изменений, лучше смотреть перцентили (50% и 90%) ● Снижение количества обращений к серверу может такой же хорошей оптимизацией как и уменьшение времени работы отдельного URL