search

Prev Next

概要

Effective Log Search & Analyticsのプロジェクト別のログを照会できます。

リクエスト

API URL

POST
https://elsa.apigw.ntruss.com/api/v1/logs/search

リクエストヘッダ

共通の設定に明示されたリクエストヘッダが必要です。
NAVERクラウドプラットフォームの認証キーおよび Signature作成ガイドへ

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 / Lucene Query Syntaxをご参照ください。

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
}