search
    • PDF

    search

    • PDF

    기사 요약

    개요

    Effective Log Search & Analytics의 프로젝트 별 로그를 조회할 수 있습니다.

    요청

    API URL

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

    요청 헤더

    공통설정에 명시된 요청헤더가 필요합니다.
    NAVER Cloud Platform 인증키 및 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
    검색 결과의 시작 부분에서 offset 값을 지정할 수 있습니다. 0은 첫 번째 레코드에서 시작함을 의미합니다

    예시:
    “offset”: 100
    limitNoint1 - 1000기본값: 10
    요청에 대한 반환할 로그 수입니다. offset 값을 기준으로 지정한 값만큼의 로그를 반환합니다

    예시:
    “limit”: 500
    sortsNo기본값: [{"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"}]
    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.