Метрики DevOps – откуда брать данные для расчетов

Честно говоря, Иван часто посмеивался над тщетными усилиями коллег из отдела мониторинга. Они прилагали огромные усилия для реализации метрик, которые им заказывало руководство компании. Они были настолько заняты, что больше никому ничего не хотели делать.

А руководству всё было мало – оно постоянно заказывало всё новые и новые метрики, очень быстро переставая пользоваться тем, что были сделаны ранее.

Последнее время все только и говорили про LeadTime – время поставки бизнесовых фич. Метрика показала сумасшедшее число – 200 дней на поставку одной задачи. Как же все охали, ахали и воздевали руки к небу!

Через некоторое время шум постепенно затих и от руководства поступил заказ на создание еще одной метрики.

Ивану было совершенно понятно, что и новая метрика точно также тихонько помрёт в тёмном уголке.

Действительно, размышлял Иван, знание числа совершенно никому ни о чём не говорит. 200 дней или 2 дня – нет никакой разницы, потому что по числу невозможно определить причину и понять, хорошо это или плохо.

Это типичная ловушка метрик: кажется, что новая метрика расскажет суть бытия и объяснит какой-то тайный секрет. Все так на это надеются, но ничего почему-то не происходит. Да потому что секрет надо искать вовсе не в метриках!

Для Ивана это был пройденный этап. Он понимал, что метрики – это просто обычная деревянная линейка для измерений, а все секреты надо искать в объекте влияния, т.е. в том, что эту метрику формирует.

Для интернет-магазина объектом влияния будут его клиенты, приносящие деньги, а для DevOps – команды, создающие и раскатывающие дистрибутивы с использованием конвейера.

Однажды, устроившись в холле в удобном кресле Иван решил как следует продумать как бы он хотел видеть метрики DevOps с учётом того, что объектом влияния являются команды.

Цель метрик DevOps

Понятно, что всем хочется уменьшить время поставки. 200 дней – это, конечно, никуда не годится.

Но как, вот в чем вопрос?

В компании работают сотни команд, а в день через DevOps-конвейер проходят тысячи дистрибутивов. Реальное время поставки будет выглядеть как распределение. У каждой из команд будет своё собственное время и свои собственные особенности. Как среди этого месива можно найти хоть что-то?

Ответ возник сам собой – надо найти проблемные команды и разобраться, что у них происходит и почему так долго, а у «хороших» команд научиться как всё делать быстро. А для этого требуется измерить время, проведенное командами на каждом из стендов DevOps:

Метрики DevOps – откуда брать данные для расчетов

«Целью системы будет отбор команд по времени прохождения стендов, т.е. в итоге мы должны получить список команд с выбранным временем, а не цифру.

Если мы узнаем сколько времени суммарно потрачено на стенд и сколько времени потрачено на простои между стендами, то сможем найти команды, позвонить им и более подробно разобраться в причинах и устранить их», — подумал Иван.

Метрики DevOps – откуда брать данные для расчетов

Как посчитать время поставки для DevOps

Для подсчета необходимо было углубиться в процесс DevOps и его сущности.

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

Все задачи в компании регистрировались в Jira. Когда задача бралась в работу, для неё создавался бранч, а после реализации делался коммит в BitBucket и Pull Request. При принятии PR (Pull Request) автоматически создавался дистрибутив и сохранялся в хранилище Nexus.

Метрики DevOps – откуда брать данные для расчетов

Далее дистрибутив раскатывался на нескольких стендах с помощью Jenkins для проверки правильности накатки, автоматического и ручного тестирования:

Метрики DevOps – откуда брать данные для расчетов

Иван расписал из каких систем какую информацию можно взять, чтобы просчитать время на стендах:

  • Из Nexus – Время создания дистрибутива и название папки, в которой содержался код команды
  • Из Jenkins – Время старта, длительность и результат отработки каждой джобы, название стенда (в параметрах джобы), стейджи (шаги джоба), ссылка на дистрибутив в Nexus.
  • Jira и BitBucket Иван решил в конвейер не включать, т.к. они больше относились к этапу разработки, а не к прокатке готового дистрибутива по стендам.

Метрики DevOps – откуда брать данные для расчетов

На основе имеющейся в распоряжении информации прорисовывалась такая схема:

Метрики DevOps – откуда брать данные для расчетов

Зная сколько времени создаётся дистрибутивов и сколько времени затрачивается на каждый из них, можно легко посчитать общие затраты на прохождение всего конвейера DevOps (полный цикл).

Вот какие DevOps-метрики получились у Ивана в итоге:

  • Количество созданных дистрибутивов
  • Доля дистрибутивов, «зашедших» на стенд и «прошедших» стенд
  • Время, проведенное на стенде (цикл стенда)
  • Полный цикл (суммарное время по всем стендам)
  • Длительность джобов
  • Простой между стендами
  • Простой между запусками джобов на одном стенде

С одной стороны, метрики очень хорошо характеризовали конвейер DevOps с точки зрения времени, с другой — считались очень просто.

Довольный хорошо проделанной работой Иван составил презентацию и пошел представлять её руководству.

Обратно он выходил хмурый и с опущенными руками.

— Это фиаско, братан — улыбнулся ироничный коллега…

Продолжение читайте в статье «Как быстрые результаты Ивану помогли».

Источник: habr.com