파이썬을 사용한 서버리스 로그 모니터링 시스템

서버리스 아키텍처는 클라우드 환경에서 애플리케이션을 서버 없이 실행하는 방식으로 점점 인기를 얻고 있습니다. 이러한 아키텍처에서 서버리스 함수는 애플리케이션 로그를 생성하며, 이러한 로그를 관리하고 모니터링하는 것은 매우 중요합니다. 이번 글에서는 파이썬을 사용하여 서버리스 로그를 모니터링하기 위한 시스템을 개발하는 방법에 대해 알아보겠습니다.

로그 수집

서버리스 함수에서 생성된 로그를 수집하기 위해서는 로그 수집기를 구현해야 합니다. 이를 위해 AWS CloudWatch Logs 서비스를 사용할 수 있습니다. 파이썬 boto3 라이브러리를 이용하여 로그 그룹과 로그 스트림을 생성하고, 로그를 수신하여 CloudWatch Logs로 전송하는 코드는 다음과 같습니다.

import boto3

def create_log_group(group_name):
    client = boto3.client('logs')
    client.create_log_group(logGroupName=group_name)

def create_log_stream(group_name, stream_name):
    client = boto3.client('logs')
    client.create_log_stream(logGroupName=group_name, logStreamName=stream_name)

def log_to_cloudwatch(group_name, stream_name, log_message):
    client = boto3.client('logs')
    client.put_log_events(
        logGroupName=group_name,
        logStreamName=stream_name,
        logEvents=[{
            'timestamp': int(time.time() * 1000),
            'message': log_message
        }]
    )

로그 모니터링

CloudWatch Logs에 로그를 전송하면, 이를 실시간으로 모니터링할 수 있습니다. CloudWatch Logs Insights를 사용하면 SQL 쿼리를 통해 로그 데이터를 분석할 수 있습니다. 파이썬의 boto3 라이브러리를 사용하여 Insights 쿼리를 실행하는 예제 코드는 다음과 같습니다.

import boto3

def execute_insights_query(log_group_name, query):
    client = boto3.client('logs')
    response = client.start_query(
        logGroupName=log_group_name,
        queryString=query,
        startTime=int((datetime.datetime.utcnow() - datetime.timedelta(minutes=10)).timestamp()),
        endTime=int(datetime.datetime.utcnow().timestamp())
    )
    query_id = response['queryId']

    waiter = client.get_waiter('query_complete')
    waiter.wait(logGroupName=log_group_name, queryId=query_id)

    response = client.get_query_results(
        queryId=query_id
    )
    return response

서버리스 로그 모니터링 시스템을 개발하기 위해 파이썬과 AWS CloudWatch Logs 서비스를 사용하는 방법에 대해 알아보았습니다. 이를 활용하여 애플리케이션의 로그를 실시간으로 수집하고, Insights 쿼리를 통해 데이터를 분석할 수 있습니다. 이를 통해 서버리스 환경에서도 로그 관리와 모니터링을 효과적으로 수행할 수 있습니다.

#서버리스 #파이썬 #로그모니터링