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
Анализируем результаты тестирования производительности с Graphite и Grafana