이 페이지에서는 람다 함수를 수동으로 계측하는 방법을 알아봅니다. 런타임 언어별로 정리되어 있습니다. 아직 하지 않았다면 아래에서 무료 New Relic 계정을 만들어 오늘 데이터 모니터링을 시작하십시오.
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 코드에서 파일 상단에 에이전트 모듈을 요구하고 핸들러 함수를 래핑합니다. 예를 들어:
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();});선택 사항:
recordCustomEvent
API 를 사용하여 Lambda에 사용자 지정 이벤트 를 추가할 수도 있습니다. 예를 들어:module.exports.handler = 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 환경에서 이를 실행하면 에이전트는 자동으로 서버리스 모드에서 실행됩니다. Do not use this variable if you're running in 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 또는 약속을 사용해야 합니다. 콜백 기반 함수는 지원되지 않습니다.Lambda를 한 번 이상 호출합니다. 그러면 다음 단계가 작동하기 위해 있어야 하는 CloudWatch 로그 그룹이 생성됩니다.
래퍼는 Lambda 실행에 대한 데이터를 수집하고 JSON 메시지를 생성하여 CloudWatch Logs에 기록합니다. 다음 으로 이러한 로그를 New Relic 으로 보내도록 CloudWatch를 구성합니다 .
Lambda를 사용하여 함수 로그를 보내는 방법에 대해 자세히 알아보십시오.
Python Lambda를 계측하려면:
Python 에이전트 패키지를 다운로드하여 함수와 동일한 디렉터리에 배치합니다. 이렇게 하려면 pip를 사용합니다.
bash$pip install -t . newrelic중요
Homebrew를 사용하는 경우 다음 오류가 발생할 수 있습니다.
DistutilsOptionError: must supply either home or prefix/exec-prefix -- not both
. 자세한 내용은 Homebrew GitHub 게시물 을 참조하십시오.Lambda 코드에서 Python 에이전트 모듈을 가져오고 뉴렐릭 데코레이터를 사용하여 핸들러 함수를 장식합니다. The New Relic package must be imported first in your code. 예는 다음과 같습니다.
import newrelic.agentnewrelic.agent.initialize()@newrelic.agent.lambda_handler()def handler(event, context):...선택 사항:
record_custom_event
API 를 사용하여 Lambda에 사용자 지정 이벤트 를 추가할 수도 있습니다. 다음은 예입니다.@newrelic.agent.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 함수를 로그아웃하는 방법에는 자동 또는 수동이라는 두 가지 방법이 있습니다.
자동 계측:
Lambda CLI 도구 newrelic-lambda-cli 를 다운로드하여 설치하세요.
도구를 사용하여
newrelic-lambda integrations install
명령을 실행합니다. 자세한 내용은 사용 지침을 참조하세요.수동 계측:
AWS 웹 콘솔에서 Lambda 서비스 섹션으로 이동합니다. 여기에서 뉴렐릭에 연결하려는 Lambda 함수를 찾으세요.
기본 Code 탭에서 Layers 섹션까지 아래로 스크롤하고 Add a layer 버튼을 클릭합니다.
Create layer [레이어 생성] 버튼을 클릭합니다.
이제 Choose a layer [계층 선택] 으로 이동하여 Specify an ARN [ARN 지정] 옵션을 선택합니다.
뉴렐릭의 레이어 목록 으로 이동하여 드롭다운 목록을 사용하여 Lambda 함수가 호스팅되는 AWS 지역을 선택하세요. 여기에서 Lambda의 루비 버전과 일치하는 ARN을 찾으세요. X86과 ARM64의 두 가지 옵션이 있어야 합니다. Copy to clipboard [클립보드에 복사] 버튼을 사용하거나 ARN 문자열을 수동으로 복사합니다.
AWS 콘솔 양식의 Specify an ARN [ARN 지정] 섹션에 New Relic Lambda 계층 ARN을 붙여넣습니다.
AWS 콘솔 양식에서 Add [추가] 버튼을 클릭하여 Lambda 함수에 계층을 추가합니다.
Lambda 함수 페이지에서 기본 Code 탭이 선택된 상태에서 Runtime settings 섹션까지 아래로 스크롤하고 Edit 버튼을 클릭합니다.
기존 Handler 값의 안전한 복사본을 만듭니다. 이후 단계에서 필요합니다.
Handler 값을
newrelic_lambda_wrapper.handler
으로 변경하고 Save 클릭합니다.Lambda 함수 페이지의 Configuration 탭으로 전환하세요.
Environment variables [환경 변수] 하위 탭을 선택합니다.
다음 환경 변수를 정의합니다.
NEW_RELIC_ACCOUNT_ID
뉴렐릭 계정 ID로 설정하세요NEW_RELIC_LAMBDA_HANDLER
이전 8단계에서 복사한 함수의 원래 핸들러 값으로 설정하세요.NEW_RELIC_LICENSE_KEY
당신의 뉴렐릭 피규어로 설정하세요NEW_RELIC_LOG_ENDPOINT
'https://log-api.newrelic.com/log/v1'로 설정NEW_RELIC_TELEMETRY_ENDPOINT
'https://cloud-collector.newrelic.com/aws/lambda/v1'로 설정합니다.
함수가 STDOUT에 쓰는 모든 내용을 포함하는 Lambda 호출의 로그를 뉴렐릭으로 보내려면
NEW_RELIC_EXTENSION_SEND_FUNCTION_LOGS
환경 변수를 'true'로 설정해야 합니다.팁
뉴렐릭 레이어는 뉴렐릭 루비 에이전트를 자동으로 전달하고 Lambda 함수 호출 전에 루비
require
를 통해 로드됩니다. 충돌을 방지하려면 다른 곳에 루비 에이전트 사본을 포함하지 마세요. 에이전트의 존재를 활용하려면 함수 내에서 원하는 뉴렐릭 루비 에이전트 API 호출을 자유롭게 수행하세요.