Browsing Tag

Cloud Log Analytics

NCLOUD

[NCLOUD] Cloud Log Analytics 서비스의 원하는 로그를 원하는 시간에 Export 하기

안녕하세요. MANVSCLOUD 김수현입니다.

네이버 클라우드 플랫폼(NCLOUD)의 Cloud Log Analytics 서비스는 로그를 실시간으로 수집, 검색, 그리고 분석할 수 있는 서비스입니다.

Cloud Log Analytics 서비스에서 오늘은 ‘Export Log’ 기능의 한계를 알아보고 이를 해결할 수 있는 방법을 공유드리고자 합니다.


이미 Cloud Log Analytics 서비스에 대해 많이 다루었기 때문에 Cloud Log Analytics 서비스에 대한 상세한 설명은 하지 않도록 하겠습니다.

Cloud Log Analytics 서비스를 사용해보셨다면 Export Log([자동 내보내기 설정]) 기능에 대해 알고 있을 것이라 생각됩니다. 그리고 이 기능의 한계로 고민도 해보셨을 것입니다.

대표적인 [자동 내보내기 설정]의 한계점으로 아래 세 가지를 말할 수 있습니다.

  1. 로그 분류의 제한: 현재는 로그 종류별로 원하는 Object Storage 버킷에 분류하여 저장할 수 없습니다. 대신, 선택한 모든 로그 종류가 하나의 덩어리로 함께 저장됩니다.
  2. 저장 시간 제어 불가: 특정 시간대에 로그를 저장하도록 지정할 수 없으며 랜덤한 시간대에 로그가 저장됩니다.
  3. 선별적 로그 저장 불가: 특정 키워드나 조건에 맞는 로그만을 선별하여 별도로 저장할 수 없습니다.

이러한 한계점들로 인해 세밀한 로그 관리와 분석이 필요한 사용자들은 어려움을 겪을 수 있습니다.

    이러한 한계점을 극복하기 위해 저는 Cloud Log Analytics API와 Cloud Functions를 조합하여 사용하는 방법을 제안하고자 합니다. 이 방법을 통해 원하는 로그를 원하는 시간에 정확히 Export할 수 있습니다.


    제 블로그를 오랜 기간 구독해오셨다면 이미 Cloud Functions 사용법은 그 누구보다 잘 사용하시리라 생각됩니다. 따라서 간단하게 예제 코드를 공유하고 어떤 부분을 수정하여 바로 사용할 수 있는지 알려드리겠습니다.

    • Cloud Functions Action 코드 (Python 3.11)
    import hashlib
    import hmac
    import base64
    import requests
    import time
    import json
    from datetime import datetime, timedelta
    
    def main(args):
    
        access_key = args["NCLOUD_ACCESS_KEY"]
        secret_key = args["NCLOUD_SECRET_KEY"]
    
        api_server = "https://cloudloganalytics.apigw.ntruss.com"
        api_uri = "/api/kr-v1/logs/search/export"
    
        timestamp = int(time.time() * 1000)
        timestamp = str(timestamp)
    
        secret_key = bytes(secret_key, 'UTF-8')
    
        method = "POST"
    
        uri = api_uri + "?responseFormatType=json"
    
        message = method + " " + uri + "\n" + timestamp + "\n" + access_key
        message = bytes(message, 'UTF-8')
        signingKey = base64.b64encode(hmac.new(secret_key, message, digestmod=hashlib.sha256).digest())
    
        http_header = {
                'x-ncp-apigw-signature-v2': signingKey,
                'x-ncp-apigw-timestamp': timestamp,
                'x-ncp-iam-access-key': access_key,
                'Content-Type': 'application/json',
                }
        # 현재 시간 가져오기
        current_time = datetime.now()
    
        # 검색 시작 시간 계산 (현재 시간의 시간 단위를 0으로 설정)
        start_time = current_time.replace(minute=0, second=0, microsecond=0) - timedelta(hours=1)
    
        # 검색 종료 시간 계산 (현재 시간의 시간 단위를 0으로 설정)
        end_time = current_time.replace(minute=0, second=0, microsecond=0)
    
        # 검색 시작 시간과 종료 시간을 밀리초 단위의 타임스탬프로 변환
        start_timestamp = int(start_time.timestamp() * 1000)
        end_timestamp = int(end_time.timestamp() * 1000)
    
        payload = {
            "keyword": "{원하는 키워드}",
            "logTypes": "{로그 종류 선택}",
            "timestampFrom": str(start_timestamp),
            "timestampTo": str(end_timestamp),
            "bucketname": "{OBJECT STORAGE 버킷명}"
        }
    
        response = requests.post(api_server + uri, headers=http_header, json=payload)
        
        data = json.loads(response.text)
        
        return data
    

    위 코드에서 {원하는 키워드}, {로그 종류 선택}, {OBJECT STORAGE 버킷명} 세 가지를 수정해줘야합니다.

    • {원하는 키워드} : 로그 내에 포함될 키워드
      ex) Execution completed successfully
    • {로그 종류 선택} : Cloud Log Analytics의 [Keyword 검색] 탭에서 ‘로그 종류 선택’을 클릭해보면 선택 가능한 로그 종류들 중 하나
      ex) Cloud_Functions_actions
    • {OBJECT STORAGE 버킷명} : 해당 로그를 저장할 Object Storage 버킷명
      ex) manvscloud-log-bucket

    이 Action의 디폴트 파라미터는 Cloud Log Analytics 검색 및 Export Log 권한 및 Object Storage에 저장을 할 수 있는 권한을 가진 Access Key 및 Secret Key가 추가되어야 합니다.

    {"NCLOUD_ACCESS_KEY":"YOUR_NCLOUD_ACCESS_KEY","NCLOUD_SECRET_KEY":"YOUR_NCLOUD_SECRET_KEY"}

    이제 이 코드에 cron Trigger를 설정하여 원하는 시간마다 로그를 Export할 수 있습니다.

    이 방식을 사용하면 다음과 같은 다양한 로그 관리 시나리오를 구현할 수 있습니다:

    1. 시간별 로그 아카이빙: 매시간마다 로그를 Export하여 시간대별로 정리된 로그 아카이브를 만들 수 있습니다.
    2. 특정 이벤트 모니터링: 중요한 키워드나 이벤트와 관련된 로그만을 별도로 추출하여 모니터링할 수 있습니다.
    3. 로그 분석 자동화: Export된 로그를 자동으로 분석하는 추가 스크립트를 연결하여 로그 분석 프로세스를 자동화할 수 있습니다.
    4. 컴플라이언스 요구사항 충족: 특정 유형의 로그를 정기적으로 저장하여 규제 준수 요구사항을 충족시킬 수 있습니다.

    위 예시와 같이 응용한다면 Cloud Log Analytics의 기존 한계를 극복하고 더욱 유연하고 강력한 로그 관리 시스템으로 활용이 가능합니다.


    이 포스팅에서는 ‘Export Log’ 기능의 한계점을 극복하기 위해 Cloud Log Analytics API와 Cloud Functions를 결합한 새로운 접근 방식을 제안해보았습니다.

    네이버 클라우드는 다양한 서비스들을 제공하지만 사실 부족한 기능이 있는 것도 사실입니다. 하지만 API를 제공하기 때문에 제공되는 기능만 사용할 수 있는 것은 아닙니다.

    이러한 API 기반의 접근 방식은 단순히 기능적 한계를 극복하는 것 이상의 의미를 갖습니다. 엔지니어들은 간단한 API 활용부터 시작하여 기본적인 개발 역량을 향상시킬 수 있고 이는 단순히 서비스를 사용하는 것을 넘어 깊이 있는 이해와 기술 습득의 기회를 제공합니다. 또한 API를 통해 자신의 요구사항에 맞는 솔루션을 직접 구현할 수 있어 더욱 유연하고 최적화된 시스템을 구축할 수 있습니다.

    따라서 저는 네이버 클라우드를 처음 접하는 학생 또는 취준생, 주니어 엔지니어들이 콘솔에 존재하는 기능 외에도 API를 활용하여 많은 것을 고민해보고 활용해보았으면 합니다.

    긴 글 읽어주셔서 감사합니다.