Cloudwatch 로그 분석
4559 단어 logsawscloudwatchjava
소개
Cloudwatch 로그는 Cloudwatch라는 기치 아래 AWS에서 제공하는 서비스 중 하나입니다. 이름에서 알 수 있듯이 로그를 모니터링하고 저장하는 데 사용됩니다. 이러한 로그는 ECS, Lambda, 배치 작업(일반적으로 EC2) 등과 같은 다양한 서비스/리소스에서 생성될 수 있습니다. 이 게시물에서는 Cloudwatch 로그의 구조와 이러한 로그를 가져오기 위한 몇 가지 코드 샘플을 살펴보겠습니다.
해부
서비스와 관련된 3가지 주요 용어가 있습니다.
특정 서비스에 속하는 로그. 예를 들어 ecs 서비스용 로그 그룹, 람다용 로그 그룹 등을 가질 수 있습니다. 대부분의 경우 AWS는 기본적으로 로그 그룹을 생성합니다.
마찬가지로 배치 작업의 전체 실행으로 생성된 모든 로그도 하나의 로그 스트림으로 끝납니다.
Logger.info()
, 모든 System.out.println()
, 모든 print()
하나의 로그 이벤트를 구성합니다. 로그 이벤트에는 3가지 속성이 있습니다.a) 메시지(실제 메시지)
b) 타임스탬프(메시지가 생성된 시점)
c) 수집 타임스탬프(메시지가 CloudWatch에 수집된 시점)
다음 이미지는 로그 그룹, 로그 스트림 및 로그 이벤트 간의 관계를 보여줍니다.
자바 SDK 사용
이 부분에서는 특정 로그 스트림에서 모든 로그를 검색하는 방법을 살펴보겠습니다. 예를 들어 람다 오류 발생 시 일부 로그 처리를 자동화하려는 경우에 유용할 수 있습니다.
(언급된 버전 언급자는 상징적인 목적을 위한 것이므로 최신 버전 또는 기존 종속성과 호환되는 버전을 선택해야 합니다.)
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-logs</artifactId>
<version>1.11.519</version>
</dependency>
AWSLogs logsClient = AWSLogsClientBuilder.defaultClient();
먼저 요청 객체를 생성해야 합니다. 시작하려면 로그 그룹 이름과 로그 스트림 이름을 전달합니다.
GetLogEventsRequest logEventsRequest = new GetLogEventsRequest(logGroupName, logStreamName)
이제 위에서 만든 클라이언트를 사용하여 로그를 가져올 수 있습니다.
GetLogEventsResult logEventsResult = logsClient.getLogEvents(logEventsRequest);
GetLogEventResult에는 다음 정보가 포함되어 있습니다.
List<OutputLogEvents>
토큰은 어떻게 되나요? 로그 이벤트를 가져오기 위해 호출하면 결과에 모든 로그가 포함되지 않을 수 있습니다. 1MB(로그 이벤트 10,000개)로 제한됩니다. 특정 로그 스트림에 더 이상 로그가 기록되지 않는 경우 다음 역방향 토큰을 사용하여 가져와야 하는 오래된 로그 이벤트가 대부분 있을 것입니다. 로그 스트림에 새 로그 이벤트가 있는 경우 다음 전달 토큰을 사용하면 더 많은 로그 이벤트가 생성됩니다. 그런 경우, 우리가 얻은 첫 번째 결과가 우리를 로그의 한가운데에 놓고 완전한 그림을 얻기 위해 앞뒤로 이동해야 한다고 가정하는 것이 좋습니다.
토큰을 사용하여 더 많은 로그를 가져오는 시각적 표현
반복적으로 또는 재귀적으로 이 작업을 수행할 수 있습니다. 다음은 토큰을 반복적으로 사용하기 위한 코드 샘플입니다.
List<OutputLogEvent> outputLogEvents = new LinkedList<>();
GetLogEventsResult eventsResult = new GetLogEventsResult();
String nextToken = token;
do{
logEventsRequest.setNextToken(nextToken);
eventsResult = logsClient.getLogEvents(logEventsRequest);
outputLogEvents.addAll(eventsResult.getEvents());
nextToken = tokenDirection.equals(TOKEN_DIRECTION.BACKWARD) ? eventsResult.getNextBackwardToken()
: eventsResult.getNextForwardToken();
LOGGER.info("Next Token: " + nextToken);
}while (CollectionUtils.isNotEmpty(eventsResult.getEvents()));
순회하는 동안 시퀀스에 대해 주의를 기울이거나 모든 이벤트를 가져오고 다음을 사용하여 정렬할 수 있습니다.
타임 스탬프.
outputLogEvents
.stream()
.sorted(Comparator.comparing(OutputLogEvent::getTimestamp))
.collect(Collectors.toList());
이것으로 기사는 끝납니다.
건배!
추가 읽기 및 참조 사용
a-Cloudwatch Logs USer Guide
b- SDK Javadoc
Reference
이 문제에 관하여(Cloudwatch 로그 분석), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/crawlingcrusader/anatomy-of-cloudwatch-logs-26lg텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)