Performance analysis tools
Built-in diagnostic utilities
Yandex StoreDoc offers utilities to help you get performance data:
mongostat: Collects statistics on CPU and memory usage with Yandex StoreDoc processes.mongotop: Collects data read/write statistics for each collection.
When calling these utilities, use the connection string with the username and password of the user with the mdbMonitor role, for example:
mongostat 5 --uri="mongodb://{<name_of_user_with_mdbMonitor_role>}:{<password>}@{<host>}:27018/?authSource=admin"
mongotop 5 --uri="mongodb://{<name_of_user_with_mdbMonitor_role>}:{<password>}@{<host>}:27018/?authSource=admin"
Here, both utilities provide a set of performance data with a polling interval of 5 seconds.
Profiler
Yandex StoreDoc has a built-in profiler. It collects query data and then uses it to determine a query optimization strategy. The profiler runs based on the Yandex StoreDoc settings that you can set when creating a cluster or updating the DBMS settings:
Warning
The use of the all value for operationProfiling.mode and a value close to 0 for operationProfiling.slowOpThreshold will significantly degrade cluster performance.
To view the data collected by the profiler, use the system.profile collection in each database. Profiler collections can be read by a user with the mdbMonitor role. By default, the data is duplicated in the logs.
Currently running queries
To view queries not pertaining to the current user, run the db.currentOp query as a user with the mdbMonitor role:
db.currentOp()
To view the current user's queries, run the db.currentOp() query with ownOps set to true:
db.currentOp({ "$ownOps": true })
Logs
You can find the most detailed information about Yandex StoreDoc performance in the logs.
- Navigate to the folder dashboard
and select Yandex StoreDoc. - Click the cluster name and select the
Logs tab.
If you do not have the Yandex Cloud CLI installed yet, install and initialize it.
By default, the CLI uses the folder specified when creating the profile. To change the default folder, use the yc config set folder-id <folder_ID> command. You can also set a different folder for any specific command using the --folder-name or --folder-id parameter.
To view Yandex StoreDoc logs:
-
See the description of the CLI command to view the logs:
yc managed-mongodb cluster list-logs --help -
To get all the cluster logs, run the command:
yc managed-mongodb cluster list-logs --id <cluster_ID>You can get the cluster ID with the list of clusters in the folder.
-
Get an IAM token for API authentication and place it in an environment variable:
export IAM_TOKEN="<IAM_token>" -
Use the Cluster.ListLogs method to execute the following request via cURL
:curl \ --request GET \ --header "Authorization: Bearer $IAM_TOKEN" \ --url 'https://mdb.api.cloud.yandex.net/managed-mongodb/v1/clusters/<cluster_ID>:logs' \ --url-query serviceType=<service_type> \ --url-query columnFilter=<column_list> \ --url-query fromTime=<time_range_left_boundary> \ --url-query toTime=<time_range_right_boundary>Where:
-
serviceType: Source service type for logs:MONGOD: Yandex StoreDoc operations log.AUDIT: Audit log.
-
columnFilter: List of output columns:hostname: Host name.component: Type of component to log, Example:HTTP-Session.message: Message output by the component.query_id: Request ID.severity: Logging level, e.g.,Debug.thread: ID of the thread involved in query handling.
You can specify only one column in the
columnFilterparameter. If you want to filter logs by more than one column, provide a list of the columns in several parameters.fromTime: Left boundary of a time range in RFC-3339 format, Example:2006-01-02T15:04:05Z.
toTime: The end time of the time range in the same format asfromTime.
You can get the cluster ID from the folder’s cluster list.
-
-
Check the server response to make sure your request was successful.
-
Get an IAM token for API authentication and place it in an environment variable:
export IAM_TOKEN="<IAM_token>" -
Clone the cloudapi
repository:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiBelow, we assume the repository contents are stored in the
~/cloudapi/directory. -
Use the ClusterService.ListLogs call to execute the following request, e.g., via 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": "<cluster_ID>", "service_type": "<service_type>", "column_filter": [ "<column_1>", "<column_2>", ..., "<column_N>" ], "from_time": "<time_range_left_boundary>", "to_time": "<time_range_right_boundary>" }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.mongodb.v1.ClusterService.ListLogsWhere:
-
service_type: Source service type for logs:MONGOD: Yandex StoreDoc operations log.AUDIT: Audit log.
-
column_filter: List of data columns:hostname: Host name.component: Type of component to log, Example:HTTP-Session.message: Message output by the component.query_id: Request ID.severity: Logging level, e.g.,Debug.thread: ID of the thread involved in query handling.
You can specify more than one column in the
column_filterparameter if you want to filter logs by multiple columns.from_time: Left boundary of a time range in RFC-3339 format, Example:2006-01-02T15:04:05Z.
to_time: The end time of the time range in the same format asfrom_time.
You can get the cluster ID from the folder’s cluster list.
-
-
Check the server response to make sure your request was successful.