
Привет, Хабр! Меня зовут Эд, я менеджер биллинга в 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-инфраструктуры.

Основные метрики FinOps и способы отслеживания в Selectel
Теперь разберем, как это выглядит из панели управления.
Затраты на проекты
Первый вопрос, который возникает на подступах к управлению затратами, — это сколько мы сейчас тратим на облачные услуги. Хорошо, если мы сможем получить сумму. Лучше — если можем получить ее с агрегацией, например, по проектам.
На примере Selectel на этот вопрос помогает ответить раздел в панели управления Потребление платформы. Здесь есть информация о текущей стоимости за час, день или месяц.

Потребление

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

Потребление и оплата разнесены на разные графики, поскольку оплата происходит с агрегацией раз в час и отстает от потребления. В некоторых случаях, когда услуга предоставляется в долг, разрыв может быть значительным. На графиках расходов информацию о потреблении и оплате можно группировать по проектам, объектам, ресурсам и регионам. Это добавляет гибкости при бюджетировании, если необходимо управлять большим пулом ресурсов.
Для отслеживания потребления в своей системе мониторинга можно использовать публичное 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 минут славы. Для больших команд его преимущества неоспоримы, а главное — имеют экономическое выражение, поскольку оптимизация ресурсов в больших проектах еще более заметна.

