Datadog은 성능 문제와 오류를 해결할 수 있는 해결 방법을 자동으로 제안하고 서버리스 애플리케이션 비용을 최적화합니다.

서버리스용 Watchdog이 제공하는 인사이트 외에도 Datadog 서버리스 모니터링이 함수와 관련한 여러 문제를 감지하고 경고를 보냅니다.

설정

Datadog은 AWS CloudWatch 메트릭, Datadog의 향상된 AWS Lambda 메트릭, Lambda REPORT 로그 라인을 사용해 경고를 제안합니다. 이를 설정하려면,

  1. Amazon Web Services 통합을 설정하세요.
  2. Datadog 포워더를 설정해 Lambda REPORT 로그가 Datadog에 인덱싱되었는지 확인합니다.
  3. 함수에 향상된 Lambda 메트릭을 활성화합니다.

참고: Datadog에서 AWS 통합을 설정하면 기본적으로 높은 오류 발생률, 높은 지속 시간, 스로틀, 높은 반복기 나이 경고를 생성합니다. 개별 호출에서 생성되는 경고 등 다른 경고를 사용하려면 Datadog 포워더향상된 Lambda 메트릭이 있어야 합니다.

경고 생성

오류

선택한 시간 범위에서 함수 호출의 1% 이상에 오류가 있습니다.

해결 방법: 함수의 로그를 살펴보고 배포 추적을 통해 최근 코드나 설정에 변화가 있었는지 확인하거나 분산 추적을 이용해 마이크로서비스에 실패한 기록이 있는지 찾아봅니다.

높은 오류 발생률

선택한 시간 범위에서 함수 호출의 10% 이상에 오류가 있습니다.

해결 방법: 함수의 로그를 살펴보고 배포 추적을 통해 최근 코드나 설정에 변화가 있었는지 확인하거나 분산 추적을 이용해 마이크로서비스에 실패한 기록이 있는지 찾아봅니다.

높은 메모리 사용량

선택한 시간 범위에서 적어도 하나의 호출이 할당된 메모리의 95% 이상을 사용했습니다.

분산 추적을 사용해 메모리 한도가 낮은 Lambda 함수와 메모리를 과다하게 사용하는 애플리케이션 일부를 찾을 수 있습니다.

**해결 방법: 설정된 최대 메모리에 가까운 메모리를 사용하는 Lambda 함수는 Lambda 런타임에 의해 종료될 위험이 있으며, 이로 인해 사용자에게 오류가 발생할 수 있습니다. 함수에 설정된 메모리를 증량하는 것을 고려해 보세요. 이는 AWS 청구서에 영향을 줄 수 있으니 참고하세요.

높은 지속 기간

선택한 시간 범위에서 적어도 하나의 호출이 설정된 시간 제한의 95%를 초과했습니다.

분산 추적을 이용해 애플리케이션에서 느린 API 호출을 찾을 수 있습니다.

**해결 방법: ** 설정된 시간 제한에 가까워질 때까지 실행되는 Lambda 함수는 Lambda 런타임에 의해 종료될 수 있고, 이 때문에 요청에 대한 응답이 느려지거나 실패할 수 있습니다. 함수에 더 많은 실행 시간이 필요하다면 설정된 제한시간을 늘리는 것을 고려하세요. 이는 AWS 청구서에 영향을 미칠 수 있습니다.

콜드 스타트

선택한 시간 범위에서 함수 호출의 1% 이상에 콜드 스타트가 있습니다.

Datadog의 향상된 메트릭분산 추적을 이용하면 콜드 스타트가 애플리케이션에 미치는 영향을 알 수 있습니다.

해결 방법: 콜드 스타트는 서버리스 애플리케이션에 트래픽이 급증할 때 발생합니다. 함수가 이전에 비활성 상태였거나 수신 요청 수가 비교적 일정했던 경우에도 발생할 수 있습니다. 사용자는 응답 시간이 느려지거나 지연 시간이 발생하는 것으로 콜드 스타트를 경험합니다. 콜드 스타트를 방지하려면 관련 Lambda 함수에 프로비저닝된 동시성을 활성화하는 것을 고려해 보세요. 이는 AWS 청구서에 영향을 줄 수 있으니 참고하세요.

메모리 부족

선택한 시간 범위에서 하나 이상의 호출에 메모리가 부족합니다.

해결 방법: 할당된 양보다 메모리를 더 많이 사용하는 Lambda 함수의 경우 Lambda 런타임에 의해 강제 종료될 수 있습니다. 이 경우 사용자는 애플리케이션 요청 실패를 경험합니다. 분산 추적을 이용하면 메모리를 초과해서 사용하는 애플리케이션 일부를 찾을 수 있습니다. Lambda 함수의 메모리 할당량을 늘리는 것을 고려해 보세요.

시간 초과

선택한 시간 범위에서 하나 이상의 호출이 시간 초과되었습니다. 이는 함수가 설정된 시간 초과 또는 전역 Lambda 시간 초과보다 오래 실행될 때 발생합니다.

해결 방법: 분산 추적을 사용해 API나 다른 마이크로서비스에 대해 속도가 느린 요청을 찾을 수 있습니다. 함수 시간 초과를 늘리는 것을 고려해 볼 수도 있습니다. 이는 AWS 청구서에 영향을 줄 수 있으니 참고하세요.

스로틀

선택한 시간 범위에서 10% 이상의 호출이 스로틀링되었습니다. 스로틀링은 서버리스 Lambda 애플리케이션이 적절한 동시성 없이 높은 수준의 트래픽을 수신할 때 발생합니다.

해결 방법: Lambda 동시성 메트릭을 확인해 aws.lambda.concurrent_executions.maximum이 AWS 계정 동시성 수준에 근접하는지 살펴보세요. 근접한다면 예약된 동시성을 설정하는 것을 고려해 보거나 AWS에서 서비스 할당 증가를 요청하세요. 이는 AWS 청구서에 영향을 줄 수 있으니 참고하세요.

높은 반복기 나이

함수의 반복기가 2시간보다 오래되었습니다. 반복기 나이는 스트림에서 처리된 각 레코드 배치에 대한 마지막 레코드의 나이로 계산됩니다. 이 값이 증가하면 함수가 데이터를 충분히 빠르게 처리할 수 없다는 의미입니다.

해결 방법: 분산 추적을 활성화해 함수에 스트림되는 데이터 양이 증가한 이유를 분석하세요. 함수가 읽는 스트림의 샤드 수와 배치 크기를 늘리는 것도 고려해 볼 수 있습니다.

초과 프로비저닝

선택한 시간대에서 할당된 메모리의 10% 이상을 사용하는 호출이 없습니다. 이는 함수에 필요한 양보다 더 많은 메모리가 할당되어 청구되고 있다는 뜻입니다.

해결 방법: Lambda 함수에 할당된 메모리를 줄이는 것을 고려해 보세요. 이는 AWS 청구 금액에 영향을 줄 수 있으니 참고하세요.

참고 자료

PREVIEWING: may/unit-testing