View a markdown version of this page

서비스 이벤트 모니터링 - Amazon CloudWatch

서비스 이벤트 모니터링

서비스 이벤트는 CloudWatch Application Signals로 모니터링되는 서비스에 대한 자동화된 심층 관찰성을 제공합니다. 추가 코드 변경 없이 오류 지표, 함수 수준 성능 데이터, 인시던트 스냅샷(요청이 지연 시간 임곗값을 초과하거나 예외가 발생하는 경우) 및 배포 이벤트를 캡처합니다.

서비스 이벤트 작동 방식

서비스 이벤트는 계측된 서비스에서 다음과 같은 유형의 신호를 수집합니다.

  • 오류 지표 - 각 작업에 대한 예외 유형별 오류 수 및 비율을 통해 가장 빈번하고 증가 추세에 있는 예외를 식별할 수 있습니다.

  • 함수 직접 호출 지표 - 애플리케이션 코드 내의 개별 함수에 대한 간접 호출 횟수, 기간 및 오류율입니다.

  • 인시던트 스냅샷 - 요청이 지연 시간 임곗값을 초과하거나 예외가 발생할 때 트리거되는 세부 캡처로, 스택 트레이스, 직접 호출 트리, 호출자 세부 정보 및 작업 컨텍스트를 포함합니다.

  • 배포 이벤트 - 애플리케이션 시작 시 및 24시간마다 내보내지는 마커로, 코드 배포와 서비스 동작 변화의 상관관계를 나타냅니다. 애플리케이션은 배포 이벤트를 자동으로 내보냅니다. 배포 메타데이터(git 커밋, 배포 ID)를 제공하면 이러한 이벤트가 추가 컨텍스트로 보강됩니다.

서비스에 대해 CloudWatch Application Signals를 활성화하면 서비스 이벤트가 자동으로 활성화됩니다. 오류 지표 및 예외 추적은 즉시 활성화됩니다. 함수 직접 호출 지표에는 추가 구성이 필요합니다. 함수 직접 호출 데이터가 수집되기 전에 계측할 패키지를 구성해야 합니다(함수 계측 활성화 참조). OTEL_AWS_SERVICE_EVENTS_ENABLED=false를 설정하여 서비스 이벤트를 비활성화할 수 있습니다. 데이터는 ADOT SDK에서 CloudWatch 에이전트로 전달됩니다. 에이전트는 CloudWatch Logs(/aws/service-events/service-name 로그 그룹)와 CloudWatch Metrics에 이벤트를 게시합니다.

지원되는 언어: Java, Python 및 Node.js

참고

서비스 이벤트는 Lambda 환경에서 자동으로 비활성화됩니다.

데이터 스토리지

서비스 이벤트는 CloudWatch Logs에 데이터를 저장합니다. CloudWatch는 /aws/application-signals/service-name 접두사가 붙은 로그 그룹에 서비스 이벤트 데이터를 게시합니다. 여기서 service-nameOTEL_SERVICE_NAME 환경 변수의 값입니다. 서비스별로 하나의 로그 그룹이 생성됩니다.

로그 수집 및 스토리지 요금은 표준 CloudWatch Logs 요율에 따라 청구됩니다.

콘솔에서 오류 보기

CloudWatch 콘솔에서 Application Signals로 이동하여 서비스를 선택한 다음 오류 탭을 선택합니다. 이 탭에는 서비스의 예외 지표가 표시됩니다.

탭에 다음 내용이 표시됩니다.

  • 시간 경과에 따른 오류 추세를 보여주는 예외 수 차트. 이를 사용하여 최근에 빈도가 변경된 예외 유형을 감지합니다.

  • 각 예외 유형, 발생한 작업, 발생 횟수 및 이전 기간과 비교한 변경 사항이 나열된 표.

스택 트레이스, 예외 메시지 및 연결된 트레이스에 대한 링크를 포함한 세부 정보를 드릴다운하려면 예외를 선택합니다.

오류는 작업, 예외 유형 및 최상위 스택 프레임별로 그룹화됩니다. 각 그룹의 최신 대표만 표시됩니다.

참고

오류 데이터를 보려면 계정에 /aws/service-events/service-name 로그 그룹이 하나 이상 있어야 합니다. 로그 그룹이 없는 경우 오류 탭에 온보딩 프롬프트가 표시됩니다.

로그에서 서비스 이벤트 보기

서비스 이벤트 데이터는 CloudWatch Logs의 /aws/service-events/service-name 접두사가 붙은 로그 그룹에 저장됩니다. CloudWatch Logs Insights를 사용하여 이 데이터를 직접 쿼리하여 사용자 지정 보기를 구축하거나, 대시보드를 생성하거나, 특정 인시던트를 조사할 수 있습니다.

서비스 이벤트를 쿼리하려면 다음을 수행하세요.

  1. CloudWatch 콘솔을 열고 Logs Insights로 이동합니다.

  2. 서비스의 로그 그룹 /aws/service-events/service-name을 선택합니다.

  3. 쿼리를 입력하여 서비스 이벤트 데이터를 필터링하고 분석합니다.

CloudWatch Application Signals MCP(Model Context Protocol) 서버의 서비스 이벤트

서비스 이벤트 데이터는 CloudWatch Application Signals MCP(Model Context Protocol) 서버를 통해 액세스할 수 있으며, 이를 통해 AI 코딩 어시스턴트 및 에이전트가 서비스의 런타임 동작을 직접 쿼리할 수 있습니다.

문제 해결

  • 코드의 오류와 풀 스택 트레이스 및 영향을 받는 엔드포인트를 포함한 프로덕션 인시던트 스냅샷의 상관관계를 자동으로 파악합니다.

  • 인시던트 컨텍스트(예외 유형, 직접 호출 경로, 트레이스 ID)를 사용하여 대시보드를 수동으로 탐색할 필요 없이 대상 수정 사항을 제안합니다.

  • 배포 이벤트를 검색하여 최근 릴리스로 인해 회귀가 발생했는지 확인합니다.

성능 개선

  • 함수 수준 성능 데이터를 쿼리하여 지연 시간 문제를 조사할 때 병목 현상을 식별합니다.

  • 배포 전반의 함수 직접 호출 기간을 비교하여 성능 회귀를 정확히 파악합니다.

설정 및 사용 지침은 GitHub 웹 사이트의 Application Signals MCP server를 참조하세요.

서비스 이벤트 구성

사전 조건

서비스 이벤트를 사용하려면 다음 구성 요소의 최소 필수 버전이 있어야 합니다.

  1. ADOT SDK 업데이트 - AWS Distro for OpenTelemetry(ADOT) 계측 SDK를 사용 중인 언어(Java, Python 또는 Node.js)의 최신 버전으로 업데이트합니다.

  2. Amazon EKS 추가 기능 업데이트(해당하는 경우) - CloudWatch Observability Amazon EKS 추가 기능을 사용하여 애플리케이션을 계측하는 경우 추가 기능의 최신 버전으로 업데이트합니다.

  3. CloudWatch 에이전트 업데이트 - CloudWatch 에이전트의 버전 1.300069.0 이상으로 업데이트합니다.

Amazon EKS를 사용하는 경우 추가 기능 설정 지침은 Amazon EKS 클러스터에서 애플리케이션 활성화 섹션을 참조하세요.

기본적으로 활성화된 기능

CloudWatch Application Signals를 사용하는 경우 다음 서비스 이벤트 신호는 별도의 구성 없이 기본적으로 활성화됩니다.

  • 인시던트 스냅샷(예외 및 지연 시간 임곗값 위반 시 트리거됨)

  • 오류 지표(작업별 예외 유형당 오류 수)

  • 배포 이벤트(항상 내보냄, 배포 메타데이터를 제공하면 보강됨)

  • 함수 계측(기본적으로 활성화되지만 계측할 패키지를 구성할 때까지 지표를 생성하지 않음)

다음 기능은 옵트인이며 데이터를 생성하려면 환경 변수를 설정해야 합니다.

  • 함수 수준 지표(OTEL_AWS_SERVICE_EVENTS_PACKAGES_INCLUDE 구성 필요)

  • 사용자 지정 엔드포인트 필터링

  • 엔드포인트별 지연 시간 임곗값

일반 설정

환경 변수 기본값 설명
OTEL_AWS_SERVICE_EVENTS_ENABLED CloudWatch Application Signals 따름 서비스 이벤트 토글입니다. CloudWatch Application Signals가 활성화되면 서비스 이벤트가 자동으로 활성화됩니다. 명시적으로 비활성화하려면 false로 설정합니다.
OTEL_AWS_SERVICE_EVENTS_SAMPLING_MODE always 함수 직접 호출 데이터 샘플링 전략을 제어합니다. 값: always(모든 함수 직접 호출 레코딩), auto(SDK가 로드에 따라 결정), never(함수 직접 호출 레코딩 비활성화). 함수 계측 패키지가 구성된 경우에만 적용됩니다.

함수 계측 활성화

함수 계측은 기본적으로 활성화되지만 계측할 패키지를 구성할 때까지 지표를 생성하지 않습니다. 함수별 원격 분석 수집을 시작하려면 패키지 허용 목록을 제공합니다.

환경 변수 기본값 설명
OTEL_AWS_SERVICE_EVENTS_FUNCTION_INSTRUMENT_ENABLED true 함수 수준 계측을 활성화하거나 비활성화합니다. 완전히 비활성화하려면 false로 설정합니다.
OTEL_AWS_SERVICE_EVENTS_PACKAGES_INCLUDE 없음(지표에 필요) 계측할 패키지 접두사의 쉼표로 구분된 목록입니다. 와일드카드는 필요하지 않습니다. 예: Java는 com.myapp을 사용하고, Python은 myapp을 사용하고, Node.js는 src/myapp을 사용합니다.
OTEL_AWS_SERVICE_EVENTS_PACKAGES_EXCLUDE 없음 계측에서 제외할 하위 패키지의 쉼표로 구분된 목록입니다. 제외는 항상 포함보다 우선합니다. 예를 들어, com.myapp을 포함하고 com.myapp.models를 제외하면 애플리케이션 코드를 계측하되 데이터 모델 클래스는 건너뛸 수 있습니다.

엔드포인트 필터링

엔드포인트 필터링은 엔드포인트 오류 지표와 인시던트 스냅샷을 생성하는 엔드포인트를 제어합니다. 이러한 설정은 함수 계측에 영향을 주지 않습니다.

환경 변수 기본값 설명
OTEL_AWS_SERVICE_EVENTS_ENDPOINT_INCLUDE_PATTERNS 모든 엔드포인트 포함할 엔드포인트의 쉼표로 구분된 glob 패턴입니다. METHOD /route와 비교합니다.
OTEL_AWS_SERVICE_EVENTS_ENDPOINT_EXCLUDE_PATTERNS 없음 제외할 엔드포인트의 쉼표로 구분된 glob 패턴입니다. 엔드포인트가 둘 다와 일치하는 경우 제외가 우선합니다.

지연 시간 임곗값

다음 환경 변수를 사용하여 인시던트 스냅샷 트리거의 지연 시간 임곗값을 구성합니다.

환경 변수 기본값 설명
OTEL_AWS_SERVICE_EVENTS_INCIDENT_SNAPSHOT_DURATION_THRESHOLD_MS 5000 밀리초 단위의 전역 지연 시간 임곗값입니다. 이 기간을 초과하는 요청은 인시던트 스냅샷을 트리거합니다.
OTEL_AWS_SERVICE_EVENTS_LATENCY_THRESHOLDS 없음 전역 기본값을 재정의하는 엔드포인트별 지연 시간 임곗값입니다. 형식: METHOD /route:ms(예: GET /health:200,POST /checkout:8000)

속도 제한

다음 환경 변수를 사용하여 서비스 이벤트 데이터가 수집되고 보고되는 속도를 제어합니다.

환경 변수 기본값 설명
OTEL_AWS_SERVICE_EVENTS_INCIDENT_SNAPSHOT_MAX_PER_MINUTE 100 분당 캡처된 인시던트 스냅샷의 최대 수입니다.
OTEL_AWS_SERVICE_EVENTS_INCIDENT_SNAPSHOT_MAX_SAME_ERROR 1 캡처 기간당 동일한 오류에 대한 최대 스냅샷 수입니다.

배포 이벤트 구성

배포 이벤트는 항상 애플리케이션 시작 시와 24시간마다 내보내집니다. 배포 메타데이터를 제공하면 이러한 이벤트가 보강되므로 인시던트 및 성능 변경 사항과 특정 코드 배포의 상관관계를 파악할 수 있습니다.

애플리케이션 컨테이너 또는 프로세스에서 다음 환경 변수를 설정하여 배포 메타데이터를 제공합니다.

환경 변수 설명
OTEL_AWS_SERVICE_EVENTS_GIT_COMMIT_SHA 배포된 코드의 Git 커밋 SHA입니다.
OTEL_AWS_SERVICE_EVENTS_GIT_REPO_URL Git 리포지토리의 URL입니다.
OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_ID 배포의 고유 식별자(예: CI/CD 파이프라인 실행 ID).
OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_TIMESTAMP 배포의 ISO 8601 타임스탬프입니다.
OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_URL 배포 빌드 또는 파이프라인 실행의 URL입니다.

GitHub Actions를 사용하여 배포 이벤트 구성

GitHub Actions 워크플로에서 기본 제공 환경 변수를 사용하여 배포 메타데이터를 채웁니다. 배포 단계 또는 컨테이너 환경에 다음을 추가합니다.

env: OTEL_AWS_SERVICE_EVENTS_GIT_COMMIT_SHA: ${{ github.sha }} OTEL_AWS_SERVICE_EVENTS_GIT_REPO_URL: ${{ github.server_url }}/${{ github.repository }} OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_ID: ${{ github.run_id }} OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_TIMESTAMP: $(date -u +%Y-%m-%dT%H:%M:%SZ) OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}

컨테이너 이미지를 배포하는 경우 이러한 값을 태스크 정의 또는 포드 사양에 환경 변수로 전달합니다. 빌드 시 값을 이미지에 베이크하거나 배포 구성을 통해 배포 시 값을 주입할 수 있습니다.

GitLab CI/CD를 사용하여 배포 이벤트 구성

GitLab CI/CD 파이프라인에서 사전 정의된 CI/CD 변수를 사용하여 배포 메타데이터를 채웁니다. 배포 작업에 다음을 추가합니다.

deploy: variables: OTEL_AWS_SERVICE_EVENTS_GIT_COMMIT_SHA: $CI_COMMIT_SHA OTEL_AWS_SERVICE_EVENTS_GIT_REPO_URL: $CI_PROJECT_URL OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_ID: $CI_PIPELINE_ID OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_TIMESTAMP: $(date -u +%Y-%m-%dT%H:%M:%SZ) OTEL_AWS_SERVICE_EVENTS_DEPLOYMENT_URL: $CI_PIPELINE_URL

컨테이너 오케스트레이션 플랫폼을 통해 배포 시 이러한 변수를 애플리케이션 컨테이너에 전달합니다(예: Amazon ECS 태스크 정의 또는 Kubernetes 배포 매니페스트의 환경 변수로).