概要
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
}