Yandex
Биллинг коллектор Яндекс Облака⚓︎
Коллектор данных об инфраструктуре, размещённой в публичном IaaS/PaaS облаке Яндекс, предназначен для ежедневного:
-
сбора данных из API Яндекс Облака,
-
генерации финансовых (биллинговых) отчётов за прошедшие сутки в виде CSV-файлов,
-
загрузки этих CSV-файлов в заданный бакет объектного (S3) хранилища.
Системные требования⚓︎
Коллектор представляет собой одно Java-приложение. Поэтому для его работы подойдёт любое уже имеющееся Java-окружение версии 21 и старше на основе Ubuntu версии 24.
Возможно использование выделенной виртуальной машины со следующими минимальными техническими характеристиками:
-
ОС: Ubuntu 24.04 LTS
-
CPU: 4 ядра 2GHz
-
RAM: 1 GB
-
Диск: 10 GB
-
Сеть: 1Gbit интерфейс, доступ к API Яндекс Облака и S3-хранилищу
Предварительные требования⚓︎
Для создания подключения в Cloudmaster и настройки коллектора вам потребуется:
- Создать и настроить сбор биллинга в бакет в Яндекс Облаке. Следуйте инструкциям провайдера: создание бакета, экспорт биллинга.
- Создать сервисный аккаунт для доступа к бакету с биллингом и API Яндекс Облака. Назначить необходимые права. Следуйте инструкциям провайдера: создание сервисного аккаунта.
- Сгенерировать и загрузить JSON-файл с авторизованными ключами. Следуйте инструкциям провайдера: создание авторизованных ключей.
- Создать и настроить доступ к бакету в любом облаке, куда будет сохраняться биллинг в универсальном формате.
- Настроить подключение бакета в Cloudmaster. Инструкция здесь.
- Создать виртуальную машину и установить коллектор.
Бакет может быть размещен в любом облаке по вашему выбору. Можно использовать один сервисный аккаунт для коллектора и для подключения к Cloudmaster (в этом случае у аккаунта должны быть права на чтение, листинг и запись).
По мере следования инструкциям рекомендуем записывать данные, которые потребуются для заполнения файла конфигурации.
Права для сервисного аккаунта в Яндекс Облаке⚓︎
1. Доступ к бакету с биллингом (на чтение)⚓︎
Чтобы сервисный аккаунт мог забирать выгрузки из Object Storage, предоставьте ему доступ к конкретному бакету:
- Перейдите в консоль управления Yandex Cloud и выберите каталог, в котором находится бакет с биллингом.
- В списке сервисов выберите Object Storage и нажмите на имя нужного бакета.
- В левом меню перейдите в раздел Безопасность -> вкладка Права доступа.
- Нажмите кнопку Назначить роли. Выберите роль
storage.viewer. Или добавьте сервисный аккаунт в ACL бакета с правомREAD. - Сохраните изменения.
2. Доступ к API Yandex Cloud для дескрайбинга объектов⚓︎
Для сбора метаданных о конфигурации ресурсов (дисков, инстансов, кластеров) сервисному аккаунту необходима примитивная роль viewer на уровне организации или целевого облака.
- Перейдите в сервис Identity Hub.
- В левом меню выберите раздел Права доступа .
- В правом верхнем углу нажмите кнопку Назначить роли.
- В открывшемся окне перейдите на вкладку Сервисные аккаунты (или воспользуйтесь строкой поиска), чтобы найти и выбрать ваш аккаунт.
- Нажмите Добавить роль и выберите примитивную роль
viewer. - Сохраните изменения.
3. Доступ к бакету для сохранения и чтения биллинга в универсальном формате⚓︎
Бакет может находиться в любом облаке по вашему выбору. Cервисному аккаунту потребуются права на чтение, запись и листинг. Инструкция ниже использует термины для Яндекс Облака, инструменты настройки в другом провайдере могут отличаться.
Чтобы сервисный аккаунт мог писать и забирать выгрузки из Object Storage, предоставьте ему доступ к конкретному бакету:
- Выберите каталог, в котором находится целевой бакет.
- В списке сервисов выберите Object Storage и нажмите на имя нужного бакета.
- В левом меню перейдите в раздел Безопасность -> вкладка Права доступа.
- Нажмите кнопку Назначить роли. Выберите роль
storage.uploader. Или добавьте сервисный аккаунт в ACL бакета с правамиREAD и WRITE. - Сохраните изменения.
Параметры для файла конфигурации⚓︎
| Поле в application.yml | Где взять значение | Описание | Пример значения |
|---|---|---|---|
| yc-service-account.key-file-path | Яндекс Облако | Путь к авторизованному ключу сервисного аккаунта в формате JSON | ./sa4collector-authorized_key.json |
| cloudmaster.customer-id | Cloudmaster | Идентификатор компании из профиля пользователя | 0987654a-ffff-1111-dddd-0987654321bc |
| cloudmaster.cloud_id | Cloudmaster | ID вашего подключения в Cloudmaster из раздела Мои подключения | 1234 |
| yc-billing-bucket.name | Яндекс Облако | Имя бакета с биллингом | cloudmaster-0987654321bc |
| yc-billing-bucket.folder | Яндекс Облако | Папка с биллингом (без "/") | billing-folder |
| yc-billing-bucket.static-key-id | Яндекс Облако | Идентификатор ключа доступа сервисного аккаунта с правами на запись в бакет | ajeY73McSRicJS53TEJe7MSoX |
| yc-billing-bucket.secret-key | Яндекс Облако | Секрет ключа доступа сервисного аккаунта с правами на запись в бакет | wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY |
| target-bucket.path-style-access-enabled | Облако по выбору | По умолчанию: true. Большинство провайдеров автоматически определяют формат адреса: virtual host или path-style | true |
| target-bucket.name | Облако по выбору | Имя бакета | cloudmaster-0987654321bc |
| target-bucket.access-key | Облако по выбору | Идентификатор ключа доступа сервисного аккаунта с правами на запись в бакет | ajeY73McSRicJS53TEJe7MSoX |
| target-bucket.secret-key | Облако по выбору | Секрет ключа доступа сервисного аккаунта с правами на запись в бакет | wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY |
| target-bucket.region | Облако по выбору | Регион бакета из документации провайдера, часто присутствует в эндпоинте | ru-moscow-1 |
| target-bucket.endpoint | Облако по выбору | Эндпоинт S3-совместимого сервиса хранилища из документации провайдера | https://obs.ru-moscow-1.hc.sbercloud.ru |
Установка⚓︎
Примерное время загрузки и установки ― 2 минуты (в зависимости от ширины интернет-канала).
- Загрузите скрипт для подключения необходимого репозитория Cloudmaster внутри целевой ВМ:
chmod 755 setup_cloudmaster_repo.sh
sudo ./setup_cloudmaster_repo.sh
# После завершения выполнения команды подключения репозитория терминал направит уведомление:
#
# Подключение публичного репозитория CloudMaster успешно завершено.
sudo apt update
# В итоговом отчёте убедитесь, что присутствует строка для репозитория Cloudmaster примерного вида:
# Hit:4 https://repo.cbi.cloudmaster.ru/repository/apt-public noble InRelease
# Автоматическая установка всех зависимостей
apt install -y cloudmaster-yc-billing-collector
# Установка зависимостей с подтверждением
apt install cloudmaster-yc-billing-collector
# В результате будут установлены пакеты: alsa-topology-conf, alsa-ucm-conf, ca-certificates-java,
# cloudmaster-yc-billing-collector, java-common, libasound2-data, libasound2t64, libavahi-client3, libavahi-common-data,
# libavahi-common3, libcups2t64, libgraphite2-3, libharfbuzz0b, liblcms2-2, libpcsclite1, openjdk-21-jre-headless
# Перечень пакетов примерный, точный список будет определён утилитой apt-get в момент установки на основе построенного
# дерева зависимостей.
Настройка⚓︎
После успешной установки откройте и отредактируйте конфигурационный файл application.yml. Файл находится по пути:
1. Адрес файла с данными авторизованного ключа сервисного аккаунта в Яндекс Облаке.⚓︎
В Яндекс Облаке создайте авторизованный ключ. Яндекс Облако предлагает возможность скачать ключи в формате JSON-файла.
Скачайте и сохраните содержимое файла по адресу: /opt/cloudmaster/services/yc-billing-collector/sa4collector-authorized_key.json
2. Идентификатор компании и подключения⚓︎
Укажите UUID вашей компании из профиля пользователя в Cloudmaster и номер подключения из раздела Мои подключения.
cloudmaster:
customer-id: <ID_КЛИЕНТА_UUID> # UUID из профиля пользователя Cloudmaster
cloud_id: <ID_ПОДКЛЮЧЕНИЯ_ИЗ_CLOUDMASTER> # Из раздела Мои подключения в Cloudmaster
3. Параметры S3-бакета с биллингом⚓︎
Укажите данные для загрузки отчетов. Здесь и далее используйте обертку DEC(...) для ключей доступа — после первого запуска
сервиса они будут автоматически зашифрованы.
s3-buckets:
yc-billing-bucket:
bucket:
name: <ИМЯ_БАКЕТА> # Имя бакета в Яндекс Облаке, куда сохрняются файлы биллинга
folder: <ПАПКА> # Папка в бакете без "/" на конце
static-key-id: DEC(<ACCESS_KEY>) # Идентификатор ключа сервисного аккаунта с правом на чтение
secret-key: DEC(<SECRET_KEY>) # Ключ сервисного аккаунта с правом на чтение
4. Параметры S3-бакета для сохранения биллинга в универсальном формате⚓︎
s3-buckets:
target-bucket:
bucket:
path-style-access-enabled: true # Определяет формат адреса, по которому идут запросы к бакету:
# false - по virtual host <ИМЯ_БАКЕТА>.<ЭНДПОИНТ>,
# true - по path-style <ЭНДПОИНТ>/<ИМЯ_БАКЕТА>
# В большинстве случаев провайдер автоматически выбирает нужный формат с параметром
# по умолчанию true. Параметр важен для успешной записи данных в бакет.
name: <ИМЯ_БАКЕТА> #Имя бакета в любом облачном провайдере
access-key: DEC(<ACCESS_KEY>) # Идентификатор ключа сервисного аккаунта с правом на чтение и запись в бакет
secret-key: DEC(<SECRET_KEY>) # Ключ сервисного аккаунта с правом на чтение и запись в бакет
region: <РЕГИОН> # Из документации провайдера
endpoint: <ЭНДПОИНТ> # Из документации провайдера
sudo chmod 640 /opt/cloudmaster/services/yc-billing-collector/sa4collector-authorized_key.json
sudo chown cloudmaster:cloudmaster /opt/cloudmaster/services/yc-billing-collector/sa4collector-authorized_key.json
Перезапустите сервис.
Проверка работы⚓︎
Проверьте, что коллектор приступил к сбору данных. В бакете должны появиться вложенные папки:
/customer-id/billing/cm-connection-cm-connection-id — появится утром следующего дня.
С этими префиксами (в эти папки) будут загружаться csv-файлы с метриками за сутки.
В интерфейсе Cloudmaster данные и рекомендации стоит ожидать на следующий день после подключения.
Эксплуатация коллектора⚓︎
Запуск, останов, перезапуск
# Запуск
sudo service cloudmaster-yc-billing-collector start
# Останов
sudo service cloudmaster-yc-billing-collector stop
# Перезапуск (обязателен после правки application.yml)
sudo service cloudmaster-yc-billing-collector restart
Просмотр журнала логов
Журналы работы приложения находятся в каталоге:
Удаление коллектора и всех его зависимостей
Информация для службы безопасности⚓︎
Результат установки
В процессе установки коллектора создаются:
-
Системный пользователь cloudmaster
-
Системная группа cloudmaster
-
Подкаталог
/opt/cloudmaster/services/yc-billing-collector
в этом подкаталоге установлены:
- Java-приложение cm-yc-billing-collector.jar
- конфигурационный файл application.yml
- конфигурационный файл cm-yc-billing-collector.conf
- подкаталог для лог-файлов logs
-
Системные unit-файлы для
systemd-сервиса cloudmaster-yc-billing-collector-/usr/lib/systemd/system/yc-billing-collector.service -
Симлинк для
systemd-сервиса cloudmaster-yc-billing-collector-/etc/systemd/system/multi-user.target.wants/yc-billing-collector.service
Шифрование ключей доступа
В файле application.yml используйте обертку DEC(<НЕКОТОРОЕ-НЕШИФРОВАННОЕ-ЗНАЧЕНИЕ>) для ключей доступа. Это позволяет хранить «секреты» в зашифрованном виде.
После первого запуска сервиса cloudmaster-yc-billing-collector все параметры, обернутые в DEC(), будут автоматически зашифрованы и храниться
в конфигурационном файле application.yml в формате вида: ENC(5iBu.......0Mlmd10cuw==).
Ключ шифрования находится внутри бинарного файла Java-приложения cm-yc-billing-collector.jar.