Rate this post

В наших с статьях, продолжаем знакомить читателя с методологией работы DevOps, сегодня рассмотрим одну из задач «Автоматизация нагрузочного тестирования». В качестве средства автоматизации будем использовать несколько инструментов: Jmeter,TeamCity, Grafana.n

Как выполнялось нагрузочное тестирование

Мы настраивали мониторинг серверов, отслеживали производительность памяти, процессора, ОС и другие метрики при нагрузочном тестировании сервера. Зачастую нужно было следить за базой данных, очередями, иногда отслеживать лог файлы. Все эти задачи были реализованы с помощью самописных скриптов которые собирали информацию в единую базу, и отчеты мы получали в формате cvs.nnнагрузочное тестированиеn

Негативные моменты данного процесса:

  • Анализировать данные очень сложно и не удобно
  • Ограниченность функционала, отчеты были практически статическими, без возможности использовать фильтры, что так же являлось не удобным
  • Основной минус такого подхода, отчет получался только по результату теста

Автоматизация нагрузочного тестирования

Зачем изобретать велосипед, если есть готовые решения. В итоге мы решили использовать несколько продуктов для автоматизации тестирования.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 строит запросы для различных источников.nnавтоматизация тестированияn

Итоговая конфигурация

Рассмотрим как все это объединено в одну систему. Основные показатели ОС мониторятся Zabbix, с дополнением скриптов на питоне. Собранные данных хранятся в БД InfluxDB, а отображение происходит в Grafana.nnнагрузочное тестированиеn

Автоматизируем тестирование

Инфраструктура для анализа готова, займемся вопрос автоматизации процесса тестирования. Для этих целей использовали продукт Apache JMeter:n

  • умеет эмулировать действия реальных пользователей
  • генерит данные о работе сервера (время обработки запросов и ответов)
  • выполняет отправку результатов в БД InfluxDB для отображения в Grafana

При внедрении автоматизации было необходимо справиться с проблемами:n

  • простой способ деплоя этого инструмента на сервер
  • упростить процесс нагрузочного тестирования
  • организовать интеграцию результатов в графику
  • обеспечить онлайн мониторинг выполнения тестирования

Как решить данные задачи:n

  • Был разработан скрипт, для выполнения пользовательских действий
  • Тестирование запустили через TeamCity
  • Получили онлайн данные работы продукта в графическом режиме
  • Для обновления скриптов использовали GIT

У Jmeter есть плагин Backend Listener, который может отправлять данные в InfluxDB.nnнагрузочное тестирование автоматизацияn

Результат

В итоге для запуска тестирования необходимо выполнить задачу в TeamCity, с заранее определенными параметрами и далее все данные нагрузочного тестирования будут отображаться интерактивно в графиках. При обновлении скриптов, они автоматом обновляются через GIT в TeamCity.n

Необходимо построить процесс разработки, тестирования, внедрения, услуги DevOps администратора, [email protected]