로깅 - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

로깅

로깅은 시스템에서 발생하는 이벤트에 대한 데이터를 보관하는 프로세스입니다. 로그에는 문제, 오류 또는 현재 작업에 대한 정보가 포함될 수 있습니다. 로그는 다음과 같이 여러 유형으로 분류할 수 있습니다.

  • 이벤트 로그

  • 서버 로그

  • 시스템 로그

  • 인증 및 액세스 로그

  • 감사 로그

개발자는 로그에서 특정 오류 코드나 패턴을 검색하고, 특정 필드를 기준으로 필터링하거나, 향후 분석을 위해 안전하게 보관할 수 있습니다. 로그는 개발자가 성능 문제의 근본 원인 분석을 수행하고 시스템 구성 요소 간의 상관 관계를 파악하는 데 도움이 됩니다.

효과적인 로깅 솔루션을 구축하려면 애플리케이션 팀과 인프라 팀 간의 긴밀한 조정이 필요합니다. 로그의 구문 분석, 필터링, 버퍼링 및 상관 관계 분석과 같은 사용 사례를 지원하는 확장 가능한 로깅 인프라가 없는 한 애플리케이션 로그는 유용하지 않습니다. 상관 관계 ID 생성, 비즈니스 크리티컬 메서드의 실행 시간 로깅, 로그 패턴 정의와 같은 일반적인 사용 사례를 단순화할 수 있습니다.

애플리케이션 팀

애플리케이션 개발자는 생성된 로그가 로깅 모범 사례를 따르는지 확인해야 합니다. 모범 사례에는 다음이 포함됩니다.

  • 고유 요청을 추적하기 위한 상관관계 ID 생성

  • 비즈니스 크리티컬 방법에 소요된 시간 기록

  • 적절한 로그 수준의 로깅

  • 공통 로깅 라이브러리 공유

다양한 마이크로서비스와 상호 작용하는 애플리케이션을 설계할 때는 이러한 로깅 설계 원칙을 사용하여 백엔드에서 필터링 및 로그 추출을 단순화하십시오.

상관 관계 ID를 생성하여 고유한 요청을 추적할 수 있습니다.

애플리케이션이 요청을 받으면 헤더에 상관 관계 ID가 이미 있는지 확인할 수 있습니다. ID가 없는 경우 애플리케이션은 ID를 생성해야 합니다. 예를 들어, Application Load Balancer는 라는 헤더를 추가합니다. X-Amzn-Trace-Id 애플리케이션은 헤더를 사용하여 로드 밸런서의 요청을 애플리케이션과 연관시킬 수 있습니다. 마찬가지로 애플리케이션은 종속 마이크로서비스를 호출하는 traceId 경우 이를 삽입해야 요청 흐름의 여러 구성 요소에서 생성되는 로그가 상호 연관되도록 해야 합니다.

비즈니스에 중요한 메서드에 소요되는 시간 기록

응용 프로그램이 요청을 받으면 다른 구성 요소와 상호 작용합니다. 애플리케이션은 비즈니스에 중요한 메서드에 소요되는 시간을 정의된 패턴으로 기록해야 합니다. 이렇게 하면 백엔드의 로그를 더 쉽게 파싱할 수 있습니다. 또한 로그에서 유용한 통찰력을 생성하는 데도 도움이 될 수 있습니다. AOP (종횡지향 프로그래밍) 와 같은 접근 방식을 사용하여 이러한 로그를 생성하면 로깅 문제를 비즈니스 로직에서 분리할 수 있습니다.

적절한 로그 수준의 로깅

애플리케이션은 유용한 양의 정보가 포함된 로그를 작성해야 합니다. 로그 수준을 사용하여 이벤트를 심각도별로 분류할 수 있습니다. 예를 들어, 조사가 필요한 중요 이벤트의 용도 WARNINGERROR 수준. 상세한 추적 INFO 및 대량 DEBUG 이벤트에 및 를 사용하십시오. 프로덕션에 필요한 수준만 캡처하도록 로그 핸들러를 설정합니다. 해당 INFO 수준에서 너무 많은 로깅을 생성하는 것은 도움이 되지 않으며 백엔드 인프라에 압력을 가중시킵니다. DEBUG로깅은 유용할 수 있지만 주의해서 사용해야 합니다. DEBUG로그를 사용하면 대량의 데이터가 생성될 수 있으므로 성능 테스트 환경에서는 사용하지 않는 것이 좋습니다.

공통 로깅 라이브러리 공유

애플리케이션 팀은 개발자가 프로젝트에서 종속 항목으로 사용할 수 있는 사전 정의된 공통 로깅 패턴을 포함하는 공통 로깅 라이브러리를 사용해야 합니다. AWS SDK for Java

인프라 팀

DevOps 엔지니어는 백엔드에서 로그를 필터링하고 추출할 때 다음과 같은 로깅 설계 원칙을 사용하여 노력을 줄일 수 있습니다. 인프라 팀은 다음 리소스를 설정하고 지원해야 합니다.

로그 에이전트

로그 에이전트 (로그 발송자) 는 한 위치에서 로그를 읽고 다른 위치로 보내는 프로그램입니다. 로그 에이전트는 컴퓨터에 저장된 로그 파일을 읽고 중앙 집중화를 위해 로그 이벤트를 백엔드에 업로드하는 데 사용됩니다.

로그는 구조화되지 않은 데이터이므로 구조화해야 로그에서 의미 있는 통찰력을 얻을 수 있습니다. 로그 에이전트는 파서를 사용하여 로그 문을 읽고 타임스탬프, 로그 수준, 서비스 이름과 같은 관련 필드를 추출하고 해당 데이터를 JSON 형식으로 구조화합니다. 엣지에 가벼운 로그 에이전트를 사용하면 리소스 사용률이 낮아지므로 유용합니다. 로그 에이전트는 백엔드로 직접 푸시하거나 데이터를 백엔드로 푸시하는 중간 로그 전달자를 사용할 수 있습니다. 로그 전달자를 사용하면 소스의 로그 에이전트에서 작업 부담을 덜 수 있습니다.

로그 파서

로그 파서는 비정형 로그를 구조화된 로그로 변환합니다. 또한 로그 에이전트 파서는 메타데이터를 추가하여 로그를 보강합니다. 데이터의 데이터 구문 분석은 소스 (애플리케이션 측) 에서 수행하거나 중앙에서 수행할 수 있습니다. 새 필드를 추가할 수 있도록 로그를 저장하는 스키마를 확장할 수 있어야 합니다. JSON과 같은 표준 로그 형식을 사용하는 것이 좋습니다. 하지만 더 나은 검색을 위해 로그를 JSON 형식으로 변환해야 하는 경우도 있습니다. 올바른 파서 표현식을 작성하면 효율적인 변환이 가능합니다.

로그 백엔드

로그 백엔드 서비스는 다양한 소스에서 로그 데이터를 수집, 수집 및 시각화합니다. 로그 에이전트는 백엔드에 직접 기록하거나 중간 로그 전달자를 사용할 수 있습니다. 성능 테스트 중에는 나중에 검색할 수 있도록 로그를 저장해야 합니다. 각 애플리케이션에 대해 개별적으로 백엔드에 로그를 저장합니다. 예를 들어 애플리케이션 전용 인덱스를 사용하고 인덱스 패턴을 사용하여 서로 다른 관련 애플리케이션에 분산된 로그를 검색할 수 있습니다. 로그 검색을 위해 최소 7일 분량의 데이터를 저장하는 것이 좋습니다. 하지만 데이터를 더 오래 저장하면 불필요한 스토리지 비용이 발생할 수 있습니다. 성능 테스트 중에 대량의 로그가 생성되므로 로깅 인프라에서 로깅 백엔드를 확장하고 크기를 적절하게 조정하는 것이 중요합니다.

로그 시각화

애플리케이션 로그에서 의미 있고 실행 가능한 통찰력을 얻으려면 전용 시각화 도구를 사용하여 원시 로그 데이터를 처리하고 그래픽 표현으로 변환하십시오. 차트, 그래프, 대시보드와 같은 시각화는 원시 로그를 볼 때 쉽게 파악하기 어려운 추세, 패턴 및 이상 현상을 발견하는 데 도움이 될 수 있습니다.

시각화 도구를 사용하여 얻을 수 있는 주요 이점은 여러 시스템 및 애플리케이션 전반의 데이터를 상호 연관시켜 종속성과 병목 현상을 식별할 수 있다는 것입니다. 대화형 대시보드를 사용하면 다양한 수준의 세분화로 데이터를 자세히 분석하여 문제를 해결하거나 사용 추세를 파악할 수 있습니다. 전문 데이터 시각화 플랫폼은 모니터링 및 분석을 개선할 수 있는 분석, 경고, 데이터 공유와 같은 기능을 제공합니다.

개발 및 운영 팀은 애플리케이션 로그의 데이터 시각화 기능을 사용하여 시스템 및 애플리케이션 성능에 대한 가시성을 확보할 수 있습니다. 도출된 통찰력은 효율성 최적화, 사용자 경험 개선, 보안 강화, 용량 계획 등 다양한 목적으로 사용될 수 있습니다. 최종 결과는 다양한 이해 관계자에 맞게 조정된 대시보드로, 로그 데이터를 실행 가능하고 통찰력 있는 정보로 요약하는 at-a-glance 뷰를 제공합니다.

로깅 인프라 자동화

애플리케이션마다 요구 사항이 다르기 때문에 로깅 인프라의 설치 및 운영을 자동화하는 것이 중요합니다. IaC (코드형 인프라) 도구를 사용하여 로깅 인프라의 백엔드를 프로비저닝하십시오. 그런 다음 로깅 인프라를 공유 서비스 또는 특정 애플리케이션을 위한 독립적인 맞춤형 배포로 프로비저닝할 수 있습니다.

개발자는 지속적 전달 (CD) 파이프라인을 사용하여 다음을 자동화하는 것이 좋습니다.

  • 필요에 따라 로깅 인프라를 배포하고 필요하지 않을 때는 해체하세요.

  • 다양한 대상에 로그 에이전트를 배포하세요.

  • 로그 파서 및 전달자 구성을 배포하세요.

  • 애플리케이션 대시보드를 배포합니다.

로깅 도구

AWS 기본 로깅, 경보 및 대시보드 서비스를 제공합니다. 다음은 널리 사용되는 로깅 AWS 서비스 리소스와 리소스입니다.