В наших с статьях, продолжаем знакомить читателя с методологией работы DevOps, сегодня рассмотрим одну из задач «Автоматизация нагрузочного тестирования». В качестве средства автоматизации будем использовать несколько инструментов: Jmeter,TeamCity, Grafana.n
Как выполнялось нагрузочное тестирование
Мы настраивали мониторинг серверов, отслеживали производительность памяти, процессора, ОС и другие метрики при нагрузочном тестировании сервера. Зачастую нужно было следить за базой данных, очередями, иногда отслеживать лог файлы. Все эти задачи были реализованы с помощью самописных скриптов которые собирали информацию в единую базу, и отчеты мы получали в формате cvs.nnn
Негативные моменты данного процесса:
- Анализировать данные очень сложно и не удобно
- Ограниченность функционала, отчеты были практически статическими, без возможности использовать фильтры, что так же являлось не удобным
- Основной минус такого подхода, отчет получался только по результату теста
Автоматизация нагрузочного тестирования
Зачем изобретать велосипед, если есть готовые решения. В итоге мы решили использовать несколько продуктов для автоматизации тестирования.n
Способ хранения данных
InfluxDB была выбрана в качестве системы хранения данных. Данная СУБД имеет возможность (редкую для баз данных) хранения временных данных (таких как события, аналитика, различные метрики). InfluxDB имеет возможность собирать данные «на лету», а использовать данные очень удобно так как есть возможность применять SQL подобный синтаксис.n
Основные преимущества:
- Автоматизация удаления устаревших данных
- Возможность использования регулярные выражения
- Умение маштабироваться
- Поддержка различных языков, через подключение библиотек
- Проста в установке и поддержке
Посмотрим на примере как можно использовать InfluxDB для хранения изменений. Мы хотим замерять температуры сервера в определенном интервале.nnДля этого используем следующие параметрыn
- Теги: machine, type
- Измерение: temperature
- Поля: external_temperature, internal_temperatre
Для сбора и фильтрации применяются теги, в полях размещаются полученные данные, значения сохраняются в виде комбинации «измерение + тег + timestamp» c определенной точностью. А время хранения данных задается автоматической очисткой.n
temperature, machine-unit42,type=assembly internal=32, external=100 1434055562000000035
Такое изменение легко формируется, быстро передается и использует минимум ресурсов.n
Мониторинг
Существует достаточно много средств мониторинг, мы решили остановиться на Zabbix. Будем использовать агенты для Linux и Windows серверов. Для виртуальных машин ESXi использована функция autodiscovery.n
Обработка
В качестве обработчика полученных данных используем open source проект grafana, он отлично визуализирует, строит графики и шаблоны запросов и дашбордов. Grafana строит запросы для различных источников.nnn
Итоговая конфигурация
Рассмотрим как все это объединено в одну систему. Основные показатели ОС мониторятся Zabbix, с дополнением скриптов на питоне. Собранные данных хранятся в БД InfluxDB, а отображение происходит в Grafana.nnn
Автоматизируем тестирование
Инфраструктура для анализа готова, займемся вопрос автоматизации процесса тестирования. Для этих целей использовали продукт Apache JMeter:n
- умеет эмулировать действия реальных пользователей
- генерит данные о работе сервера (время обработки запросов и ответов)
- выполняет отправку результатов в БД InfluxDB для отображения в Grafana
При внедрении автоматизации было необходимо справиться с проблемами:n
- простой способ деплоя этого инструмента на сервер
- упростить процесс нагрузочного тестирования
- организовать интеграцию результатов в графику
- обеспечить онлайн мониторинг выполнения тестирования
Как решить данные задачи:n
- Был разработан скрипт, для выполнения пользовательских действий
- Тестирование запустили через TeamCity
- Получили онлайн данные работы продукта в графическом режиме
- Для обновления скриптов использовали GIT
У Jmeter есть плагин Backend Listener, который может отправлять данные в InfluxDB.nnn
Результат
В итоге для запуска тестирования необходимо выполнить задачу в TeamCity, с заранее определенными параметрами и далее все данные нагрузочного тестирования будут отображаться интерактивно в графиках. При обновлении скриптов, они автоматом обновляются через GIT в TeamCity.n
Необходимо построить процесс разработки, тестирования, внедрения, услуги DevOps администратора, [email protected]