AWS 환경에서의 로그 분석 자동화
DevOps 환경에서 로그 분석은 매우 중요한 작업입니다. 로그 데이터를 분석하면 애플리케이션의 성능을 모니터링하고, 문제를 조기에 발견하며, 보안 위협을 탐지하는 데 큰 도움이 됩니다. AWS 환경에서 로그 분석을 자동화하는 방법을 살펴보겠습니다. 여기서 다룰 내용은 AWS CloudWatch Logs, AWS Lambda, Amazon S3, 그리고 Amazon Athena를 이용한 로그 분석 방법입니다.
AWS CloudWatch Logs 설정
AWS CloudWatch Logs를 사용하면 AWS 리소스에서 생성되는 로그 스트림을 수집하고 관리할 수 있습니다. 다음 단계로 CloudWatch Logs를 설정해 보겠습니다.
- CloudWatch Logs 생성: 콘솔에서 CloudWatch로 이동한 후 ‘Logs’ 메뉴를 클릭합니다. 새로운 로그 그룹을 생성합니다.
- 로그 스트림 생성: EC2 인스턴스 또는 Lambda 함수에서 로그를 CloudWatch Logs로 전송하려면 각각의 서비스에서 로그 스트림을 생성해야 합니다.
- IAM 역할 부여: EC2 인스턴스에 CloudWatch Logs에 접근할 수 있는 IAM 역할을 부여해야 합니다.
- Lambda 함수 생성: AWS Lambda 콘솔로 가서 새로운 함수를 생성합니다. Python을 선택하고, 다음과 같은 기본 코드를 작성합니다.
- CloudWatch Logs와 Lambda 연결: 로그 그룹의 ‘Subscription filters’에서 새 필터를 추가하고, 이 Lambda 함수를 호출하도록 설정합니다.
- 데이터베이스 및 테이블 생성: Athena 콘솔에서 데이터베이스를 생성하고, S3 버킷에 저장된 로그 파일을 기반으로 테이블을 생성합니다. SQL 쿼리는 다음과 같습니다.
- 쿼리 실행: 이제 Athena 쿼리를 실행하여 로그 데이터를 분석할 수 있습니다. 예를 들어, 특정 시간대에 발생한 오류 로그를 찾는 쿼리는 다음과 같습니다.
- EC2 인스턴스의 경우, CloudWatch Agent를 설치하고 설정해야 합니다. 아래는 CloudWatch Agent를 설치하는 명령어입니다.
sudo yum install -y amazon-cloudwatch-agent
- 설치 후 /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard를 실행해 설정을 완료합니다.
AWS Lambda를 이용한 로그 처리
CloudWatch Logs에 로그가 수집되면, AWS Lambda 함수를 사용하여 로그를 자동으로 처리할 수 있습니다. Lambda 함수를 생성하고, CloudWatch Logs에 이벤트를 트리거로 설정합니다.
import json
import boto3
s3 = boto3.client('s3')
def lambda_handler(event, context):
log_data = json.loads(event['Records'][0]['Sns']['Message'])
bucket_name = "your-s3-bucket-name"
key = f"logs/{log_data['logGroup']}/{log_data['logStream']}.json"
s3.put_object(Body=json.dumps(log_data), Bucket=bucket_name, Key=key)
return {
'statusCode': 200,
'body': json.dumps('Log saved to S3!')
}
Amazon S3에 로그 저장
CloudWatch Logs에서 수집한 로그를 AWS Lambda를 통해 Amazon S3에 저장합니다. S3는 대용량 데이터를 저장하고 쉽게 액세스할 수 있는 솔루션입니다. 위의 Lambda 함수 예제에서 S3에 로그 데이터를 JSON 형식으로 저장하도록 설정했습니다.
Amazon Athena로 로그 분석
저장된 로그를 분석하기 위해 Amazon Athena를 사용할 수 있습니다. Athena는 S3에 저장된 데이터를 SQL 쿼리를 사용하여 분석할 수 있는 서비스입니다.
CREATE EXTERNAL TABLE IF NOT EXISTS log_data (
logGroup string,
logStream string,
message string,
timestamp bigint
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://your-s3-bucket-name/logs/';
SELECT *
FROM log_data
WHERE message LIKE '%ERROR%'
AND timestamp BETWEEN 1609459200000 AND 1609545600000; -- 시간 범위 설정
마무리
AWS 환경에서 로그 분석 자동화는 DevOps 프로세스를 최적화하는 데 큰 도움이 됩니다. CloudWatch Logs와 Lambda를 연계하여 로그 수집을 자동화하고, S3에 저장된 데이터를 Athena를 통해 쉽게 분석할 수 있습니다. 이러한 자동화 작업을 통해 더 빠르게 문제를 발견하고, 보다 나은 시스템 운용이 가능합니다. 로그 분석의 자동화는 DevOps 팀에게 더 많은 시간을 절약하고, 인프라와 애플리케이션의 성능을 한층 향상시킬 수 있는 기회를 제공합니다.