[Yandex Cloud documentation](../../index.md) > [Yandex StoreDoc](../index.md) > [Step-by-step guides](index.md) > Logs and monitoring > Viewing cluster logs

# Viewing Yandex StoreDoc cluster logs

Yandex StoreDoc enables retrieval of [cluster log snippets](#get-log) for a chosen period and [real-time log viewing](#get-log-stream).

{% note info %}

Cluster operation logs are retained for 45 days, while audit logs are stored for 90 days.

{% endnote %}

## Getting a cluster log {#get-log}

{% list tabs group=instructions %}

- Management console {#console}

    1. Navigate to the [page of the folder](https://console.yandex.cloud) that contains your cluster.
    1. Navigate to **Yandex StoreDoc**.
    1. Click the name of your cluster and select the ![image](../../_assets/console-icons/receipt.svg) **Logs** tab.
    1. Specify a time period for the log entries you want to view: enter it manually or select in the calendar using the date input field.
    1. If needed, specify the hosts and logging level in the row containing the date field.

    You will see a list of log entries for the chosen time period. To see details of a specific event, click its entry in the list.

    If the list is too long to display all entries at once, click **Load more** at the end of the list.

- CLI {#cli}

    If you do not have the Yandex Cloud CLI yet, [install and initialize it](../../cli/quickstart.md#install).

    The folder used by default is the one specified when [creating](../../cli/operations/profile/profile-create.md) the CLI profile. To change the default folder, use the `yc config set folder-id <folder_ID>` command. You can also specify a different folder for any command using `--folder-name` or `--folder-id`. If you access a resource by its name, the search will be limited to the default folder. If you access a resource by its ID, the search will be global, i.e., through all folders based on access permissions.

    1. See the description of the CLI command for viewing cluster logs:

        ```bash
        yc managed-mongodb cluster list-logs --help
        ```

    1. Run the command below to get cluster logs. Note that this example does not show all available command options:

        ```bash
        yc managed-mongodb cluster list-logs <cluster_name_or_ID> \
           --limit <entry_number_limit> \
           --service-type <service_type> \
           --columns <list_of_data_columns> \
           --filter <entry_filtration_settings> \
           --since <time_range_start> \
           --until <time_range_end>
        ```

        Where:

        * `--limit`: limits on the number of entries to output.
        * `--service-type`: Service type for log entries. Possible values are `mongod`, `mongos`, `mongocfg`, and `audit`.
        * `--columns`: List of output columns:
            * `component`: Type of logged component, e.g, `CONTROL`.
            * `context`: Executable module name, e.g., `signalProcessingThread`.
            * `hostname`: [Host name](hosts.md#list-hosts).
            * `message`: Component’s log message.
            * `severity`: Logging level, e.g., `I` (`Info`), `W` (`Warning`), etc.

            {% note info %}

            The list of output columns depends on the selected `--service-type`.

            {% endnote %}

        * `--filter`: Record filter settings, e.g., `message.hostname='node1.mdb.yandexcloud.net'`.
        * `--since`: Left boundary of a time range in [RFC-3339](https://www.ietf.org/rfc/rfc3339.html), `HH:MM:SS` format or a time interval relative to the current time. Examples: `2006-01-02T15:04:05Z`, `15:04:05`, `2h`, `3h30m ago`.
        * `--until`: right boundary of a time range, the format is similar to that of `--since`.

    You can get the cluster name and ID with the [list of clusters in the folder](cluster-list.md#list-clusters).

- REST API {#api}

    1. [Get an IAM token for API authentication](../api-ref/authentication.md) and put it into an environment variable:

        ```bash
        export IAM_TOKEN="<IAM_token>"
        ```

    1. Call the [Cluster.ListLogs](../api-ref/Cluster/listLogs.md) method, e.g., via the following [cURL](https://curl.se/) request:

        ```bash
        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 `columnFilter` parameter. 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](https://www.ietf.org/rfc/rfc3339.html) format, Example: `2006-01-02T15:04:05Z`.

            * `toTime`: End of the time range in the same format as `fromTime`.

        You can get the cluster ID from the [list of clusters in your folder](cluster-list.md#list-clusters).

    1. Check the [server response](../api-ref/Cluster/listLogs.md#yandex.cloud.mdb.mongodb.v1.ListClusterLogsResponse) to make sure your request was successful.

- gRPC API {#grpc-api}

    1. [Get an IAM token for API authentication](../api-ref/authentication.md) and put it into an environment variable:

        ```bash
        export IAM_TOKEN="<IAM_token>"
        ```

    1. Clone the [cloudapi](https://github.com/yandex-cloud/cloudapi) repository:
       
       ```bash
       cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
       ```
       
       Below, we assume that the repository contents reside in the `~/cloudapi/` directory.
    1. Call the [ClusterService.ListLogs](../api-ref/grpc/Cluster/listLogs.md) method, e.g., via the following [gRPCurl](https://github.com/fullstorydev/grpcurl) request:

        ```bash
        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.ListLogs
        ```

        Where:

        * `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_filter` parameter if you want to filter logs by multiple columns.

            * `from_time`: Left boundary of a time range in [RFC-3339](https://www.ietf.org/rfc/rfc3339.html) format, Example: `2006-01-02T15:04:05Z`.

            * `to_time`: End of the time range in the same format as `from_time`.

        You can get the cluster ID with the [list of clusters in the folder](cluster-list.md#list-clusters).

    1. Check the [server response](../api-ref/grpc/Cluster/listLogs.md#yandex.cloud.mdb.mongodb.v1.ListClusterLogsResponse) to make sure your request was successful.

{% endlist %}

## Streaming cluster logs {#get-log-stream}

This method allows you to stream cluster logs in real time.

{% list tabs group=instructions %}

- CLI {#cli}

    If you do not have the Yandex Cloud CLI yet, [install and initialize it](../../cli/quickstart.md#install).

    The folder used by default is the one specified when [creating](../../cli/operations/profile/profile-create.md) the CLI profile. To change the default folder, use the `yc config set folder-id <folder_ID>` command. You can also specify a different folder for any command using `--folder-name` or `--folder-id`. If you access a resource by its name, the search will be limited to the default folder. If you access a resource by its ID, the search will be global, i.e., through all folders based on access permissions.

    To view cluster logs in real time, run this command:

    ```bash
    yc managed-mongodb cluster list-logs <cluster_name_or_ID> --follow
    ```

    You can get the cluster name and ID with the [list of clusters in the folder](cluster-list.md#list-clusters).

- REST API {#api}

    1. [Get an IAM token for API authentication](../api-ref/authentication.md) and put it into an environment variable:

        ```bash
        export IAM_TOKEN="<IAM_token>"
        ```

    1. Call the [Cluster.StreamLogs](../api-ref/Cluster/streamLogs.md) method, e.g., via the following [cURL](https://curl.se/) request:

        ```bash
        curl \
            --request GET \
            --header "Authorization: Bearer $IAM_TOKEN" \
            --url 'https://mdb.api.cloud.yandex.net/managed-mongodb/v1/clusters/<cluster_ID>:stream_logs' \
            --url-query serviceType=<service_type> \
            --url-query columnFilter=<column_list> \
            --url-query fromTime=<time_range_start> \
            --url-query toTime=<time_range_end> \
            --url-query filter=<log_filter>
        ```

        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 `columnFilter` parameter. 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](https://www.ietf.org/rfc/rfc3339.html) format, Example: `2006-01-02T15:04:05Z`.

            * `toTime`: End of the time range in the same format as `fromTime`.

        * `filter`: Log filter. You can use a filter to stream only the logs you need.

            To learn more about filters and their syntax, see the [API reference](../api-ref/Cluster/streamLogs.md#yandex.cloud.mdb.mongodb.v1.StreamClusterLogsRequest).

            {% note tip %}
            
            A filter can contain quotation marks and other characters. Escape them if you need to.
            
            {% endnote %}
            
            Supported filters:
            
            * `message.hostname`: Filtering by host name.
            * `message.severity`: Filtering by logging level.

        You can get the cluster ID with the [list of clusters in the folder](cluster-list.md#list-clusters).

    1. Check the [server response](../api-ref/Cluster/streamLogs.md#yandex.cloud.mdb.mongodb.v1.StreamLogRecord) to make sure your request was successful.

- gRPC API {#grpc-api}

    1. [Get an IAM token for API authentication](../api-ref/authentication.md) and put it into an environment variable:

        ```bash
        export IAM_TOKEN="<IAM_token>"
        ```

    1. Clone the [cloudapi](https://github.com/yandex-cloud/cloudapi) repository:
       
       ```bash
       cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
       ```
       
       Below, we assume that the repository contents reside in the `~/cloudapi/` directory.
    1. Call the [ClusterService.StreamLogs](../api-ref/grpc/Cluster/listLogs.md) method, e.g., via the following [gRPCurl](https://github.com/fullstorydev/grpcurl) request:

        ```bash
        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>",
                "filter": "<log_filter>"
              }' \
          mdb.api.cloud.yandex.net:443 \
          yandex.cloud.mdb.mongodb.v1.ClusterService.StreamLogs
        ```

        Where:

        * `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_filter` parameter if you want to filter logs by multiple columns.

            * `from_time`: Left boundary of a time range in [RFC-3339](https://www.ietf.org/rfc/rfc3339.html) format, Example: `2006-01-02T15:04:05Z`.
        
            * `to_time`: End of the time range in the same format as `from_time`.

        * `filter`: Log filter. You can use a filter to stream only the logs you need.

          To learn more about filters and their syntax, see the [API reference](../api-ref/grpc/Cluster/streamLogs.md#yandex.cloud.mdb.mongodb.v1.StreamClusterLogsRequest).

          {% note tip %}
          
          A filter can contain quotation marks and other characters. Escape them if you need to.
          
          {% endnote %}
          
          Supported filters:
          
          * `message.hostname`: Filtering by host name.
          * `message.severity`: Filtering by logging level.

        You can get the cluster ID with the [list of clusters in the folder](cluster-list.md#list-clusters).

    1. Check the [server response](../api-ref/grpc/Cluster/streamLogs.md#yandex.cloud.mdb.mongodb.v1.StreamLogRecord) to make sure your request was successful.    

{% endlist %}