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
リクエストに対して返すログ数です。オフセット値を基準に指定した値だけのログを返します。

例:
「limit」:500
sorts No デフォルト値:[{"logTime":"DESC"}]
ソート基準と方式を指定できます。
ソート機能を利用する場合にのみ適用する部分があります。ソート基準のフィールドが特定フィールド(projectName、logTime、logLevel、host、projectVersion)以外のStringタイプフィールドの場合、そのフィールドの後ろに「.raw」を入力する必要があります。
ソートが必要なフィールドが「.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
}