Инструменты для анализа производительности
Встроенные утилиты диагностики
В Yandex StoreDoc есть утилиты получения данных о производительности:
mongostat— собирает статистику утилизации ресурсов CPU и памяти процессами Yandex StoreDoc,mongotop— собирает статистику чтения/записи данных по каждой коллекции.
При вызове этих утилит используйте строку подключения с логином и паролем пользователя с ролью mdbMonitor, например:
mongostat 5 --uri="mongodb://{<имя_пользователя_с_ролью_mdbMonitor>}:{<пароль>}@{<хост>}:27018/?authSource=admin"
mongotop 5 --uri="mongodb://{<имя_пользователя_с_ролью_mdbMonitor>}:{<пароль>}@{<хост>}:27018/?authSource=admin"
Здесь обе утилиты выводят набор данных о производительности с интервалом опроса (polling interval) в 5 секунд.
Профилировщик
В Yandex StoreDoc есть встроенный профилировщик. Он собирает данные о запросах. Затем на основе этих данных формируется стратегия оптимизации запросов. Работой профилировщика управляют настройки Yandex StoreDoc, которые вы можете задать при создании кластера или изменении настроек СУБД:
Важно
Использование значения all для настройки operationProfiling.mode и близкого к 0 значения для настройки operationProfiling.slowOpThreshold значительно снижает производительность кластера.
Чтобы просмотреть данные, собранные профилировщиком, обратитесь к коллекции system.profile в каждой БД. Коллекции профилировщика доступны для чтения пользователю с ролью mdbMonitor. По умолчанию данные дублируются в логах.
Выполняемые в данный момент запросы
Чтобы посмотреть не относящиеся к текущему пользователю запросы, от имени пользователя с ролью mdbMonitor выполните запрос db.currentOp():
db.currentOp()
Чтобы посмотреть запросы текущего пользователя, выполните запрос db.currentOp() со значением true для настройки ownOps:
db.currentOp({ "$ownOps": true })
Логи
Наиболее подробная информация о работе Yandex StoreDoc содержится в логах.
- Перейдите на страницу каталога
и выберите сервис Yandex StoreDoc. - Нажмите на имя нужного кластера и выберите вкладку
Логи.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы посмотреть логи Yandex StoreDoc:
-
Посмотрите описание команды CLI для просмотра логов:
yc managed-mongodb cluster list-logs --help -
Для получения всех логов кластера выполните команду:
yc managed-mongodb cluster list-logs --id <идентификатор_кластера>Идентификатор кластера можно получить со списком кластеров в каталоге.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь методом Cluster.ListLogs и выполните запрос, например, с помощью cURL
:curl \ --request GET \ --header "Authorization: Bearer $IAM_TOKEN" \ --url 'https://mdb.api.cloud.yandex.net/managed-mongodb/v1/clusters/<идентификатор_кластера>:logs' \ --url-query serviceType=<тип_сервиса> \ --url-query columnFilter=<список_колонок> \ --url-query fromTime=<левая_граница_временного_диапазона> \ --url-query toTime=<правая_граница_временного_диапазона>Где:
-
serviceType— тип сервиса, логи которого нужно получить:MONGOD— лог операций Yandex StoreDoc.AUDIT— лог аудита.
-
columnFilter— список колонок для вывода информации:hostname— имя хоста.component— тип компонента, который попадет в лог. Например,HTTP-Session.message— сообщение, которое выводит компонент.query_id— идентификатор запроса.severity— уровень логирования, например,Debug.thread— идентификатор потока, участвующего в обработке запросов.
В одном параметре
columnFilterможно указать только одну колонку. Если необходимо отфильтровать логи по нескольким колонкам, передайте перечень нужных колонок в нескольких параметрах.fromTime— левая граница временного диапазона в формате RFC-3339 . Пример:2006-01-02T15:04:05Z.
toTime— правая граница временного диапазона, формат аналогиченfromTime.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Воспользуйтесь вызовом ClusterService.ListLogs и выполните запрос, например, с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/mongodb/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>", "service_type": "<тип_сервиса>", "column_filter": [ "<колонка_1>", "<колонка_2>", ..., "<колонка_N>" ], "from_time": "<левая_граница_временного_диапазона>", "to_time": "<правая_граница_временного_диапазона>" }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.mongodb.v1.ClusterService.ListLogsГде:
-
service_type— тип сервиса, логи которого нужно получить:MONGOD— лог операций Yandex StoreDoc.AUDIT— лог аудита.
-
column_filter— список колонок для вывода информации:hostname— имя хоста.component— тип компонента, который попадет в лог. Например,HTTP-Session.message— сообщение, которое выводит компонент.query_id— идентификатор запроса.severity— уровень логирования, например,Debug.thread— идентификатор потока, участвующего в обработке запросов.
В параметре
column_filterможно указать несколько колонок, если нужно отфильтровать логи по нескольким колонкам.from_time— левая граница временного диапазона в формате RFC-3339 . Пример:2006-01-02T15:04:05Z.
to_time— правая граница временного диапазона, формат аналогиченfrom_time.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.