Datadog은 짧은 대기 시간, 몇 초 단위의 세분화, 콜드 스타트 및 맞춤 태그에 대한 자세한 메타데이터를 통해 Lambda 런타임에서 향상된 Lambda 메트릭을 즉시 생성합니다.
향상된 Lambda 메트릭은 AWS Lambda 통합에서 활성화된 기본 Lambda 메트릭에 추가됩니다. 이러한 메트릭은 aws.lambda.enhanced.* 네임스페이스에 있다는 점에서 구별됩니다. 향상된 Lambda 메트릭 기본 대시보드에서 해당 메트릭을 확인할 수있습니다.
다음과 같이 실시간으로 향상된 Lambda 메트릭을 사용할 수 있으며 aws_account, region, functionname, cold_start, memorysize, executedversion, resource, runtime로 태그가 지정됩니다.
해당 메트릭은 분포이며 count, min, max, sum, avg 집계를 사용하여 쿼리할 수 있습니다.
aws.lambda.enhanced.invocations
이벤트 또는 API 호출에 응답하여 함수가 호출된 횟수를 측정합니다.
aws.lambda.enhanced.errors
함수의 오류로 인해 실패한 호출 수를 측정합니다.
aws.lambda.enhanced.max_memory_used
함수에서 사용하는 최대 메모리 양(mb)을 측정합니다.
aws.lambda.enhanced.duration
함수 코드가 호출의 결과로 실행을 시작한 후 실행을 중지하기까지의 경과 초 수를 측정합니다.
aws.lambda.enhanced.billed_duration
청구 대상 함수가 실행된 시간을 측정합니다(100밀리초 단위).
aws.lambda.enhanced.init_duration
콜드 스타트 중 함수의 초기화 시간(초)을 측정합니다.
aws.lambda.enhanced.runtime_duration
함수 코드가 실행을 시작한 시점부터 클라이언트에 응답을 반환할 때까지 경과한 밀리초를 측정하며, Lambda 확장 실행에 의해 추가된 런타임 후 기간은 제외합니다.
aws.lambda.enhanced.post_runtime_duration
함수 코드가 클라이언트에 응답을 반환한 시점부터 함수 실행이 중지될 때까지 경과된 밀리초를 측정하며, Lambda 확장 실행으로 인해 추가된 기간을 나타냅니다.
aws.lambda.enhanced.response_latency
호출 요청이 수신된 시점부터 클라이언트에 첫 번째 바이트의 응답이 전송될 때까지 경과된 시간(밀리초)을 측정합니다.
aws.lambda.enhanced.response_duration
클라이언트에 첫 번째 응답 바이트가 전송된 시점부터 마지막 응답 바이트까지 경과된 시간(밀리초)을 측정합니다.
Lambda 함수가 이미 트레이스 또는 로그 데이터를 Datadog에 전송하고 있고, 쿼리하려는 데이터가 기존 로그 또는 트레이스에 캡처되어 있는 경우, 애플리케이션 코드를 다시 배포하거나 변경하지 않고도 로그 및 트레이스에서 커스텀 메트릭을 생성할 수 있습니다.
로그 기반 메트릭을 사용하면 쿼리와 일치하는 로그의 수를 기록하거나 요청 기간과 같이 로그에 포함된 숫자 값을 요약할 수 있습니다. 로그 기반 메트릭은 전체 수집 스트림에서 로그 데이터를 요약하는 비용 효율적인 방법입니다. 로그 기반 메트릭 만들기에 대해 자세히 알아보세요.
보존 필터로 인덱싱되었는지 여부에 관계없이 수집된 모든 스팬에서 메트릭을 생성할 수도 있습니다. 스팬 기반 메트릭 만들기에 대해 자세히 알아보세요.
fromdatadog_lambda.metricimportlambda_metricdeflambda_handler(event,context):lambda_metric("coffee_house.order_value",# 메트릭 이름12.45,# 메트릭 값tags=['product:latte','order:online']# 연결된 태그)
const{sendDistributionMetric}=require('datadog-lambda-js');asyncfunctionmyHandler(event,context){sendDistributionMetric('coffee_house.order_value',// 메트릭 이름
12.45,// 메트릭 값
'product:latte',// 첫 번째 태그
'order:online'// 두 번째 태그
);}
packagemainimport("github.com/aws/aws-lambda-go/lambda""github.com/DataDog/datadog-lambda-go")funcmain(){lambda.Start(ddlambda.WrapFunction(myHandler,nil))}funcmyHandler(ctxcontext.Context,eventMyEvent)(string,error){ddlambda.Distribution("coffee_house.order_value",// 메트릭 이름
12.45,// 메트릭 값
"product:latte","order:online"// 연결된 태그
)}
usingSystem.IO;// statsd 클라이언트 가져오기usingStatsdClient;namespaceExample{publicclassFunction{staticFunction(){// statsd 클라이언트의 인스턴스 만들기vardogstatsdConfig=newStatsdConfig{StatsdServerName="127.0.0.1",StatsdPort=8125,};if(!DogStatsd.Configure(dogstatsdConfig))thrownewInvalidOperationException("Cannot initialize DogstatsD. Set optionalExceptionHandler argument in the `Configure` method for more information.");}publicStreamMyHandler(Streamstream){// 분포 메트릭 제출DogStatsd.Distribution("my.custom.dotnet.metric",1,tags:new[]{"tag:value"});// 함수 로직}}}
fromdatadog_lambda.metricimportlambda_metricdeflambda_handler(event,context):lambda_metric("coffee_house.order_value",# 메트릭 이름12.45,# 메트릭 값tags=['product:latte','order:online']# 연결된 태그)# 최근 20분 이내의 타임스탬프가 있는 메트릭을 제출하세요.lambda_metric("coffee_house.order_value",# 메트릭 이름12.45,# 메트릭 값timestamp=int(time.time()),# Unix 에포크 (초)tags=['product:latte','order:online']# 연결된 태그)
const{sendDistributionMetric}=require('datadog-lambda-js');asyncfunctionmyHandler(event,context){sendDistributionMetric('coffee_house.order_value',// 메트릭 이름
12.45,// 메트릭 값
'product:latte',// 첫 번째 태그
'order:online'// 두 번째 태그
);// 최근 20분 이내의 타임스탬프가 있는 메트릭을 제출하세요.
sendDistributionMetricWithDate('coffee_house.order_value',// 메트릭 이름
12.45,// 메트릭 값
newDate(Date.now()),// 날짜
'product:latte',// 첫 번째 태그
'order:online',// 두 번째 태그
);}
packagemainimport("github.com/aws/aws-lambda-go/lambda""github.com/DataDog/datadog-lambda-go")funcmain(){lambda.Start(ddlambda.WrapFunction(myHandler,nil))}funcmyHandler(ctxcontext.Context,eventMyEvent)(string,error){ddlambda.Distribution("coffee_house.order_value",// 메트릭 이름
12.45,// 메트릭 값
"product:latte","order:online"// 연결된 태그
)// 최근 20분 이내의 타임스탬프가 있는 메트릭을 제출하세요.
ddlambda.MetricWithTimestamp("coffee_house.order_value",// 메트릭 이름
12.45,// 메트릭 값
time.Now(),// 타임스탬프
"product:latte","order:online"// 연결된 태그
)}
require'datadog/lambda'defhandler(event:,context:)# 함수 핸들러만 래핑하면 됩니다 (헬퍼 함수 제외).Datadog::Lambda.wrap(event,context)doDatadog::Lambda.metric('coffee_house.order_value',# 메트릭 이름12.45,# 메트릭 값"product":"latte","order":"online"# 연결된 태그)# 최근 20분 이내의 타임스탬프가 있는 메트릭을 제출하세요.Datadog::Lambda.metric('coffee_house.order_value',# 메트릭 이름12.45,# 메트릭 값time:Time.now.utc,# 타임스탬프"product":"latte","order":"online"# 연결된 태그)endend
publicclassHandlerimplementsRequestHandler<APIGatewayV2ProxyRequestEvent,APIGatewayV2ProxyResponseEvent>{publicIntegerhandleRequest(APIGatewayV2ProxyRequestEventrequest,Contextcontext){DDLambdadd=newDDLambda(request,lambda);Map<String,String>myTags=newHashMap<String,String>();myTags.put("product","latte");myTags.put("order","online");dd.metric("coffee_house.order_value",// 메트릭 이름12.45,// 메트릭 값myTags);// 연결된 태그}}
동일한 메트릭 및 동일한 태그 세트(예: 대형 for-루프 내부)에 관한 데이터 포인트를 많이 제출할 목적으로 포워더(Forwarder)를 사용하면 Lambda 성능 및 클라우드와치(CloudWatch) 비용에 영향을 미칠 수 있습니다.
애플리케이션에서 데이터 포인트를 집계하여 오버헤드를 피할 수 있습니다.
예를 들어, 파이썬(Python)에서는 다음과 같습니다.
deflambda_handler(event,context):#event['Records']에 많은 레코드가 포함된 경우 비효율적임forrecordinevent['Records']:lambda_metric("record_count",1)#개선된 구현record_count=0forrecordinevent['Records']:record_count+=1lambda_metric("record_count",record_count)
Datadog이 동일한 타임스탬프 및 태그 세트를 공유하는 여러 카운트 또는 게이지 메트릭 포인트를 수신하는 경우, 가장 최근의 것만 계산됩니다. 이는 메트릭 포인트가 Datadog Agent에 의해 집계되고 고유한 host 태그로 태그가 지정되므로 호스트 기반 애플리케이션에서 작동합니다.
트래픽이 증가하면 Lambda 함수가 여러 개의 동시 실행 환경을 시작할 수 있습니다. 이 함수는 서로를 덮어쓰는 카운트 또는 게이지 메트릭 포인트를 제출하여 과소 계산된 결과를 초래할 수 있습니다. 이 문제를 피하기 위해, 분포 메트릭 포인트가 Datadog 백엔드에서 집계되고 모든 메트릭 포인트가 카운트되기 때문에 Lambda 함수가 생성한 커스텀 메트릭은 분포로 제출됩니다.
분포는 기본적으로 avg, sum, max, min, count 집계를 제공합니다. 메트릭 요약 페이지에서 백분위수 집계(p50, p75, p90, p95, p99)와 태그 관리를 활성화할 수 있습니다. 게이지 메트릭 유형에 대한 분포를 모니터링하려면 시간 및 공간 집계 모두에 avg를 사용합니다. 카운트 메트릭 유형에 대한 분포를 모니터링하려면 시간 및 공간 집계 모두에 sum을 사용합니다. 시간 및 공간 집계가 작동하는 방식을 확인하려면 그래프에 쿼리하기 지침을 참조하세요.