Перейти к содержанию

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 и настройки коллектора вам потребуется:

  1. Создать и настроить сбор биллинга в бакет в Яндекс Облаке. Следуйте инструкциям провайдера: создание бакета, экспорт биллинга.
  2. Создать сервисный аккаунт для доступа к бакету с биллингом и API Яндекс Облака. Назначить необходимые права. Следуйте инструкциям провайдера: создание сервисного аккаунта.
  3. Сгенерировать и загрузить JSON-файл с авторизованными ключами. Следуйте инструкциям провайдера: создание авторизованных ключей.
  4. Создать и настроить доступ к бакету в любом облаке, куда будет сохраняться биллинг в универсальном формате.
  5. Настроить подключение бакета в Cloudmaster. Инструкция здесь.
  6. Создать виртуальную машину и установить коллектор.

Бакет может быть размещен в любом облаке по вашему выбору. Можно использовать один сервисный аккаунт для коллектора и для подключения к Cloudmaster (в этом случае у аккаунта должны быть права на чтение, листинг и запись).

По мере следования инструкциям рекомендуем записывать данные, которые потребуются для заполнения файла конфигурации.

Права для сервисного аккаунта в Яндекс Облаке⚓︎

1. Доступ к бакету с биллингом (на чтение)⚓︎

Чтобы сервисный аккаунт мог забирать выгрузки из Object Storage, предоставьте ему доступ к конкретному бакету:

  1. Перейдите в консоль управления Yandex Cloud и выберите каталог, в котором находится бакет с биллингом.
  2. В списке сервисов выберите Object Storage и нажмите на имя нужного бакета.
  3. В левом меню перейдите в раздел Безопасность -> вкладка Права доступа.
  4. Нажмите кнопку Назначить роли. Выберите роль storage.viewer. Или добавьте сервисный аккаунт в ACL бакета с правом READ.
  5. Сохраните изменения.

2. Доступ к API Yandex Cloud для дескрайбинга объектов⚓︎

Для сбора метаданных о конфигурации ресурсов (дисков, инстансов, кластеров) сервисному аккаунту необходима примитивная роль viewer на уровне организации или целевого облака.

  1. Перейдите в сервис Identity Hub.
  2. В левом меню выберите раздел Права доступа .
  3. В правом верхнем углу нажмите кнопку Назначить роли.
  4. В открывшемся окне перейдите на вкладку Сервисные аккаунты (или воспользуйтесь строкой поиска), чтобы найти и выбрать ваш аккаунт.
  5. Нажмите Добавить роль и выберите примитивную роль viewer.
  6. Сохраните изменения.

3. Доступ к бакету для сохранения и чтения биллинга в универсальном формате⚓︎

Бакет может находиться в любом облаке по вашему выбору. Cервисному аккаунту потребуются права на чтение, запись и листинг. Инструкция ниже использует термины для Яндекс Облака, инструменты настройки в другом провайдере могут отличаться.

Чтобы сервисный аккаунт мог писать и забирать выгрузки из Object Storage, предоставьте ему доступ к конкретному бакету:

  1. Выберите каталог, в котором находится целевой бакет.
  2. В списке сервисов выберите Object Storage и нажмите на имя нужного бакета.
  3. В левом меню перейдите в раздел Безопасность -> вкладка Права доступа.
  4. Нажмите кнопку Назначить роли. Выберите роль storage.uploader. Или добавьте сервисный аккаунт в ACL бакета с правами READ и WRITE.
  5. Сохраните изменения.

Параметры для файла конфигурации⚓︎

Поле в 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 минуты (в зависимости от ширины интернет-канала).

  1. Загрузите скрипт для подключения необходимого репозитория Cloudmaster внутри целевой ВМ:

curl https://io.cloudmaster.ru/setup_cloudmaster_public_repo.sh > setup_cloudmaster_repo.sh
2. Установите права на полученный скрипт и запустите подключения репозитория Cloudmaster командами:

chmod 755 setup_cloudmaster_repo.sh
sudo ./setup_cloudmaster_repo.sh

# После завершения выполнения команды подключения репозитория терминал направит уведомление:
#
# Подключение публичного репозитория CloudMaster успешно завершено.
3. Выполните обновление списков доступных пакетов и их зависимостей из всех подключённых репозиториев командой:
sudo apt update

#  В итоговом отчёте убедитесь, что присутствует строка для репозитория Cloudmaster примерного вида: 
#  Hit:4 https://repo.cbi.cloudmaster.ru/repository/apt-public noble InRelease
4. От имени суперпользователя запустите установку комплексного коллектора данных Cloud.ru Advanced командами:
# Автоматическая установка всех зависимостей
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. Файл находится по пути:

/opt/cloudmaster/services/yc-billing-collector/application.yml

1. Адрес файла с данными авторизованного ключа сервисного аккаунта в Яндекс Облаке.⚓︎

yc-service-account:
  key-file-path: ./sa4collector-authorized_key.json

В Яндекс Облаке создайте авторизованный ключ. Яндекс Облако предлагает возможность скачать ключи в формате 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

Перезапустите сервис.

sudo service cloudmaster-yc-billing-collector restart

Проверка работы⚓︎

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

/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

Просмотр журнала логов

Журналы работы приложения находятся в каталоге:

/opt/cloudmaster/services/yc-billing-collector/logs

Удаление коллектора и всех его зависимостей

apt purge --autoremove -y cloudmaster-yc-billing-collector

Информация для службы безопасности⚓︎

Результат установки

В процессе установки коллектора создаются:

  1. Системный пользователь cloudmaster

  2. Системная группа cloudmaster

  3. Подкаталог /opt/cloudmaster/services/yc-billing-collector

в этом подкаталоге установлены:

- Java-приложение cm-yc-billing-collector.jar

- конфигурационный файл application.yml

- конфигурационный файл cm-yc-billing-collector.conf

- подкаталог для лог-файлов logs
  1. Системные unit-файлы для systemd-сервиса cloudmaster-yc-billing-collector - /usr/lib/systemd/system/yc-billing-collector.service

  2. Симлинк для 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.

Читайте также⚓︎