레이어 없이 Lambda 함수를 사용하는 경우 선택한 런타임에 따라 리소스를 추가해야 합니다. 아래에서 런타임을 선택하고 설정 지침을 따르세요.
Go 언어 Lambda를 계측하려면:
Go 에이전트 패키지를 다운로드하고 함수와 동일한 디렉터리에 배치합니다.
다음을 실행하여 에이전트를 설치합니다.
bash$go get -u github.com/newrelic/go-agent/v3/newrelic다음을 실행하여
nrlambda
통합을 설치합니다.bash$go get -u github.com/newrelic/go-agent/v3/integrations/nrlambda
Lambda 코드에서 구성 요소를 가져오고 애플리케이션을 생성하고 Lambda를 시작하는 방법을 업데이트합니다. 계측 예를 참조하십시오.
선택적으로
RecordCustomEvent
API 를 사용하여 Lambda 호출과 연결할 사용자 지정 이벤트 를 추가합니다. 예를 들어:func handler(ctx context.Context) {if txn := newrelic.FromContext(ctx); nil != txn {txn.Application().RecordCustomEvent("MyEvent", map[string]interface{}{"zip": "zap",})}fmt.Println("hello world!")}Lambda 함수를 빌드 및 압축하여 AWS에 업로드합니다.
다음은 Lambda를 압축하고 업로드하기 위한 제안 사항입니다.
Linux에서 실행할 바이너리를 빌드합니다. 그러면
main
이라는 바이너리 파일이 생성됩니다. 당신이 사용할 수있는:bash$GOOS=linux go build -o main다음을 사용하여 바이너리를 배포 패키지에 압축합니다.
bash$zip deployment.zip mainAWS Lambda 콘솔 또는 AWS CLI를 사용하여 zip 파일을 AWS에 업로드합니다. 핸들러의 이름을
main
로 지정합니다(바이너리 빌드 중에 지정된 이름과 일치하도록).
다음 환경 변수는 Lambda 모니터링이 작동하는 데 필요하지 않지만 Lambda 함수를 분산 추적에 포함하려는 경우에는 필요합니다. 분산 추적 을 활성화하려면 AWS 콘솔에서 다음 환경 변수 를 설정하십시오.
선택적으로 로깅을 구성하려면 Go 에이전트 로깅 을 참조하십시오.
Lambda를 한 번 이상 호출합니다. 그러면 다음 단계가 작동하기 위해 있어야 하는 CloudWatch 로그 그룹이 생성됩니다.
래퍼는 Lambda 실행에 대한 데이터를 수집하고 JSON 메시지를 생성하여 CloudWatch Logs에 기록합니다. 그런 다음 해당 로그를 New Relic 으로 보내도록 CloudWatch를 구성합니다 .
Java의 AWS Lambda 모니터링은 APM Java 에이전트 를 사용하지 않습니다. 대신 다음 두 가지 OpenTracing 종속성을 사용합니다.
AWS Lambda OpenTracing Java SDK: AWS Lambda RequestHandler 및 RequestStreamHandler용 OpenTracing 계측.
AWS Lambda OpenTracing Tracer: AWS Lambda를 모니터링하도록 설계된 OpenTracing Tracer 구현입니다. 범위, 오류 이벤트, 트랜잭션 이벤트, 오류 추적을 생성하고 분산 추적 지원을 제공합니다.
팁
Supported OpenTracing Versions
OpenTracing 0.31.0:
OpenTracing 0.32.0, 0.33.0:
- Lambda 트레이서: com.newrelic.opentracing:newrelic-java-lambda:2.2.3
- Lambda SDK: com.newrelic.opentracing:java-AWS Lambda:2.1.1
Java Lambda를 계측하려면:
프로젝트의
build.gradle
파일에 OpenTracing AWS Lambda 트레이서 및 AWS Lambda OpenTracing SDK 의존성/종속성을 포함합니다.dependencies {compile("com.newrelic.opentracing:java-aws-lambda:2.1.1")compile("com.newrelic.opentracing:newrelic-java-lambda:2.2.3")compile("io.opentracing:opentracing-util:0.33.0")}Java Lambda 예시 와 같이 AWS Lambda
RequestHandler
인터페이스를 구현하고doHandleRequest
메서드를 재정의합니다.doHandleRequest
메서드에서LambdaTracing.instrument(...)
API를 호출하여 람다 함수의 실행을 추적할 루트 범위를 만듭니다. 여기에서 람다 함수에 대한 비즈니스 논리를 정의할 수도 있습니다.Java Lambda 예시 와 같이
LambdaTracer.INSTANCE
을 OpenTracing Global tracer로 등록합니다.ZIP 배포 패키지를 생성하고 AWS Lambda에 업로드합니다. 또는 다른 수단을 통해 배포합니다.
AWS Lambda 콘솔에서 핸들러를 설정합니다. 예제 Java Lambda 의 경우 핸들러는
com.handler.example.MyLambdaHandler::handleRequest
입니다.handleRequest
이 가정되기 때문에com.handler.example.MyLambdaHandler
를 사용할 수도 있습니다.Lambda 함수를 분산 추적 에 포함하려면 다음 AWS 콘솔 환경 변수 가 필요합니다. 이것은 권장됩니다.
선택 사항: Lambda 콘솔에서 다음 환경 변수를 추가하여 디버그 로깅을 활성화합니다.
NEW_RELIC_DEBUG
istrue
.Lambda를 한 번 이상 호출합니다. 그러면 다음 단계가 작동하기 위해 있어야 하는 CloudWatch 로그 그룹이 생성됩니다.
래퍼는 Lambda 실행에 대한 데이터를 수집하고 JSON 메시지를 생성하여 CloudWatch Logs에 기록합니다. 그런 다음 해당 로그를 New Relic 으로 보내도록 CloudWatch를 구성합니다 .
다음과 같은 일반적인 사용 사례를 보여주는 전체 프로젝트는 AWS Lambda 분산 추적 예제 를 참조하십시오.
- Lambda 함수 간의 분산 추적
- 수동 스팬 생성(커스텀 계측이라고도 함)
- 외부 통화 추적
- 스팬에 사용자 정의 속성(태그라고도 함) 추가
Node.js Lambda를 계측하려면:
Node.js 에이전트 패키지를 다운로드하고 함수와 동일한 디렉터리에 배치하여 에이전트가
node_modules
디렉터리에 종속 항목으로 설치되었는지 확인합니다. 노드 패키지 관리자를 사용합니다.bash$npm install newrelic --saveLambda 코드에서 파일 맨 위에 에이전트 모듈을 요구하고 핸들러 함수를 newrelic
setLambdaHandler
으로 래핑합니다. 예를 들어:- CommonJS에 대한 샘플 코드:
const newrelic = require('newrelic');// Other module loads go under the require statement abovemodule.exports.handler = newrelic.setLambdaHandler((event, context, callback) => {// This is your handler function codeconsole.log('Lambda executed');callback();});- ES 모듈의 샘플 코드:
import newrelic from 'newrelic';// Other module loads go under the require statement aboveexport const handler = newrelic.setLambdaHandler((event, context, callback) => {// This is your handler function codeconsole.log('Lambda executed');callback();});선택 사항:
recordCustomEvent
API 를 사용하여 Lambda에 사용자 지정 이벤트 를 추가할 수도 있습니다. 예를 들어:- CommonJS의 샘플 코드:
module.exports.handler = newrelic.setLambdaHandler((event, context, callback) => {newrelic.recordCustomEvent('MyEventType', { foo: 'bar' });console.log('Lambda executed');callback();});- ES 모듈의 샘플 코드:
export const lambdaHandler = newrelic.setLambdaHandler((event, context, callback) => {newrelic.recordCustomEvent('MyEventType', { foo: 'bar' });console.log('Lambda executed');callback();});Lambda 함수와 Node.js 에이전트 폴더를 함께 압축합니다. 요구 사항 및 권장 사항:
- New Relic 에이전트 폴더 외부에 있는 New Relic 파일은 포함할 필요가 없습니다.
- 예를 들어 Lambda 함수 파일 이름이
lambda_function.node
인 경우 zip 파일의 이름을lambda_function.zip
로 지정하는 것이 좋습니다. 타르볼을 사용하지 마십시오. - Lambda 및 관련 모듈은 모두 zip 파일의 루트 디렉터리에 있어야 합니다. 즉, 파일이 포함된 폴더를 압축하면 작동하지 않습니다.
압축된 파일을 AWS Lambda 계정에 업로드합니다.
AWS 콘솔에서 다음 환경 변수 를 설정합니다.
선택 사항: 로컬 환경에서 AWS 외부의 서버리스 모드로 에이전트를 실행하려면 환경 변수
NEW_RELIC_SERVERLESS_MODE_ENABLED
true
로 설정합니다. (AWS Lambda 환경에서 이를 실행하면 에이전트는 자동으로 서버리스 모드에서 실행됩니다. AWS에서 실행 중인 경우 이 변수를 사용하지 마십시오.)선택 사항: 서버리스 모드에서 로깅을 활성화하려면 다음 환경 변수를 설정합니다.
NEW_RELIC_LOG_ENABLED
을true
로 설정합니다.- CloudWatch로 출력하려면
NEW_RELIC_LOG
를stdout
로 설정하거나 쓰기 가능한 파일 위치로 설정합니다. NEW_RELIC_LOG_LEVEL
기본적으로info
으로 설정되어 있으며 Lambda에서 함수 로그를 보낼 때만 사용됩니다. 다른 로그레벨을 확인하세요.
선택 사항: Lambda 함수가 ES 모듈을 사용하는 경우 환경 변수
NEW_RELIC_USE_ESM
를true
로 설정합니다. ES 모듈을 사용하는 경우 함수에 대해 async/await 또는 약속을 사용해야 합니다. 콜백 기반 함수는 지원되지 않습니다.HTML을 완료하려면 다음 단계 중 하나를 수행하여 스프레드시트 데이터를 뉴렐릭으로 보내세요.
- 뉴렐릭 Lambda
Extension layer
를 사용하세요. 최신 (NewRelicLambdaExtension) 레이어 arn을 가져올 수 있습니다. AWS CLI를 사용하여 계층을 설치하거나 Lambda에 수동으로 추가할 수 있습니다.
bash$aws lambda update-function-configuration --function-name <your-lambda-function-name> --layers arn:aws:lambda:<aws-region>:451483290750:layer:NewRelicLambdaExtension:<version>- 뉴렐릭 Lambda
newrelic-log-ingestion
을 사용하세요. 자세한 단계는 CloudWatch 폴백을 참조하세요.
Python Lambda를 계측하려면:
Python 에이전트와 Python 람다 래퍼 패키지를 모두 다운로드하고 함수 코드와 동일한 디렉터리에 배치합니다. 이렇게 하려면 pip를 사용하세요.
bash$pip install -t . newrelic newrelic-lambda중요
Homebrew를 사용하는 경우 다음 오류가 발생할 수 있습니다.
DistutilsOptionError: must supply either home or prefix/exec-prefix -- not both
. 자세한 내용은 Homebrew GitHub 게시물 을 참조하십시오.Lambda 코드에서 Python 에이전트 모듈과 Python 람다 래퍼 모듈을 모두 가져옵니다.
뉴렐릭 데코레이터를 사용하여 핸들러 함수를 장식합니다. 뉴렐릭 패키지를 코드에서 먼저 가져와야 합니다. 예는 다음과 같습니다.
import newrelic.agentfrom newrelic_lambda.lambda_handler import lambda_handlernewrelic.agent.initialize()@lambda_handler()def handler(event, context):...선택 사항:
record_custom_event
API 를 사용하여 Lambda에 사용자 지정 이벤트 를 추가할 수도 있습니다. 다음은 예입니다.@lambda_handler()def handler(event, context):newrelic.agent.record_custom_event('CustomEvent', {'foo': 'bar'})...다음 가이드라인을 사용하여
lambda_function.py
및newrelic/
폴더를 함께 압축합니다.newrelic/
폴더 외부에 있는 New Relic 파일은 포함할 필요가 없습니다.- 예를 들어 Lambda 함수 파일 이름이
lambda_function.py
인 경우 zip 파일의 이름을lambda_function.zip
로 지정합니다. 타르볼을 사용하지 마십시오. - Lambda 및 관련 모듈은 모두 zip 파일의 루트 디렉터리에 있어야 합니다. 즉, 파일이 포함된 폴더를 압축하면 작동하지 않습니다.
압축된 파일을 AWS Lambda 계정에 업로드합니다.
AWS 콘솔에서 다음 환경 변수 를 설정합니다.
NEW_RELIC_SERVERLESS_MODE_ENABLED
. 로 설정true
다음 환경 변수는 Lambda 모니터링이 작동하는 데 필요하지 않지만 Lambda 함수를 분산 추적에 포함하려는 경우에는 필요합니다. 분산 추적 을 활성화하려면 AWS 콘솔에서 다음 환경 변수 를 설정하십시오.
선택 사항: 로깅을 구성하려면 AWS 콘솔에서
NEW_RELIC_LOG
및NEW_RELIC_LOG_LEVEL
환경 변수 를 사용합니다.Lambda를 한 번 이상 호출합니다. 그러면 다음 단계가 작동하기 위해 있어야 하는 CloudWatch 로그 그룹이 생성됩니다.
New Relic 데코레이터는 Lambda 실행에 대한 데이터를 수집하고 JSON 메시지를 생성하여 CloudWatch Logs에 기록합니다. 그런 다음 해당 로그를 New Relic 으로 보내도록 CloudWatch를 구성합니다 .
뉴렐릭에는 레이어 없는 루비 리소스 메서드가 없습니다. 레이어를 사용하는 경우 비컨테이너화된 Lambda 함수 작성 문서를 참조하세요.
대부분의 경우 .NET 에이전트는 자동으로 AWS Lambda 함수를 로그하고 "서버리스 모드"로 전환하여 뉴렐릭 및 기타 기능으로 직접 데이터 전송을 비활성화합니다. 뉴렐릭으로 데이터를 보내려면 뉴렐릭 Lambda 확장 또는 newrelic-log-ingestion
람다 메서드를 사용해야 합니다.
.NET Lambda를 리뷰하려면:
- 프로젝트에 NewRelic.에이전트 nuget 패키지를 AWS Lambda 추가합니다. 자세한 내용은 설치 가이드를 참조하세요.
- 프로젝트에 필요한 환경 변수를 추가합니다. 에이전트가 뉴렐릭에 직접 연락하거나 데이터를 보내려고 시도하지 않으므로
NEW_RELIC_LICENSE_KEY
는 필요하지 않습니다. - 선택적 환경 변수를 설정합니다.
NEW_RELIC_APP_NAME
- 프로젝트를 AWS Lambda 계정에 게시합니다.
- 뉴렐릭 Lambda 확장 또는
newrelic-log-ingestion
람다를 구성합니다 . - 선택사항: 로깅을 구성하려면 AWS 콘솔에서
NEWRELIC_LOG_CONSOLE
및NEWRELIC_LOG_LEVEL
환경 변수를 사용합니다. - Lambda를 한 번 이상 호출하여 오류를 확인하고 뉴렐릭 UI 에 데이터가 표시되는지 확인하세요.