Анализ логов Object Storage при помощи DataLens
Для бакета Yandex Object Storage можно включить логирование действий. В логах хранится информация по операциям с бакетом и объектами, которые в нем находятся. Анализ логов бакета может быть полезен, например, если вам нужно выявить причины резкого повышения нагрузки или понять общую картину распределения трафика.
Построить визуализации, необходимые для анализа, можно с помощью сервиса бизнес-аналитики Yandex DataLens. Предварительно сохраненные логи необходимо перенести в БД ClickHouse®, которая будет использоваться в качестве источника для DataLens.
Чтобы проанализировать логи и представить результаты в виде интерактивных графиков:
- Подготовьте облако к работе.
- Создайте бакет для хранения логов.
- Включите экспорт логов.
- Подготовьте источник данных.
- Создайте подключение в DataLens.
- Создайте датасет в DataLens.
- Создайте чарты в DataLens.
- Создайте дашборд в DataLens.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость входят:
- плата за хранение данных в Object Storage, операции с ними и исходящий трафик (см. тарифы Object Storage);
- плата за постоянно запущенный кластер Managed Service for ClickHouse® (см. тарифы Managed Service for ClickHouse®).
Создайте бакет для хранения логов
- В консоли управления
выберите каталог, в котором хотите создать бакет. - В списке сервисов выберите Object Storage.
- Нажмите кнопку Создать бакет.
- В поле Имя укажите имя бакета.
- В полях Доступ на чтение объектов и Доступ к списку объектов выберите Ограниченный.
- Нажмите кнопку Создать бакет.
-
Если у вас еще нет AWS CLI, установите и сконфигурируйте его.
-
Создайте бакет:
aws --endpoint-url https://storage.yandexcloud.net \ s3 mb s3://<имя_бакета>
Результат:
make_bucket: <имя_бакета>
Примечание
Terraform взаимодействует с Object Storage от имени сервисного аккаунта. Назначьте сервисному аккаунту нужную роль, например storage.admin
, на каталог, в котором будут создаваться ресурсы.
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Опишите в конфигурационном файле параметры для создания сервисного аккаунта и ключа доступа:
... // Создание сервисного аккаунта resource "yandex_iam_service_account" "sa" { name = "<имя_сервисного_аккаунта>" } // Назначение роли сервисному аккаунту resource "yandex_resourcemanager_folder_iam_member" "sa-admin" { folder_id = "<идентификатор_каталога>" role = "storage.admin" member = "serviceAccount:${yandex_iam_service_account.sa.id}" } // Создание статического ключа доступа resource "yandex_iam_service_account_static_access_key" "sa-static-key" { service_account_id = yandex_iam_service_account.sa.id description = "static access key for object storage" }
-
Добавьте в конфигурационный файл параметры бакета:
resource "yandex_storage_bucket" "bucket-logs" { access_key = yandex_iam_service_account_static_access_key.sa-static-key.access_key secret_key = yandex_iam_service_account_static_access_key.sa-static-key.secret_key bucket = "<имя_бакета>" }
Подробнее о ресурсе
yandex_storage_bucket
см. в документации провайдера Terraform. -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Создайте бакет.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Используйте метод REST API create.
Включите экспорт логов
- В консоли управления
выберите бакет, логи которого хотите записывать. - На панели слева выберите Настройки.
- Откройте вкладку Логирование.
- Включите опцию Запись логов.
- Выберите Бакет для хранения логов.
- В поле Префикс укажите префикс
s3-logs/
. - Нажмите кнопку Сохранить.
-
Создайте файл
log-config.json
со следующим содержимым:{ "LoggingEnabled": { "TargetBucket": "<имя_бакета>", "TargetPrefix": "s3-logs/" } }
-
Выполните команду:
aws s3api put-bucket-logging \ --endpoint-url https://storage.yandexcloud.net \ --bucket <имя_бакета> \ --bucket-logging-status file://log-config.json
Где
--bucket
— имя бакета, для которого надо включить логирование действий.
Чтобы включить механизм логирования в бакете, который вы хотите отслеживать:
-
Откройте файл конфигурации Terraform и добавьте блок
logging
во фрагмент с описанием бакета.resource "yandex_storage_bucket" "bucket-logs" { access_key = "<идентификатор_статического_ключа>" secret_key = "<секретный_ключ>" bucket = "<имя_бакета_для_хранения_логов>" } resource "yandex_storage_bucket" "bucket" { access_key = "<идентификатор_статического_ключа>" secret_key = "<секретный_ключ>" bucket = "<имя_исходного_бакета>" acl = "private" logging { target_bucket = yandex_storage_bucket.bucket-logs.id target_prefix = "s3-logs/" } }
Где:
access_key
— идентификатор статического ключа доступа.secret_key
— значение секретного ключа доступа.target_bucket
— указание на бакет для хранения логов.target_prefix
— префикс ключа для объектов с логами.
Более подробную информацию о параметрах ресурса
yandex_storage_bucket
в Terraform см. в документации провайдера .-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
.
Используйте метод REST API putBucketLogging.
Подготовьте источник данных
Создайте кластер ClickHouse®
Для создания кластера Managed Service for ClickHouse® нужна роль vpc.user и роль managed-clickhouse.editor или выше. О том, как назначить роль, см. документацию Identity and Access Management.
-
В консоли управления
выберите каталог, в котором хотите создать кластер. -
В списке сервисов выберите Managed Service for ClickHouse.
-
В открывшемся окне нажмите Создать кластер.
-
Укажите настройки кластера ClickHouse®:
-
В блоке Базовые параметры в поле Имя кластера укажите
s3-logs
. -
В блоке Ресурсы в поле Тип выберите
burstable
. -
В блоке Хосты нажмите
и включите опцию Публичный доступ. Нажмите кнопку Сохранить. -
В блоке Настройки СУБД:
- В поле Управление пользователями через SQL выберите
Выключено
. - В поле Имя пользователя укажите
user
. - В поле Пароль укажите пароль.
- В поле Имя БД укажите
s3_data
.
Запомните имя БД.
- В поле Управление пользователями через SQL выберите
-
В блоке Сервисные настройки включите опции:
- Доступ из DataLens.
- Доступ из консоли управления.
-
-
Нажмите кнопку Создать кластер.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы создать кластер:
-
Проверьте, есть ли в каталоге подсети для хостов кластера:
yc vpc subnet list
Если ни одной подсети в каталоге нет, создайте нужные подсети в сервисе VPC.
-
Укажите параметры кластера в команде создания:
yc managed-clickhouse cluster create \ --name s3-logs \ --environment production \ --network-name <имя_сети> \ --host type=clickhouse,zone-id=<зона_доступности>,subnet-id=<идентификатор_подсети> \ --clickhouse-resource-preset b2.medium \ --clickhouse-disk-type network-ssd \ --clickhouse-disk-size 10 \ --user name=user,password=<пароль_пользователя> \ --database name=s3_data \ --datalens-access=true \ --websql-access=true
-
Добавьте в конфигурационный файл описание кластера и его хостов:
resource "yandex_mdb_clickhouse_cluster" "s3-logs" { name = "s3-logs" environment = "PRODUCTION" network_id = yandex_vpc_network.<имя_сети_в_Terraform>.id clickhouse { resources { resource_preset_id = "b2.medium" disk_type_id = "network-ssd" disk_size = 10 } } database { name = "s3_data" } user { name = "user" password = "<пароль>" permission { database_name = "s3_data" } } host { type = "CLICKHOUSE" zone = "<зона_доступности>" subnet_id = yandex_vpc_subnet.<имя_подсети_в_Terraform>.id } access { datalens = true web_sql = true } }
Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера
. -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Создайте кластер:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Используйте метод REST API create.
После создания кластера вы автоматически будете перенаправлены на страницу Кластеры.
Дождитесь пока статус кластера изменится на Alive
.
Измените настройки пользователя
- Выберите кластер
s3-logs
. - Перейдите на вкладку Пользователи.
- Нажмите значок
и выберите Настроить. - Нажмите кнопку Дополнительные настройки → Settings.
- В поле Date time input format выберите
best_effort
. - Нажмите кнопку Сохранить.
Создайте статический ключ
Для создания таблицы с доступом к Object Storage вам понадобится статический ключ. Создайте его и сохраните идентификатор и секретную часть ключа.
Создайте таблицу в БД
-
Выберите кластер
s3-logs
. -
Перейдите на вкладку SQL.
-
В поле Пароль введите пароль.
-
Нажмите кнопку Подключиться.
-
В окне справа напишите SQL-запрос:
CREATE TABLE s3_data.s3logs ( bucket String, -- Имя бакета. bytes_received Int64, -- Размер запроса в байтах. bytes_send Int64, -- Размер ответа в байтах. handler String, -- Метод запроса в формате REST.<HTTP-метод>.<субъект>. http_referer String, -- URL-адрес источника запроса. ip String, -- IP-адрес пользователя. method String, -- Метод HTTP-запроса. object_key String, -- Ключ объекта, закодированный методом URL-кодировки. protocol String, -- Версия протокола передачи данных. range String, -- HTTP-заголовок, который определяет диапазон байт для загрузки из объекта. requester String, -- Идентификатор пользователя. request_args String, -- Аргументы URL-запроса. request_id String, -- Идентификатор запроса. request_path String, -- Полный путь запроса. request_time Int64, -- Время обработки запроса, в миллисекундах. scheme String, -- Тип протокола передачи данных. -- Возможные значения: -- * http — протокол прикладного уровня передачи данных. -- * https — протокол прикладного уровня передачи данных с поддержкой шифрования. ssl_protocol String, -- Протокол обеспечения безопасности. status Int64, -- HTTP-код ответа. storage_class String, -- Класс хранилища объекта. timestamp DateTime, -- Дата и время операции с бакетом, в формате ГГГГ-ММ-ДДTЧЧ:ММ:ССZ. user_agent String, -- Клиентское приложение (User Agent), которое выполнило запрос. version_id String, -- Версия объекта. vhost String -- Виртуальный хост запроса. -- Возможные значения: -- * storage.yandexcloud.net. -- * <имя_бакета>.storage.yandexcloud.net. -- * website.yandexcloud.net. -- * <имя_бакета>.website.yandexcloud.net. ) ENGINE = S3( 'https://storage.yandexcloud.net/<имя_бакета>/s3-logs/*', '<идентификатор_ключа>', '<секретный_ключ>', 'JSONEachRow' ) SETTINGS date_time_input_format='best_effort';
-
Нажмите кнопку Выполнить.
Создайте подключение в DataLens
-
Выберите кластер
s3-logs
. -
Перейдите на вкладку DataLens.
-
В открывшемся окне нажмите Создать подключение.
-
Заполните настройки подключения:
- Добавьте название подключения:
s3-logs-con
. - В поле Кластер выберите
s3-logs
. - В поле Имя хоста выберите хост ClickHouse® из выпадающего списка.
- Введите имя пользователя БД и пароль.
- Добавьте название подключения:
-
Нажмите кнопку Подтвердить подключение.
-
После проверки подключения нажмите Создать подключение.
-
В открывшемся окне введите имя подключения и нажмите кнопку Создать.
Создайте датасет в DataLens
-
Нажмите кнопку Создать датасет.
-
В созданном датасете перенесите таблицу
s3_data.s3logs
на рабочую область. -
Перейдите на вкладку Поля.
-
Нажмите значок
Добавить поле. -
Создайте расчетное поле с типом файла:
- Название поля —
object_type
. - Формула —
SPLIT([object_key], '.', -1)
.
- Название поля —
-
Нажмите кнопку Создать.
-
В правом верхнем углу нажмите Сохранить.
-
Введите имя датасета
s3-dataset
и нажмите Создать. -
После сохранения датасета в правом верхнем углу нажмите Создать чарт.
Создайте чарты в DataLens
Создайте первый чарт
Чтобы визуализировать количество запросов к бакету разными методами, создайте чарт — круговую диаграмму:
- Выберите тип визуализации
Круговая диаграмма
. - Перетащите поле
method
из раздела Измерения в секцию Цвет. - Перетащите поле
request_id
из раздела Измерения в секцию Показатели. - В правом верхнем углу нажмите Сохранить.
- В открывшемся окне введите название чарта
S3 - Method pie
и нажмите Сохранить.
Создайте второй чарт
Чтобы визуализировать соотношение количества запросов по типу объекта, создайте чарт — столбчатую диаграмму:
-
Скопируйте чарт, получившийся на предыдущем шаге:
- В правом верхнем углу нажмите галочку рядом с кнопкой Сохранить.
- Нажмите кнопку Сохранить как.
- В открывшемся окне введите название нового чарта
S3 - Object type bars
и нажмите кнопку Сохранить.
-
Выберите тип визуализации Столбчатая диаграмма. Поля
method
иrequest_id
автоматически попадут в секции X и Y соответственно. -
Удалите поле
method
из секции X и перетащите туда полеobject_type
. -
В правом верхнем углу нажмите Сохранить.
Создайте третий чарт
Чтобы визуализировать распределение исходящего трафика по дням, создайте чарт — столбчатую диаграмму:
-
Скопируйте чарт, получившийся на предыдущем шаге:
- В правом верхнем углу нажмите галочку рядом с кнопкой Сохранить.
- Нажмите кнопку Сохранить как.
- В открывшемся окне введите название нового чарта
S3 - Traffic generated by days
и нажмите кнопку Сохранить.
-
Перетащите поле
object_type
из секции X в секцию Фильтры. -
В открывшемся окне выберите типы объектов, которые нужно отобразить на диаграмме, и нажмите Применить фильтры.
-
Перетащите поле
timestamp
из раздела Измерения в секцию X. -
Удалите поле
request_id
из секции Y и перетащите туда полеbytes_send
. -
В правом верхнем углу нажмите Сохранить.
Создайте дашборд в DataLens и добавьте на него чарты
- Перейдите на главную страницу
DataLens. - Нажмите кнопку Создать дашборд.
- Введите название дашборда
S3 Logs Analysis
и нажмите Создать. - В правом верхнем углу нажмите Добавить и выберите
Чарт
. - В поле Чарт нажмите Выбрать и выберите из списка чарт
S3 - Method pie
. - Нажмите кнопку Добавить. Чарт появится на дашборде.
- Повторите предыдущие шаги для чартов
S3 - Object type bars
иS3 - Traffic generated by days
.
Как удалить созданные ресурсы
Удалите ресурсы, которые вы больше не будете использовать, чтобы за них не списывалась плата:
- Удалите бакет.
- Удалите кластер
s3-logs
.
ClickHouse® является зарегистрированным товарным знаком ClickHouse, Inc