Яндекс.Облако— Визуализация данных биллинга в сервисе Datalens
Настройка регулярного экспорта
С недавних пор в разделе Биллинга Яндекс.Облака появилась функция регулярного экспорта расширенной детализации потребления в сервис Object Storage формате CSV.
Кроме основной информации, такая детализация включает в себя:
- Имя и идентификатор каталога
- Пользовательские лейблы
- Идентификаторы ресурсов
Таким образом, с помощью такого регулярного экспорта можно анализировать потребление конкретной виртуальной машины, диска, кластера MDB и даже бакета Object Storage. Это отличная возможность понять, на что расходуются средства в Облаке.
Для того, чтобы ей воспользоваться, необходимо создать бакет в сервисе Object Storage и указать его имя при создании экспорта в разделе биллинга. Данные в нем будут обновляться каждый час.
Однако, в таком виде с данными работать не совсем удобно. Как можно заметить, каждый день потребления в Яндекс.Облаке будет загружен как отдельный CSV файл формате <yyyymmdd>.csv.
За несколько месяцев таких файлов наберется большое количество и необходимо будет склеивать их все, чтобы посмотреть общую картину происходящего. Попробуем придумать что-нибудь, чтобы упростить их анализ!
Визуализация данных
С задачей визуализации данных нам помогут сервис Datalens и новые возможности Clickhouse в работе с Object Storage.
Что потребуется:
- Терпение
- Сервисный Аккаунт со статическими ключами доступа
- Небольшой кластер Clickhouse (b2.nano)
Подробнее:
Для начала необходимо создать сервисный аккаунт (в моем случае billing) и выдать ему права на чтение в тот бакет Object Storage, куда настроен регулярный экспорт детализации.
С его помощью мы в дальнейшем будем получать данные из Object Storage напрямую в Clickhouse!
В созданном ранее сервисном аккаунте получите статический ключ доступа (пару key_id и key_secret) для работы с Object Storage API.
Теперь к самому интересному — Clickhouse. Относительно недавно в нем появилась возможность хранить или обрабатывать данные, которые располагаются в S3 (Object Storage) с помощью специального движка таблиц.
Поскольку Yandex Object Storage совместим с S3 API, мы можем этим воспользоваться.
Создадим небольшой кластер Clickhouse (в моем случае — b2.nano).
Далее дело остается за малым — необходимо создать таблицу (например, cloud_billing) с движком типа S3, который будет иметь возможность обрабатывать данные из Object Storage, где лежат наши экспортные данные из биллинга.
Здесь необходимо указать созданные ранее статические ключи доступа от сервисного аккаунта, имя бакета и префикс, где располагаются csv файлы детализации.
Попробуем выполнить какой-нибудь запрос к таблице, пользуясь вкладкой SQL консоли кластера:
Действительно, работает! Данные в Object Storage успешно обрабатываются Clickhouse.
Однако есть небольшое замечание - обратите внимание на флаг в запросе
input_format_skip_unknown_fields=1
Без его помощи, запрос на чтение будет завершаться ошибкой, если в csv файле есть колонки, которые не были описаны при создании таблицы. Чтобы избежать ошибок в будущем, следует указывать этот параметр всегда.
Остается создать подключение до нашего кластера Clickhouse в сервисе Datalens - https://datalens.yandex.ru/
И настроить датасет, в котором источник данных стоит указать подзапросом, чтобы была возможность использовать флаг input_format_skip_unknown_fields=1.
Все работает! Датасет создан.
Теперь можно в удобном виде работать с экспортными данными, строить чарты и дашборды. То, что доктор прописал!
Кроме того, поскольку данные становятся доступны в виде обычной таблицы Clickhouse, с ними можно работать не только из Datalens, но и с помощью Serverless функций и других сервисов Яндекс.Облака.
Например, можно реализовать cron функцию отслеживания потребления для облака или каталога, с последующей отправкой уведомлений в случае резкого роста/превышения месячного бюджета.