search
    • PDF

    search

    • PDF

    Article Summary

    概要

    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}
    

    リクエストパラメータ

    パラメータ名必須の有無タイプ制約事項説明
    projectKeyYesstring1-53プロジェクトキー

    例:
    “projectKey”:“Pbxxxxx_elsa-test”
    projectIdYesintProject ID

    例:
    「projectId」:8171
    fromYesint検索を開始するタイムスタンプ(UTC milliseconds)。

    例:
    「from」:1381190400000
    toYesint検索を終了するタイムスタンプ(UTC milliseconds)。

    例:
    「to」:1381190400000
    offsetNointoffset+limit<=10000デフォルト値:0
    検索結果の開始部分でオフセット値を指定できます。0は最初のレコードで開始することを意味します。

    例:
    「offset」:100
    limitNoint1 - 1000デフォルト値:10
    リクエストに対して返すログ数です。オフセット値を基準に指定した値だけのログを返します。

    例:
    「limit」:500
    sortsNoデフォルト値:[{"logTime":"DESC"}]
    ソート基準と方式を指定できます。
    ソート機能を利用する場合にのみ適用する部分があります。ソート基準のフィールドが特定フィールド(projectName、logTime、logLevel、host、projectVersion)以外のStringタイプフィールドの場合、そのフィールドの後ろに「.raw」を入力する必要があります。
    ソートが必要なフィールドが「.raw」を入力する対象なのか分からない場合、/api/v1/fields APIを通じて確認できます。

    例:
    “sorts”: [{"logType.raw":"DESC"}]
    “sorts”: [{"projectVersion":"ASC"},{"logType.raw":"DESC"}]
    queryNostringブール演算子
    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\")"
    includeFieldsNo[string]ログを照会する時に必要なフィールド名のリストです。

    例:
    “includeFields”: [“logSource”,” logType”,”body”]
    excludeFieldsNo[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
    }
    

    この記事は役に立ちましたか?

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.