Performance analysis tools
Built-in diagnostic tools
Yandex StoreDoc provides tools for collecting performance metrics:
mongostat: Collects CPU and memory usage statistics for Yandex StoreDoc processes.mongotop: Collects read/write statistics for each collection.
To run these tools, use a connection string containing credentials of a 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"
In this example, both utilities continuously output performance metrics, polling the system every 5 seconds.
Profiler
Yandex StoreDoc Includes a built-in profiler. That collects query data and uses it to generate a query optimization strategy. The profiler’s operation is controlled by the Yandex StoreDoc settings, which you can configure when creating a cluster or updating the DBMS settings:
Warning
Setting operationProfiling.mode to all and operationProfiling.slowOpThreshold to a value near 0 will severely degrade cluster performance.
To view the data collected by the profiler, refer to the system.profile collection in each database. To read profiler collections, a user must have the mdbMonitor role. By default, this data is duplicated in the logs.
Currently running queries
To view queries executed by other users, run db.currentOp under the mdbMonitor role:
db.currentOp()
To view the current user's queries, run db.currentOp() with ownOps set to true:
db.currentOp({ "$ownOps": true })
Logs
The logs contain the most detailed information about Yandex StoreDoc operation.
- Open the folder dashboard
. - Navigate to the Yandex StoreDoc service.
- Click the name of your cluster 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 for viewing logs:
yc managed-mongodb cluster list-logs --help -
To retrieve all cluster logs, run this command:
yc managed-mongodb cluster list-logs --id <cluster_ID>You can get the cluster ID from the list of clusters in your folder.
-
Get an IAM token for API authentication and place it in an environment variable:
export IAM_TOKEN="<IAM_token>" -
Call the Cluster.ListLogs method, e.g., via the following cURL
request: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_start> \ --url-query toTime=<time_range_end>Where:
-
serviceType: Target service type for log retrieval: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: End of the time range in the same format asfromTime.
You can get the cluster ID from the list of clusters in your folder.
-
-
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 that the repository contents reside in the
~/cloudapi/directory. -
Call the ClusterService.ListLogs method, e.g., via the following gRPCurl
request: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_start>", "to_time": "<time_range_end>" }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.mongodb.v1.ClusterService.ListLogsWhere:
-
service_type: Target service type for log retrieval:MONGOD: Yandex StoreDoc operations log.AUDIT: Audit log.
-
column_filter: 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 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: End of the time range in the same format asfrom_time.
You can get the cluster ID from the list of clusters in your folder.
-
-
Check the server response to make sure your request was successful.