ADG Оставить заявку
Блог DevOps 6 мин чтения

Как мы срезали облачный счёт на 34%: что сработало, а что нет

FinOps без магии: аудит, ночное гашение сред, автоскейлинг и Spot. Что реально дало экономию, а что оказалось косметикой.

Контекст момента

FinOps в РФ в 2026 из модного слова превращается в строку бюджета, которую с DevOps спрашивает финдиректор

Финдиректор прислал таблицу. В ней три строки: облако за май, июнь, июль — и стрелка вверх. Вопрос один: «что происходит и что с этим делать». Это типичная точка входа в FinOps для большинства клиентов, с которыми мы работаем.

У этого клиента — продуктовая компания, Яндекс Cloud, около 80 ресурсов в аккаунте — мы уложились в −34% от исходного счёта за первый месяц после обследования. Это попадает в нашу типовую вилку 20–40%, которую мы называем ещё до старта. Но дьявол в деталях: не всё сработало одинаково, и одна среда переехала болезненно.

Что показало обследование

Обследование заняло 3–5 рабочих дней — это стандартный срок для нашего аудита инфраструктуры. За это время мы смотрим два среза: что реально потребляется (метрики утилизации) и за что выставляется счёт (детализация биллинга).

Картина оказалась классической.

Зомби-ресурсы. Восемь дисков без привязанных ВМ, два балансировщика без бэкендов, четыре снапшота полугодовой давности. Всё это тихо оплачивалось. Аналогичную ситуацию мы описывали в сентябре прошлого года — зомби-ресурсы дают заметную долю счёта почти у всех, кто никогда не проводил ревизию. Здесь суммарно вышло около 8% ежемесячных расходов.

Staging живёт как prod. Три dev/staging-окружения работали круглосуточно, семь дней в неделю. Реально разработчики заходили туда в рабочее время по будням. Ночью и в выходные — тишина, но счётчик шёл.

Oversized инстансы. Несколько ВМ с загрузкой CPU 5–15% при пике. Классика после миграции: брали с запасом, потом забыли пересмотреть.

Отсутствие автоскейлинга. Основной продуктовый кластер Kubernetes был зафиксирован на пиковом размере — то есть ночью он гонял те же ноды, что и в дневной нагрузке.

Что сделали и что дало реальный эффект

Чистка мёртвых ресурсов — быстро и без риска

Первый шаг — снос зомби-ресурсов. Диски, снапшоты, балансировщики, остановленные ВМ с оплачиваемым диском. Это делается за один день, не требует согласований с разработчиками и не несёт операционных рисков.

Эффект: −8% счёта, мгновенно.

Ночное гашение тестовых сред

Настроили расписание остановки dev и staging-окружений: в 20:00 по будням и на всё время выходных ВМ останавливаются, в 8:00 поднимаются обратно. Конфигурация через Terraform, запуск через cron-задачи в облачном планировщике.

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

Эффект: −12% счёта (две из трёх тестовых сред × время простоя ~65% от суток).

Автоскейлинг кластера

Kubernetes Cluster Autoscaler настроили с минимумом 3 ноды и максимумом 12. Ночью кластер схлопывается до минимума, в дневной пик разворачивается под нагрузку. Это потребовало нескольких итераций настройки PodDisruptionBudget и проверки, что все деплойменты корректно переживают выселение пода.

Эффект: −7% счёта (ноды простаивали ~40% времени суток).

Spot-инстансы — где получилось и где нет

Spot-инстансы дали самую заметную экономию на единицу усилий: нагрузка на воркеры обработки данных — асинхронные задачи без состояния — переехала на Spot полностью. Экономия на этой группе составила около 60% стоимости воркеров.

Но Spot потребовал работы, которую нельзя недооценивать.

Честный trade-off: перед переводом нагрузки нужно было убедиться в её переносимости: задачи должны корректно прерываться по SIGTERM с сохранением прогресса, health-check должен давать кластеру время на graceful shutdown перед вытеснением пода. Для воркеров обработки это было реализовано — там изначально была идемпотентная логика с checkpoint-ами.

Но одна среда — легаси-сервис с накопленным состоянием в памяти и без graceful shutdown — «переехала» болезненно. После первого вытеснения Spot-ноды сервис потерял очередь задач, которая жила в памяти. Восстановление заняло несколько часов ручной работы. Этот сервис мы вернули на обычные инстансы и сделали его перевод на Spot отдельной задачей со сроком — требуется рефакторинг логики прерывания.

Spot не универсален. Нагрузку на него переносить только если она переносима: stateless, с идемпотентными операциями и проработанным завершением.

Суммарный эффект Spot: +7% к общей экономии (с учётом того, что часть нагрузки осталась на обычных инстансах).

Downsizing oversized ВМ

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

Эффект: −6% счёта.

Итог по статьям

Мера Экономия
Чистка зомби-ресурсов −8%
Ночное гашение тестовых сред −12%
Автоскейлинг кластера −7%
Spot-инстансы (воркеры) −7%
Downsizing ВМ −6%
Итого −34%

Цифры округлены; реальный результат зависит от профиля нагрузки и того, что именно обнаружит обследование.

Что оказалось косметикой

Несколько вещей, которые казались перспективными, дали мало.

Смена тарифного плана провайдера. Перешли на более длинный commitment — экономия есть, но она уже была учтена в базовом счёте, и отдельно выделить её сложно. Это полезно, но не даёт быстрого эффекта.

Чистка логов в Object Storage. Нашли несколько bucket-ов с логами без lifecycle policy — аналогичную ситуацию мы описывали при построении FinOps-пайплайна для нескольких провайдеров. Настроили удаление старых объектов. Экономия есть, но для этого клиента хранилище составляло малую долю общего счёта — эффект в пределах 1–2%.

Что дальше

−34% — это первый месяц после обследования. Дальше кривая выполаживается: зомби и очевидные oversized ресурсы убраны, оставшееся сложнее. Следующий рубеж — rightsizing на основе накопленных метрик утилизации, это требует нескольких недель наблюдений.

FinOps не заканчивается на разовой чистке. Чтобы счёт не рос обратно, нужен процесс: видимость затрат по командам (хотя бы теги ресурсов и дашборд), ревью новых ресурсов при создании, регулярная проверка зомби-ресурсов. Без этого через полгода картина возвращается к исходной.

Если хотите понять, откуда берётся ваш облачный счёт — начните с обследования. Мы проводим его за 3–5 рабочих дней и даём конкретный список того, что можно срезать и на сколько. Подробнее об услуге — на странице DevOps-аутсорсинга; если нужен разовый аудит без постановки на поддержку — на странице аудита инфраструктуры.

Контакт

Нужна такая же инженерная работа?

Опишите задачу и контекст. Ответим в течение рабочего дня, при необходимости подпишем NDA.