Инструменты для анализа производительности
Встроенные утилиты диагностики
В MongoDB есть утилиты получения данных о производительности:
- mongostat
— собирает статистику утилизации ресурсов CPU и памяти процессами MongoDB, - mongotop
— собирает статистику чтения/записи данных по каждой коллекции.
При вызове этих утилит используйте строку подключения с логином и паролем пользователя с ролью mdbMonitor
, например:
mongostat 5 --uri="mongodb://{<имя_пользователя_с_ролью_mdbMonitor>}:{<пароль>}@{<хост>}:27018/?authSource=admin"
mongotop 5 --uri="mongodb://{<имя_пользователя_с_ролью_mdbMonitor>}:{<пароль>}@{<хост>}:27018/?authSource=admin"
Здесь обе утилиты выводят набор данных о производительности с интервалом опроса (polling interval) в 5 секунд.
Подробнее об использовании утилит monostat
и mongotop
см. в документации MongoDB
Профилировщик
В MongoDB есть встроенный профилировщик
Важно
Использование значения all
для настройки operationProfiling.mode
и близкого к 0
значения для настройки operationProfiling.slowOpThreshold
значительно снижает производительность кластера.
Чтобы просмотреть данные, собранные профилировщиком, обратитесь к коллекции system.profile
в каждой БД. Коллекции профилировщика доступны для чтения пользователю с ролью mdbMonitor
. По умолчанию данные дублируются в логах.
Подробнее о настройке профилировщика и о том, как интерпретировать его результаты, читайте в документации MongoDB
Выполняемые в данный момент запросы
Чтобы посмотреть не относящиеся к текущему пользователю запросы, от имени пользователя с ролью mdbMonitor
выполните запрос db.currentOp()
db.currentOp()
Чтобы посмотреть запросы текущего пользователя, выполните запрос db.currentOp()
со значением true
для настройкиownOps
:
db.currentOp({ "$ownOps": true })
Логи
Наиболее подробная информация о работе MongoDB содержится в логах.
- Перейдите на страницу каталога
и выберите сервис Managed Service for MongoDB. - Нажмите на имя нужного кластера и выберите вкладку
Логи.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы посмотреть логи Managed Service for MongoDB:
-
Посмотрите описание команды 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
— лог операций MongoDB.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
— лог операций MongoDB.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
.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.