Press F, чтобы рассчитать использование облачных ресурсов

ja_vn9mpondehwi1_uhgsahsg9s.png


Привет, Хабр! Меня зовут Эд, я менеджер биллинга в Selectel. Сегодня хотел бы рассказать про подход FinOps, который объединяет продуктовое мышление, мониторинг и управление облачными ресурсами. А еще показать графики и разобрать, кому и зачем это вообще нужно. Спойлер: не только кросс-командным проектам. Приглашаю за подробностями под кат.

Да кто такой этот ваш FinOps


FinOps (Financial Operations или Cloud Financial Operations) — это практика управления затратами, которая помогает компаниям получить наиболее эффективное и экономически выгодное использование облачных ресурсов.

Например, у нас есть IT-инфраструктура с сотней виртуальных машин с блекджеком. Мы понимаем общую стоимость владения и поддержки, но не в разрезе сколько ресурсов из общего пула относится к конкретному проекту.

FinOps помогает привязать вычислительные мощности к деньгам и учитывать стоимость IT-инфраструктуры в бюджете проекта. Мониторинг позволяет получить детальную аналитику потребления, чтобы проводить бюджетирование, основываясь на реальных цифрах.


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

Основные цели FinOps


Мотивация внедрения FinOps во многом зависит от состава команды и зрелости процессов. Среди основных причин можно выделить:

  • Прогнозирование и подсчет расхода текущих ресурсов. Это помогает компаниям детально понимать свои затраты на облачные услуги и контролировать их.
  • Создание культуры принятия экономически обоснованных решений. Подход включает в себя понимание реальных затрат на облако и их влияние на общую бизнес-модель.
  • Увеличение бизнес-ценности облачных инвестиций в on-premise. Каждый потраченный на облако рубль должен способствовать достижению целей.


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

Особенности подхода


Кроме основной цели, о которой говорилось выше, FinOps может быть использован с более глобальными фреймворками по управлению IT-ресурсами. Например, IT Service Management (ITSM) и IT Asset Management (ITAM), но они не сосредоточены исключительно на облачных затратах. Подробнее о совместном использовании фреймворков можно прочитать на официальном сайте FinOps Foundation.

Преимущества

  • Контроль затрат. FinOps помогает управлять и контролировать затраты на услуги, учитывая динамичный и гибкий характер облачных ресурсов.
  • Повышение эффективности. Подход помогает компаниям получать больше выгоды от своих облачных инвестиций, позволяя менеджерам принимать обоснованные решения о том, как и где использовать облачные ресурсы.
  • Прозрачность и отчетность. FinOps обеспечивает прозрачность и облегчает отчетность в отношении затрат на облачные услуги. Это помогает планировать бюджеты в более долгосрочной перспективе.
  • Культура принятия решений. FinOps поддерживает культуру, в которой инженеры и представители бизнеса совместно принимают решения, основываясь на полной информации о затратах.


Немного практики


Проснувшись однажды утром после беспокойного сна, Грегор Замза обнаружил, что он использует FinOps.

Действительно, процесс внедрения отличается от большинства других подходов, поскольку может начаться почти случайно. Если продакт-менеджер выгрузил ряд отчетов по затратам на облако для себя, своей команды и бизнес-аналитиков, а также вносит в них апдейты на основе обратной связи, то процесс запущен.

Ситуация

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

Решение

FinOps помогает составить общую картину, чтобы специалисты получили данные для принятия решений. Наблюдение за графиками и локализация инцидентов помогают оптимизировать расходы, перераспределить облачные ресурсы и не потерять производительность IT-инфраструктуры.


1hdqmj1bvguax5hnugdz0ci_jbw.jpeg

Основные метрики FinOps и способы отслеживания в Selectel


Теперь разберем, как это выглядит из панели управления.

Затраты на проекты


Первый вопрос, который возникает на подступах к управлению затратами, — это сколько мы сейчас тратим на облачные услуги. Хорошо, если мы сможем получить сумму. Лучше — если можем получить ее с агрегацией, например, по проектам.

На примере Selectel на этот вопрос помогает ответить раздел в панели управления Потребление платформы. Здесь есть информация о текущей стоимости за час, день или месяц.

io0uu4kadrvw1linnx23dwryl4q.png

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

Потребление

rinukmrwgrnidixvqelslshcjxo.png

С одной стороны, получается, что подход больше полезен крупным компаниям и распределенным командам. Им нужно регулярно нужно актуализировать мощности и ресурсы, чтобы они не простаивали и находились в достаточном запасе при увеличении нагрузки. Отдельной строкой отметим полезность FinOps для продактов при планировании новых фичей. Так они могут рассчитать ресурсы и спланировать реалистичные сроки запуска.

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

Оплата

0ixtillpcrfs3qpny7fq-qsurjg.png


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

Для отслеживания потребления в своей системе мониторинга можно использовать публичное API, описанное в документации, в блоке Get statistics.

Как альтернатива системе мониторинга, можно использовать Python-скрипты для анализа данных.


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

#разница в процентах потребления
import json
import requests
from datetime import datetime, timedelta


# параметры запроса
url = "https://api.selectel.ru/v1/cloud_billing/statistic/consumption"
params = {
   "provider_keys": ["vpc", "mks", "dbaas", "craas", "serverless"],
   "start": "2023-05-26T00:00:00",
   "end": "2023-05-29T23:59:59",
   "locale": "ru",
   "group_type": "metric",
   "period_group_type": "day"
}
headers = {
   "X-Token": "ваш ключ"
}


# отправка GET-запроса
response = requests.get(url, params=params, headers=headers)


# проверка статуса ответа
if response.status_code != 200:
   print(f"Ошибка: {response.status_code}")
   exit()


# загрузка JSON-ответа
json_data = response.json()['data']


# создание словаря для хранения ключей и значений
value_dict = {}


# обход элементов в списке данных
for item in json_data:
   # создание ключа из id и provider_key
   key = f"{item['metric']['id']}:{item['provider_key']}:{item['metric']['name']}"
   # преобразование даты в объект datetime
   date = datetime.strptime(item['period'], '%Y-%m-%dT%H:%M:%S')
   # добавление значения в словарь
   if key in value_dict:
       value_dict[key][date] = item['value']
   else:
       value_dict[key] = {date: item['value']}


# вычисление разницы в процентах для каждого ключа и вывод результата
for key, values in value_dict.items():
   # сортировка по дате
   dates = sorted(values.keys())
   # вычисление разницы в процентах для каждого дня
   for i in range(1, len(dates)):
       prev_value = values[dates[i - 1]]
       current_value = values[dates[i]]
       if prev_value == 0:
           delta_percent = 0
       else:
           delta_percent = (current_value - prev_value) / prev_value * 100
       date_str = dates[i].strftime('%Y-%m-%d')
       print(f"Ключ: {key}, дата: {date_str}, разница в процентах: {delta_percent:.2f}%")

Пример вывода

Ключ: 79c969b1-ec35-43aa-a27f-3a932816c31b:vpc:test_56, дата: 2023-05-23, разница в процентах: 36.75%
Ключ: 79c969b1-ec35-43aa-a27f-3a932816c31b:vpc:test_56, дата: 2023-05-24, разница в процентах: 426.01%
Ключ: 79c969b1-ec35-43aa-a27f-3a932816c31b:vpc:test_56, дата: 2023-05-25, разница в процентах: 188.50%
Ключ: 79c969b1-ec35-43aa-a27f-3a932816c31b:vpc:test_56, дата: 2023-05-26, разница в процентах: 1.07%
Ключ: 79c969b1-ec35-43aa-a27f-3a932816c31b:vpc:test_56, дата: 2023-05-27, разница в процентах: -0.08%
Ключ: 79c969b1-ec35-43aa-a27f-3a932816c31b:vpc:test_56, дата: 2023-05-28, разница в процентах: 0.00%
Ключ: 79c969b1-ec35-43aa-a27f-3a932816c31b:vpc:test_56, дата: 2023-05-29, разница в процентах: -0.09%
Ключ: 9ce7f9b2-b506-4a4c-8154-c9fba8e1758e:vpc:test12.n, дата: 2023-05-23, разница в процентах: 0.12%
Ключ: 9ce7f9b2-b506-4a4c-8154-c9fba8e1758e:vpc:test12.n, дата: 2023-05-24, разница в процентах: -0.35%
Ключ: 9ce7f9b2-b506-4a4c-8154-c9fba8e1758e:vpc:test12.n, дата: 2023-05-25, разница в процентах: 0.38%
Ключ: 9ce7f9b2-b506-4a4c-8154-c9fba8e1758e:vpc:test12.n, дата: 2023-05-26, разница в процентах: -0.04%
Ключ: 9ce7f9b2-b506-4a4c-8154-c9fba8e1758e:vpc:test12.n, дата: 2023-05-27, разница в процентах: 0.00%
Ключ: 9ce7f9b2-b506-4a4c-8154-c9fba8e1758e:vpc:test12.n, дата: 2023-05-28, разница в процентах: 0.00%
Ключ: 9ce7f9b2-b506-4a4c-8154-c9fba8e1758e:vpc:test12.n, дата: 2023-05-29, разница в процентах: 0.14%

Таким образом, FinOps позволяет мониторить и реагировать на следующие ситуации:

  • возникновение «неотслеживаемых» расходов,
  • простой ресурсов,
  • полная загрузка,
  • превышение заранее определенных порогов бюджетов по проекту,
  • изменение тенденций потребления.


Как насчет ЭДО


ЭДО как и FInOps позволяет упростить жизнь и сократить затраты, хотя бы временные на работу с документами.

  • Отправление бухгалтерских документов по умолчанию на почту и в ЭДО. Читайте подробнее о том, как это работает в статье.
  • При регистрации отправляем приглашение для обмена документами в ЭДО юридическим лицам, если они зарегистрированы в системе ЭДО.
  • Автовыставление счетов.
  • Можно подключить дополнительных пользователей для получения документов, уведомлений и счетов.


Заключение


Использование FinOps нельзя связать с какой-либо внешней тенденцией на рынке. То есть подход не выйдет из моды, когда закончатся его 15 минут славы. Для больших команд его преимущества неоспоримы, а главное — имеют экономическое выражение, поскольку оптимизация ресурсов в больших проектах еще более заметна.

© Habrahabr.ru