베하~
안녕하세요 3대 5000의 man, xoxo 입니다.
지난주 로그에 대한 중요성과 ALB 로그를 S3로 저장하는 방법에 대해 알아보았는데요
이번시간에는 해당 S3에 저장되어 있는 로그를 Lambda를 통해
cloudwatch로 전송하는 방법에 대해 알아보도록 하겠습니다
1. <람다 function 생성>
2.<람다 function 설정>
아래와 같이 코드와 AWS role을 설정할 수 있습니다.
3.<람다 function 코드 작성>
저희는 파이썬 코드를 이용하여 람다코드를 구현해보겠습니다.
아래의 내용을 참조하여 각자에 맞는 코드를 작성하면 됩니다!
import os
import boto3
import gzip
import io
import json
import datetime
s3 = boto3.client('s3')
logs = boto3.client('logs')
# Lambda 핸들러 함수
def lambda_handler(event, context):
# S3에서 이벤트 정보 가져오기
s3_event = event['Records'][0]['s3']
bucket_name = s3_event['bucket']['name']
key_name = s3_event['object']['key']
# 로그 그룹과 로그 스트림 설정
log_group_name = '로그를 저장할 로그그룹이름'
log_stream_name = datetime.datetime.now().strftime('%Y/%m/%d') + '/' + key_name
# S3에서 압축된 로그 파일 가져오기
obj = s3.get_object(Bucket=bucket_name, Key=key_name)
gzipfile = io.BytesIO(obj['Body'].read())
with gzip.GzipFile(fileobj=gzipfile, mode='r') as f:
data = f.read().decode('utf-8')
lines = data.split('\n')
# CloudWatch Logs에 로그 이벤트 게시
log_events = []
for line in lines:
if line:
event = {'timestamp': int(datetime.datetime.now().timestamp()*1000), 'message': line}
log_events.append(event)
response = logs.create_log_stream(logGroupName=log_group_name, logStreamName=log_stream_name)
response = logs.put_log_events(logGroupName=log_group_name, logStreamName=log_stream_name, logEvents=log_events)
4.<람다 트리거 설정>
위와 같이 트리거가 생성되면 s3에 로그가 저장될 때 마다 람다함수를 호출하여 해당 로그를 cloudwatch 로그그룹으로 전송합니다.
5.<cloudwatch에 저장된 로그 확인>
위의 결과는 cloudwatch log group에 버킷의 로그들이 저장되는 것을 확인할 수 있습니다.
추가로 log insight를 통해 해당 로그들에 대한 query를 작성하여 로그를 분석하고 특정 로그를 검색할 수 있습니다.
이상 저장된 s3에 저장된 ALB 로그를 cloudwatch로 전송하는 방법에 대해 알아보았습니다.
다음시간에는 반대로 cloudwatch log group에 저장되는 로그를 s3에 저장하는 방법에 대해 알아보겠습니다.
'CSP (Cloud Service Provider) > AWS' 카테고리의 다른 글
[AWS] EKS Service Type 4가지 (0) | 2023.05.21 |
---|---|
[AWS] KMS의 활용 (2) | 2023.05.20 |
[AWS] System Manager Patch Manager을 통한 인스턴스 자동업데이트 구성 (1) | 2023.05.19 |
[AWS] DataSync (0) | 2023.05.19 |
CloudWatch 모니터링 및 알람 (0) | 2023.05.19 |
댓글