Software quality assurance days 17 Международная конференция по вопросам качества ПО sqadays.com Минск. 29–30 мая 2015 Семерханов Илья T-Systems RUS. Санкт-Петербург. Россия Анализируем результаты перфоманс тестирования с Graphite и Grafana
Анализируем результаты перфоманс тестирования с Graphite и Grafana О себе https://www.linkedin.com/profile/view?id=110159845 Теперь CM \ DevOps Раньше QA https://www.facebook.com/ilya.semerhanov
Анализируем результаты перфоманс тестирования с Graphite и Grafana Перфоманс тестирование. Еще раз? o Много рассказывают как и чем проводить тест o Забывают рассказывать что и как делать дальше
Анализируем результаты перфоманс тестирования с Graphite и Grafana Зачем нам перфоманс? Производительность Стрессоустойчивость Максимальная нагрузка Стабильность
Анализируем результаты перфоманс тестирования с Graphite и Grafana Создаем нагрузку
Анализируем результаты перфоманс тестирования с Graphite и Grafana Создаем модель нагрузки o Определяем ключевые показатели эффективности (KPI) o Выбираем профиль нагрузки o Определяем необходимое количество нагрузки
Анализируем результаты перфоманс тестирования с Graphite и Grafana Создаем тесты Apache ab Apache Jmeter The Grinder Selenium LoadUI Другое
Анализируем результаты перфоманс тестирования с Graphite и Grafana Запускаем тесты и.... анализируем…
Анализируем результаты перфоманс тестирования с Graphite и Grafana Личный опыт Проект eCare: o Проект топ 10 в Telekom Deutschland (T-Mobile) o Миллионы пользователей по всей Германии o UI + веб сервисы + сложная бизнес логика o Сотни новых контрактов заключаются в минуту o Сотни тысяч одновременных сессий ежеминутно o 6 физических серверов и 36 JVM инстансов (Weblogic)
Анализируем результаты перфоманс тестирования с Graphite и Grafana Личный опыт. Проблемы Перфоманс тесты проводились каждый релиз 2мя командами Результаты хоршие На продакшене все равно переодически проблемы Недоверие заказчика к результатам тестов
Анализируем результаты перфоманс тестирования с Graphite и Grafana Метрики. Клиент Время отклика Пропускная способность Среднее время работы до отказа Максимальная нагрузка Измеряется инструментами перфоманс тестирования
Анализируем результаты перфоманс тестирования с Graphite и Grafana Метрики. Сервер Загрузка CPU\JVM Загрузка памяти Время сбора мусора Количество соединений с базой Утекшие соединения Количество сессий
Анализируем результаты перфоманс тестирования с Graphite и Grafana Анализируем Таблица и график в Excel Встроенный отчет (JMeter \ The Grinder) Профайлер (JRMC \ VisualVM \ Yourkit \ JProfiler)
Анализируем результаты перфоманс тестирования с Graphite и Grafana JRMC (JRockit Mission Control) JVM аргументы: -Xmanagement:ssl= false ,authenticate= false ,port=8011,rmiserver_port=8011 - Djava.rmi.server.hostname=localhost
Анализируем результаты перфоманс тестирования с Graphite и Grafana JRMC (JRockit Mission Control) Что можно посмотреть: o Загрузка CPU на JVM o Загрузка памяти на JVM o Количество тредов o Время для GC o Содержимое памяти
Анализируем результаты перфоманс тестирования с Graphite и Grafana JRMC (JRockit Mission Control) Что нельзя посмотреть: o Загрузка CPU на сервере o Загрузка памяти на сервере o Количество сессий o Количество подключений к базе данных o Специфичные для приложения метрики o Динамику изменений
Анализируем результаты перфоманс тестирования с Graphite и Grafana Хотим больше данных
Анализируем результаты перфоманс тестирования с Graphite и Grafana Может нам поможет готовый инструмент... Например Grafana и Graphite?
Анализируем результаты перфоманс тестирования с Graphite и Grafana Graphite Масштабируемая система построения графиков в реальном времени. Специализированная база данных для метрик + бекенд для их обработки + GUI
Анализируем результаты перфоманс тестирования с Graphite и Grafana Grafana Визуальный редактор и панель для отображения метрик для Graphite. o Неограниченное количество панелей o Набор фильтров o Редактор запросов к Graphite o Кастомизация o и многое другое
Анализируем результаты перфоманс тестирования с Graphite и Grafana Graphite + Grafana
Анализируем результаты перфоманс тестирования с Graphite и Grafana Graphite + Grafana
Анализируем результаты перфоманс тестирования с Graphite и Grafana Graphite + Grafana
Анализируем результаты перфоманс тестирования с Graphite и Grafana Компоненты Graphite Webapp – GUI Graphite Carbon – бекенд Whisper – специализированная файловая база данных Graphite API – REST API Grafana – Rich GUI Collectors – сборщики данных
Анализируем результаты перфоманс тестирования с Graphite и Grafana Архитектура
Анализируем результаты перфоманс тестирования с Graphite и Grafana Откуда брать данные Операционная система Сервера приложения через JMX (MBeans) Приложение через JMX (Кастомные MBeans \ Jolokia) База данных
Анализируем результаты перфоманс тестирования с Graphite и Grafana Пример коллектора Формат метрик для графита: metric_path value timestamp\n Получаем данные из сервера приложения через JMX (python): server = rs . serverRuntime machine_metric = domain_metric + "." + server . currentMachine server_metric = machine_metric + ".%s" % server . name for ds in server . JDBCServiceRuntime . JDBCDataSourceRuntimeMBeans : metric = server_metric + ".jdbc.%s" % ds . name send ( "%s.connections.available" % metric , ds . numAvailable ) send ( "%s.connections.total" % metric , ds . connectionsTotalCount ) send ( "%s.connections.leaked" % metric , ds . leakedConnectionCount ) Отправлем метрику в Graphite
Анализируем результаты перфоманс тестирования с Graphite и Grafana Пример коллектора Запись метрик в Graphite: def send ( name , value ): global sock try : sock . sendall ( "%s %f %d\n" % ( name , value , int ( time . time ()))) info ( "%s %f %d" % ( name , value , int ( time . time ()))) except : sock = socket . socket () sock . connect (( GRAPHITE_CARBON_HOST , GRAPHITE_CARBON_PORT )) send ( name , value ) Данные отправлются через сокет в Graphite с указанием текущего времени
Анализируем результаты перфоманс тестирования с Graphite и Grafana Создание графика в Grafana 1. Создать dashboard 2. Создать панель 3. Выбрать метрики и нужные машины 4. Выбрать функции преобразования 5. Сохранить
Анализируем результаты перфоманс тестирования с Graphite и Grafana Создание графика в Grafana
Анализируем результаты перфоманс тестирования с Graphite и Grafana Функции, фильтры и трансформации o averageSeries o aggregateLine o countSeries o diffSeries o highestAverage o Integral o timeShift http://graphite.readthedocs.org/en/latest/functions.html
Анализируем результаты перфоманс тестирования с Graphite и Grafana Сдвиг по времени
Анализируем результаты перфоманс тестирования с Graphite и Grafana Graphite API /render endpoint # Большой график http://graphite/render?target=server.web1.load&height=800&width=600 # Средняя нагрузка за 12 часов http://graphite/render?target=averageSeries(server.web*.load)&from=- 12hours # Выгрузка данных в json http://graphite/render?target=app.numUsers&format=json
Анализируем результаты перфоманс тестирования с Graphite и Grafana Заключение Анализировать надо данные не только на стороне клиента, но и на сервере Grafana + Graphite – замена профайлерам при проведении перфоманс тестов Графики в Grafana дают большие возможности по анализу результатов тестирования Graphite API удобный доступ к метрикам для отчетов Test and have fun
Анализируем результаты перфоманс тестирования с Graphite и Grafana Спасибо за внимание https://www.linkedin.com/profile/view?id=110159845 https://www.facebook.com/ilya.semerhanov