1. AWS Lambda에서 CloudWatch Logs 작성하기
AWS Lambda는 기본적으로 CloudWatch Logs와 통합됩니다. Java Lambda 함수에서 로그를 작성하는 방법은 여러 가지가 있습니다:
(1) System.out.println 사용
Lambda 함수의 표준 출력(System.out.println)은 자동으로 CloudWatch Logs로 전송됩니다.
public class MyLambdaHandler implements RequestHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> {
@Override
public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input, Context context) {
System.out.println("This is a log message using System.out");
return new APIGatewayProxyResponseEvent().withStatusCode(200).withBody("OK");
}
}
(2) AWS Lambda Logger 사용
Lambda의 Context 객체에서 제공하는 Logger를 사용할 수 있습니다.
@Override
public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input, Context context) {
context.getLogger().log("This is a log message using Context Logger");
return new APIGatewayProxyResponseEvent().withStatusCode(200).withBody("OK");
}
(3) Logback 또는 SLF4J와 같은 Java 로깅 프레임워크 사용
일반적으로 SLF4J와 같은 로깅 프레임워크를 사용하여 로그를 생성하면 더 정교하게 로그를 관리할 수 있습니다.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyLambdaHandler implements RequestHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> {
private static final Logger logger = LoggerFactory.getLogger(MyLambdaHandler.class);
@Override
public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input, Context context) {
logger.info("Info level log");
logger.warn("Warning level log");
logger.error("Error level log");
return new APIGatewayProxyResponseEvent().withStatusCode(200).withBody("OK");
}
}
2. 로그 레벨별로 작성하기
로깅 프레임워크(예: Logback, Log4j, SLF4J)를 사용하면 로그 레벨별로 로그를 작성할 수 있습니다. 주요 로그 레벨은 다음과 같습니다:
- TRACE: 가장 상세한 디버깅 정보.
- DEBUG: 디버깅 목적의 상세 정보.
- INFO: 일반적인 실행 정보.
- WARN: 경고, 문제는 없지만 주의가 필요한 상황.
- ERROR: 에러가 발생한 상황.
Logback 예제 (logback.xml)
logback.xml 파일을 설정하여 로그 레벨과 출력을 제어할 수 있습니다:
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
3. 로그 레벨 동적 변경
(1) Lambda 환경변수 사용
Lambda 환경변수를 활용하여 실행 중 로그 레벨을 변경할 수 있습니다:
- Lambda의 환경변수 LOG_LEVEL을 설정 (예: INFO, DEBUG).
- 코드를 수정하여 환경변수를 읽고 로그 레벨을 설정.
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.Level;
public class MyLambdaHandler {
private static final Logger logger = (Logger) LoggerFactory.getLogger(MyLambdaHandler.class);
public MyLambdaHandler() {
String logLevel = System.getenv("LOG_LEVEL");
if (logLevel != null) {
logger.setLevel(Level.toLevel(logLevel));
}
}
}
(2) CloudWatch Logs Insights에서 로그 필터링
CloudWatch Logs Insights를 사용하여 특정 로그 레벨만 검색하거나 분석할 수 있습니다:
fields @timestamp, @message
| filter @message like "ERROR"
| sort @timestamp desc
| limit 20
4. CloudWatch Logs에서 로그 보기
CloudWatch에서 로그를 확인하려면 Log Group과 Log Stream을 사용합니다.
- Log Group: Lambda 함수 이름별로 생성.
- Log Stream: 각 Lambda 함수 실행별로 구분.
Logs Insights로 로그 검색
AWS Console의 Logs Insights를 사용하면 특정 조건으로 로그를 검색할 수 있습니다. 예를 들어:
- 최근 1시간 동안 ERROR 로그 확인
fields @timestamp, @message
| filter @message like "ERROR"
| sort @timestamp desc
2. 특정 텍스트가 포함된 로그 검색
fields @timestamp, @message
| filter @message like "DB connection error"
| sort @timestamp desc
5. 로그 관리 및 유지 전략
CloudWatch Logs는 기본적으로 로그가 축적되므로 관리가 필요합니다.
(1) 로그 보존 기간 설정
Lambda 함수의 Log Group에서 로그 보존 기간을 설정할 수 있습니다:
- 기본값: 무제한.
- 설정 방법:
aws logs put-retention-policy --log-group-name "/aws/lambda/MyFunction" --retention-in-days 30
(2) 로그 필터와 알람 설정
특정 패턴이 포함된 로그에 대해 알람을 설정합니다:
- CloudWatch Logs에서 Metric Filter 생성.
- 특정 패턴(예: ERROR)에 해당하는 로그를 필터링.
- CloudWatch Alarm 연결.
(3) 로그 전송 및 아카이브
장기적인 로그 보관을 위해 로그를 S3로 전송하거나, 분석을 위해 Amazon OpenSearch(Elasticsearch)로 전송합니다:
- S3로 로그 전송:
aws logs create-export-task --task-name "ExportLogsToS3" \
--log-group-name "/aws/lambda/MyFunction" \
--from 0 --to 1609459200000 \
--destination "my-log-bucket"
- OpenSearch로 로그 전송: AWS Lambda에 Kinesis Data Firehose를 설정하여 OpenSearch로 전달.
6. 요약
- 로그는 System.out.println, Lambda Context Logger, 또는 SLF4J와 같은 로깅 프레임워크를 통해 작성.
- 로깅 레벨은 logback.xml 설정이나 Lambda 환경변수로 동적 변경 가능.
- CloudWatch Logs Insights로 검색 및 필터링 수행.
- 로그 관리는 보존 기간 설정, S3/Elasticsearch로 전송, 그리고 알람 설정으로 최적화.
'AWS' 카테고리의 다른 글
Lambda Cold Start 해결 방법 (0) | 2024.12.12 |
---|---|
AWS Lambda Log 동적 변경 (1) | 2024.11.29 |
vpc flow logs, cloudwatch, cloudtrail (0) | 2024.11.28 |
Java Lambda template.yaml 관리 (0) | 2024.11.18 |
Lambda Java DB 연결 변수 관리 (2) | 2024.11.18 |