--- title: "search" slug: "effective-log-search-analytics-search" updated: 2026-10-08T07:24:56Z published: 2026-10-08T07:24:56Z canonical: "api.ncloud-docs.com/effective-log-search-analytics-search" --- > ## Documentation Index > Fetch the complete documentation index at: https://api.ncloud-docs.com/llms.txt > Use this file to discover all available pages before exploring further. # search ## 概要 Effective Log Search & Analyticsのプロジェクト別のログを照会できます。 ## リクエスト ### API URL ``` POST https://elsa.apigw.ntruss.com/api/v1/logs/search ``` ### リクエストヘッダ 共通の設定に明示されたリクエストヘッダが必要です。 [NAVERクラウドプラットフォームの認証キーおよび Signature作成ガイドへ](https://api.ncloud-docs.com/beta/docs/ja/ko/common-ncpapi) ``` x-ncp-apigw-timestamp: {current timestamp} x-ncp-iam-access-key: {your iam access key} x-ncp-apigw-signature-v2: {generated signature} ``` ### リクエストパラメータ | パラメータ名 | 必須の有無 | タイプ | 制限事項 | 説明 | | --- | --- | --- | --- | --- | | projectKey | Yes | string | 1-53 | プロジェクトキー 例: “projectKey”:“Pbxxxxx_elsa-test” | | projectId | Yes | int | | Project Id 例: “projectId”:8171 | | from | Yes | int | | 検索を開始するタイムスタンプ(UTC milliseconds)。 例: “from”:1381190400000 | | to | Yes | int | | 検索を終了するタイムスタンプ(UTC milliseconds)。 例: “to”:1381190400000 | | offset | No | int | offset+limit<=10000 | デフォルト: 0 検索結果の開始部分でオフセット値を指定できます。0は最初のレコードから開始することを意味します 例: “offset”: 100 | | limit | No | int | 1 - 1000 | デフォルト: 10 リクエストに対して返すログの数です。offset値を基準に、指定した分だけのログを返します 例: “limit”: 500 | | sorts | No | | | デフォルト: [{"logTime":"DESC"}] ソート基準と方式を指定できます sorts機能の利用時のみ適用される事項があります。ソート基準のフィールドが特定のフィールド(projectName、logTime、logLevel、host、projectVersion)以外の String型フィールドの場合、当該フィールドの後ろに「.raw」を付けます sortsに必要なフィールドが「.raw」を付ける対象かどうか不明な場合は、/api/v1/fields APIから確認できます 例: “sorts”: [{"logType.raw":"DESC"}] “sorts”: [{"projectVersion":"ASC"},{"logType.raw":"DESC"}] | | query | No | string | | 論理演算子 AND OR NOT + - 使用方法の詳細はは、[Query String Syntax](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html) / [Lucene Query Syntax](https://lucene.apache.org/core/4_6_1/queryparser/org/apache/lucene/queryparser/classic/package-summary.html#Overview)をご参照ください。 JSON記号 次のような JSON記号を検索するには、文字の前に「\」を付けます " \ 例: ソース: "query": "NOT logLevel:"FATAL" AND projectName:"elsa-test" AND (agent:"iPhone" OR agent:"iPod")" エスケープ文字へ変更後: "query": "NOT logLevel:\"FATAL\" AND projectName:\"elsa-test\" AND (agent:\"iPhone\" OR agent:\"iPod\")" | | includeFields | No | [string] | | ログを照会する際に必要なフィールド名リストです。 例: “includeFields”: [“logSource”,” logType”,”body”] | | excludeFields | No | [string] | | ログを照会する時に不要なフィールド名リストです。 例: “excludeFields”: [“DmpReport”,” logType”] | ### リクエストボディ ``` { "projectId": 8171, "projectKey": "Pbxxxxx_elsa-test", "from": 1381190400000, "to": 1381190400000, "offset": 0, "limit": 1000, "query": "NOT logLevel:\"FATAL\" AND projectName:\" elsa-test\" AND (agent:\"iPhone\" OR agent:\"iPod\")", "includeFields": [ "logSource", "logType", "body" ], "sorts": [ { "projectVersion": "ASC" }, { "logType.raw": "DESC" } ] } ``` ### リクエスト例 ``` import hashlib import hmac import base64 import time import requests def make_signature(access_key, secret_key, timestamp, url): timestamp = str(timestamp) secret_key = bytes(secret_key, 'UTF-8') method = "POST" message = method + " " + url + "\n" + timestamp + "\n" + access_key message = bytes(message, 'UTF-8') signingKey = base64.b64encode(hmac.new(secret_key, message, digestmod=hashlib.sha256).digest()) return signingKey.decode('UTF-8') def log_search(): baseurl = "https://elsa.apigw.ntruss.com" #{OpenAPI endpoint} url = "/api/v1/logs/search" access_key = "accessKey" #{Main / Sub Account Access Key} secret_key = "secretKey" #{Main / Sub Account Secret Key} timestamp = int(time.time() * 1000) signature = make_signature(access_key, secret_key, timestamp, url) url = baseurl + url payload = { "projectId": 8171, "projectKey": "Pbxxxxx_elsa-test", "from": 1381190400000, "to": 1381190400000, "offset": 0, "limit": 1000, "query": "NOT logLevel:\"FATAL\" AND projectName:\" elsa-test\" AND (agent:\"iPhone\" OR agent:\"iPod\")", "includeFields": ["logSource","logType","body"], "sorts":[{"projectVersion":"ASC"},{"logType.raw":"DESC"}] } headers = { "x-ncp-apigw-timestamp": str(timestamp), "x-ncp-iam-access-key": access_key, "x-ncp-apigw-signature-v2": str(signature) } response = requests.post(url=url, json=payload, verify=True, headers=headers ) ``` ## レスポンス ### レスポンスボディ ``` { "data": { "total": 2, "logs": [ { "sort": [ "9.9.9", "elsa-log" ], "id": "27mt7eQqk9xILgiLdJcgxxxx", "existDmp": false, "source": { "logType": "elsa-log", "logSource": "json", "body": "Hello, I am [ xxx ], Nice to meet you !" } }, { "sort": [ "9.9.9", "nelo2-log" ], "id": "55mt7eQqk9xILgiLdJcgxxxx", "existDmp": false, "source": { "logType": " elsa-log ", "logSource": "json", "body": "Hello, I am [ xxx ], Nice to meet you !" } } ] }, "status": 200 } ```