뉴렐릭과 AWS 계정을 성공적으로 연결한 후에는 뉴렐릭 Lambda 계층을 추가하여 컨테이너화되지 않은 AWS Lambda 함수를 렌더링할 수 있습니다. 이는 뉴렐릭 에이전트를 통합하여 함수가 호출될 때마다 자동 모니터링을 가능하게 합니다.
시작하기 전에
계측 방법
뉴렐릭은 포괄적인 모니터링을 위해 AWS Lambda 함수를 로그아웃하는 여러 가지 방법을 제공합니다.
- 함수줄 인터페이스(CLI): AWS CLI를 사용하여 Lambda 함수에 뉴렐릭 계층을 빠르게 추가할 수 있습니다.
- 서버리스 프레임워크: 뉴렐릭 리소스를 서버리스 배포에 원활하게 통합합니다.
- CloudFormation/SAM: 개발자의 코드형 템플릿에 뉴렐릭 계층을 포함합니다.
- AWS CDK: 다른 고성능 리소스와 함께 CDK 코드에 뉴렐릭 Lambda 계층을 추가합니다.
- Terraform: 다른 일러스트레이션 리소스와 함께 뉴렐릭 리소스를 쉽게 관리할 수 있습니다.
- 수동 리소스: 보다 세부적인 제어를 위해 AWS Lambda 콘솔을 통해 뉴렐릭 레이어를 직접 추가하세요.
어떤 방법을 선택하든 뉴렐릭 레이어는 뉴렐릭 에이전트를 함수에 추가합니다. 이 에이전트는 호출 시 자동으로 함수를 생성하여 뉴렐릭 Lambda 확장 프로그램을 통해 뉴렐릭으로 전송되는 페이로드 NR_LAMBDA_MONITORING
를 생성합니다.
요구 사항에 따라 확장 프로그램을 우회하여 CloudWatch에서만 텔레메트리를 볼 수도 있고, CloudWatch를 우회하거나, CloudWatch를 대체 수단으로 사용할 수도 있습니다. 이 문서의 마지막에 있는 CloudWatch 섹션에서 각 옵션에 대해 안내합니다.
newrelic-lambda
CLI 퀵스타트를 사용하여 Lambda 함수를 충전할 수 있습니다.
뉴렐릭 레이어를 설치하거나 업그레이드하려면 다음 명령을 실행하세요.
$newrelic-lambda layers install --nr-account-id YOUR_NR_ACCOUNT_ID --function my-function --upgrade
이 명령은 Lambda의 리전 및 런타임에 대해 사용 가능한 최신 계층을 자동으로 찾습니다.
이 명령은 뉴렐릭 리소스를 시작하는 빠른 방법을 제공하며 CI/CD 파이프라인에 쉽게 통합될 수 있습니다. 그러나 기존 Lambda 함수 리소스를 수정하므로 업데이트된 코드를 재배포하면 실수로 계측이 제거될 수 있습니다. 지속적인 모니터링을 보장하려면 배포할 때마다 명령을 다시 실행하거나 뉴렐릭 레이어를 통합하고 배포 프로세스에 직접 설정하는 것이 좋습니다.
CLI는 일괄 처리로 많은 기능에서 작동할 수 있습니다. --function all
, --function installed
또는 --function not-installed
를 사용하여 지역의 모든 기능에서 작동하거나 기존 New Relic 계측이 있거나 없는 기능에서만 작동합니다.
AWS의 서버리스 애플리케이션 모델(SAM)은 의존하는 리소스와 기능을 단순화하고 전체 애플리케이션의 수명 주기를 관리하는 CloudFormation 템플릿의 변형입니다. 우리는 대부분의 Lambda 예제 함수에 SAM 및 CloudFormation을 사용하고, 다른 많은 도구는 CloudFormation 템플릿 위에 구축되어 추가 추상화 계층을 제공합니다.
CloudFormation은 AWS 리소스의 프로비저닝 및 관리를 단순화하는 AWS 서비스입니다. YAML 또는 JSON 템플릿에서 원하는 리소스 상태를 정의함으로써 CloudFormation은 기본 API 호출을 자동으로 처리하여 필요에 따라 리소스를 생성, 업데이트 또는 삭제합니다. 이 선언적 접근 방식은 인프라 관리를 자동화하여 일관성과 재현성을 보장합니다.
다음은 Node.js Lambda 함수에 대한 간단한 CloudFormation 템플릿의 예입니다.
AWSTemplateFormatVersion: '2010-09-09'Transform: AWS::Serverless-2016-10-31Description: And example of a simple instrumented Node.js Lambda
Resources: NewRelicExample: Type: AWS::Serverless::Function Properties: # In this example, we're using the SAM CLI to package and deploy our lambda. SAM will transform this value during the publish step. CodeUri: newrelic-example-node/ # The handler for your function needs to be the one provided by the instrumentation layer, below. Handler: newrelic-lambda-wrapper.handler Runtime: nodejs12.x Environment: Variables: # For the instrumentation handler to invoke your real handler, we need this value NEW_RELIC_LAMBDA_HANDLER: YOUR_PATH_TO_INITIAL_LAMBDA_HANDLER # Distributed tracing needs your account ID, and your trusted account ID NEW_RELIC_ACCOUNT_ID: YOUR_ACCOUNT_ID_HERE # If your New Relic account has a parent account, this value should be that account ID. Otherwise, just # your account id. NEW_RELIC_TRUSTED_ACCOUNT_KEY: YOUR_PARENT_ACCOUNT_ID_HERE Layers: # This layer includes the New Relic Lambda extension, a sidecar process that sends telemetry, # as well as the New Relic agent for Node.js, and a handler wrapper that makes integration easy. - !Sub arn:${AWS::Partition}:lambda:${AWS::Region}:451483290750:layer:NewRelicNodeJS12X:34 Policies: # This policy allows the lambda to know the value of the New Relic license key. We need this so # that we can send telemetry back to New Relic - AWSSecretsManagerGetSecretValuePolicy: SecretArn: !ImportValue NewRelicLicenseKeySecret-NewRelic-LicenseKeySecretARN
일반적으로 함수와 해당 리소스를 설명하는 template.yaml
이라는 파일이 있습니다.
서버리스 프레임워크는 서버리스 애플리케이션을 위한 널리 사용되는 개발 및 배포 도구입니다. Node.js에서 AWS용으로 작성되었으며 대부분 CloudFormation 템플릿 위에서 높은 수준의 추상화 역할을 합니다. Node, Python, Ruby, Java 및 .NET 함수에 적합합니다.
New Relic은 Serverless Framework 애플리케이션의 계측을 단순화하기 위해 Serverless Framework 플러그인 을 제공합니다.
플러그인을 설치하려면 다음 명령을 실행하세요.
$npm install --save-dev serverless-newrelic-lambda-layers
또는 다음 명령을 실행할 수도 있습니다.
$yarn add --dev serverless-newrelic-lambda-layers
그런 다음, 뉴렐릭 계정 ID, 뉴렐릭 개인 API 키를찾으세요.
이제 serverless.yaml
파일에 다음을 추가합니다.
plugins: - serverless-newrelic-lambda-layerscustom: newRelic: accountId: your-new-relic-account-id-here apiKey: your-new-relic-personal-api-key-here linkedAccount: your-new-relic-integration-account-name-here
AWS 클라우드 개발 키트(AWS CDK)는 코드로 클라우드 리소스를 정의하고 AWS CloudFormation을 통해 프로비저닝하기 위한 프레임워크입니다.
다음은 Node.js Lambda 함수를 구현하고 배포하는 기본 CDK 앱의 예입니다.
import * as cdk from 'aws-cdk-lib';import { Construct } from 'constructs';import * as lambda from 'aws-cdk-lib/aws-lambda';
export class NewRelicExampleCdkStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Add latest New Relic Lambda layer ARN from https://layers.newrelic-external.com const NewReliclayerArn = 'arn:aws:lambda:us-east-1:451483290750:layer:NewRelicNodeJS20X:39'; const myFunction = new lambda.Function(this, "NewRelicExampleLambda", { runtime: lambda.Runtime.NODEJS_20_X, // Update functions handler to point to the New Relic Lambda wrapper handler: "newrelic-lambda-wrapper.handler", code: lambda.Code.fromAsset('lib/lambda-runtime-code'), layers: [lambda.LayerVersion.fromLayerVersionArn(this, 'NewRelicLayer', NewReliclayerArn)], environment: { // Set the NEW_RELIC_LAMBDA_HANDLER environment variable to the path of your initial handler. NEW_RELIC_LAMBDA_HANDLER: 'index.handler', }, }); }}
Terraform은 코드 도구로서 널리 사용되는 범용 인프라입니다. AWS 리소스를 관리하는 데 사용할 수 있습니다. 우리는 Terraform 펼쳐보기를 사용하여 뉴렐릭 권한이 있는 Lambda 함수 구현, 배포의 몇 가지 예를 제공합니다.
뉴렐릭 Terraform 공급자를 사용하여 AWS 통합을 설정할 수 있습니다.
위의 접근 방식보다 오류가 발생하기 쉽고 노동 집약적이지만 Node.js의 경우 AWS Lambda 콘솔에서 뉴렐릭을 사용하도록 Lambda 함수의 설정을 수동으로 변경할 수 있습니다. 파이썬, 루비, 자바.
다음은 루비 런타임에 대한 리소스를 사용하는 방법에 대한 예입니다.
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
: 이전에 복사한 함수의 원래 Handler 값으로 설정합니다.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
로 설정해야 합니다.뉴렐릭 클러스터 키 비밀에 대한 액세스를 허용하도록 실행 역할을 수정합니다.
NEW_RELIC_LICENSE_KEY
라는 비밀의 ARN을 찾습니다.아래 코드와 같이 함수의 실행 역할에 새 인라인 정책을 추가합니다.
SECRET_ARN
위에서 찾은 값으로 바꿉니다."Statement": [{"Action": ["secretsmanager:GetSecretValue"],"Resource": "SECRET_ARN","Effect": "Allow"}]팁
뉴렐릭 레이어는 뉴렐릭 루비 에이전트를 자동으로 전달하고 Lambda 함수 호출 전에 루비
require
를 통해 로드됩니다. 충돌을 피하려면 다른 곳에 루비 에이전트 사본을 포함하지 마세요. 에이전트의 존재를 활용하려면 함수 내에서 원하는 뉴렐릭 루비 에이전트 API 호출을 자유롭게 수행하세요.
Java, Python, Node.js 및 .Net 런타임은 루비와 동일한 소비 흐름을 따르지만 일부 다른 핸들러를 사용합니다. 함수 콘솔에서 새로 연결된 레이어를 가리키도록 함수 핸들러를 업데이트하는 방법은 다음과 같습니다.
자바:
RequestHandler
구현:com.newrelic.java.HandlerWrapper::handleRequest
.RequestStreamHandlerWrapper
구현:com.newrelic.java.HandlerWrapper::handleStreamsRequest
.
Python:
newrelic_lambda_wrapper.handler
(밑줄).노드:
newrelic-lambda-wrapper.handler
(하이픈)..Net의 경우 핸들러를 설정할 필요가 없습니다.
Go의 경우 Lambda 함수의 소스 코드를 변경하여 이를 소비해야 합니다. 설정 변경만으로는 충분하지 않습니다.
배송 방법
모든 에이전트 레이어에는 CloudWatch를 우회하여 로그인 및 페이로드를 뉴렐릭으로 보내기 위한 확장 기능도 포함되어 있습니다. 이는 지연 시간과 비용을 줄이는 데 도움이 될 수 있습니다. 그러나 기능의 성능과 안정성에 영향을 미칠 위험이 있습니다.
뉴렐릭 Lambda 레이어를 추가하면 확장 기능이 활성화되고 기본적으로 로그 전달이 비활성화됩니다.
뉴렐릭에서 함수 로그를 보려면 환경 변수를 사용하여 함수 로그의 확장 전송을 활성화해야 합니다.
함수 로그는 함수가 호출되는 동안 기록된 로그일 뿐이라는 점을 기억하는 것이 중요합니다. 확장 프로그램은 START
, END
및 REPORT
줄과 같은 Lambda 런타임 로그를 보내지 않습니다.
CloudWatch에만 데이터를 보내거나 대체 수단으로 보낼 수 있습니다. 자세한 내용은 CloudWatch 대체 설명서를 참조하세요.
다음은 뭐지?
- 이러한 단계를 완료하면 Lambda 모니터링 UI 에서 데이터 보고를 볼 수 있습니다.
- 데이터를 찾는 데 문제가 있는 경우 Lambda 활성화 문제 해결을 참조하십시오.