조직이 AWS Lambda를 사용하여 FaaS(Function-as-a-Service) 아키텍처로 전환함에 따라 원활하고 효율적인 사용자 경험을 보장하려면 기능 성능을 이해하고 최적화하는 것이 중요해졌습니다. 각 Lambda 호출은 잠재적인 병목 현상, 병목지점 또는 개선 기회를 나타냅니다.
AWS Lambda 용 뉴렐릭의 일러스트레이션은 함수의 내부 작동에 대한 심층적인 가시성을 제공합니다. 뉴렐릭 에이전트를 함수에 추가하면 함수가 호출될 때마다 뉴렐릭도 호출됩니다. 지속 시간, 콜드 스타트, 예외, 역추적과 같은 주요 성능 지수를 인사이트에서 얻을 수 있습니다.
이 문서에서는 뉴렐릭의 Lambda 모니터링에 대해 설명하고 AWS 와 뉴렐릭 계정을 연결하는 방법을 안내합니다. 기능을 계측하려면 먼저 계정을 연결해야 합니다.
Lambda 계측 작동 방식
뉴렐릭을 사용한 AWS Lambda 의 필수 요소는 다음과 같습니다.
귀하의 기능: 귀하의 기능은 이해하려는 코드입니다. 언제 오류가 발생하는지, 왜 느린지, 얼마나 자주 호출되는지 알고 싶습니다.
뉴렐릭 에이전트 또는 SDK: 뉴렐릭은 함수가 작성된 언어에 따라 다양한 에이전트 또는 SDK를 제공합니다. 그들의 역할은 실제로 코드를 모니터링하는 것입니다. 함수 호출 기간을 측정하고, 발생한 오류를 기록하고, 소스 이벤트에 대한 세부 정보와 함수 응답을 기록합니다. 이렇게 하려면 Lambda 호출 핸들러 함수를 래핑해야 합니다.
뉴렐릭 Lambda 확장 기능: 함수에서 뉴렐릭 Lambda 확장 프로그램을 사용하면 코드와 함께 Lambda 실행 환경 내에서 실행됩니다. 요원이 모아서 뉴렐릭의 백앤드에게 일괄적으로 보내는 텔메트리를 강화한 것입니다. 또한 함수의 로그를 뉴렐릭으로 보낼 수도 있습니다. 블루렐릭으로 함수를 모니터링하는 데에는 Lambda 확장이 필요하지 않습니다.
배송 방법을 선택하세요
뉴렐릭 AWS Lambda 설명서를 배송하는 방법에는 세 가지가 있습니다. 선택하는 배송 방법은 데이터 요구 사항에 따라 다릅니다.
비용: AWS Lambda 사용하여 결제하는 가장 비용 효율적인 방법은 Lambda 확장을 포함하는 모든 레이어를 사용하는 것입니다. 기본적으로 확장 프로그램은 AWS CloudWatch로 데이터를 전송하지 않습니다.
안정성: CloudWatch를 통해서만 데이터를 전송할 수 있습니다. 이렇게 하려면 Lambda 확장 기능을 비활성화해야 합니다. 즉, Lambda 함수는 더 가벼워지고 호출 시 추가 프로세스가 실행되지 않습니다. 이 경우에는 로그와 페이로드가 확장 프로그램 대신 CloudWatch를 통해 뉴렐릭으로 전송됩니다.
두 가지 장점 모두: AWS CloudWatch와 함께 확장 기능을 대체 수단으로 사용하면 비용을 절감하는 동시에 확장 기능에 문제가 있을 경우 안전 장치를 제공할 수 있습니다.
우리는 HTML 문서의 각 메서드를 사용하여 Lambda 함수를 로그아웃하는 방법을 보여드리겠습니다.
시작하기 전에
Lambda 계층을 사용하여 서버리스 모니터링을 활성화하려면 다음이 필요합니다.
.
IAM 리소스, 관리형 암호 및 Lambda를 생성할 수 있는 권한이 있는 AWS 계정. CloudFormation 스택 및 S3 버킷을 생성하기 위한 권한도 필요합니다.
그런 다음 다음을 완료해야 합니다.
aws configure
사용하여 AWS CLI v2를 설치합니다. AWS 액세스 키 ID와 AWS 비밀 액세스 키가 필요합니다.Python 버전 3.3 이상을 설치합니다.
newrelic-lambda
CLI를 설치하세요. 설치하려면 다음 명령을 실행하세요.bash$pip3 install newrelic-lambda-cli기본적으로 AWS 관리형 정책
ReadOnlyAccess
을 사용합니다. 이를 통해 인프라 통합은 Lambda 함수 및 CloudWatch 지표뿐만 아니라 계정의 모든 리소스를 볼 수 있습니다. 뉴렐릭은 이 기본값을 권장하지만 일부 조직은 타사 통합에 대해 엄격한 보안 태세를 선호한다는 것을 알고 있습니다. 뉴렐릭의 액세스를 제한하려면 최소한 다음 권한으로 IAM 역할을 부여할 수 있습니다.
Resource: "*" Action: - "cloudwatch:GetMetricStatistics" - "cloudwatch:ListMetrics" - "cloudwatch:GetMetricData" - "lambda:GetAccountSettings" - "lambda:ListFunctions" - "lambda:ListAliases" - "lambda:ListTags" - "lambda:ListEventSourceMappings"
- CLI를 실행하기 전에 뉴렐릭에게 AWS 에서 최소한 다음 권한을 부여해야 합니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CLIAccessPolicy", "Action": [ "cloudformation:CreateChangeSet", "cloudformation:CreateStack", "cloudformation:DescribeStacks", "cloudformation:ExecuteChangeSet", "iam:AttachRolePolicy", "iam:CreateRole", "iam:GetRole", "iam:PassRole", "lambda:AddPermission", "lambda:CreateFunction", "lambda:GetFunction", "logs:DeleteSubscriptionFilter", "logs:DescribeSubscriptionFilters", "logs:PutSubscriptionFilter", "s3:GetObject", "serverlessrepo:CreateCloudFormationChangeSet", "secretsmanager:CreateSecret" ], "Effect": "Allow", "Resource": "*" }, { "Sid": "NRLogAccessPolicy", "Effect": "Allow", "Action": [ "serverlessrepo:CreateCloudFormationTemplate", "serverlessrepo:GetCloudFormationTemplate" ], "Resource": "arn:aws:serverlessrepo:us-east-1:463657938898:applications/NewRelic-log-ingestion" } ]}
CLI에 대해 자세히 알아보려면 CLI 리포지터리를 참조하세요.
권장 AWS Lambda 언어 런타임
다음 런타임을 권장합니다.
- Node.js:
nodejs16.x
,nodejs18.x
,nodejs20.x
- 파이썬:
python3.8
,python3.9
,python3.10
,python3.11
,python3.12
- 이동:
provided.al2
,provided.al2023
- 자바:
java8.al2
,java11
,java17
,java21
- 루비:
ruby3.2
,ruby3.3
- .NET:
dotnet6
,dotnet8
비용을 고려하세요
AWS Lambda에 대한 서버리스 모니터링을 활성화하면 Amazon Web Services 요금이 발생할 수 있습니다. 귀하의 Lambda 데이터를 당사에 보고하는 당사의 newrelic-log-ingestion
Lambda 함수는 제3자 서비스 로 간주됩니다. 귀하가 이를 사용하여 발생하는 AWS 요금은 귀하의 책임입니다.
뉴렐릭 Lambda Layers 에 포함된 newrelic-lambda-extension을 사용하면 CloudWatch와 newrelic-log-ingestion 함수를 통해 로그와 텔레메트리를 전송하지 않아도 됩니다. 옵저버빌리티 데이터의 고가용성이 필요한 함수에 대한 CloudWatch 대체 방법으로 newrelic-log-ingestion 함수를 구성하는 것도 가능합니다.
Lambda 모니터링 설치
람다 모니터링에는 다음이 포함됩니다.
- CloudWatch 지표를 수집하고 뉴렐릭 내에서 엔터티 합성을 수행하는 AWS 통합입니다.
- 뉴렐릭 에이전트는 "서버리스" 모드에서 작동하며 뉴렐릭 Lambda 레이어 또는 배포에 포함되어 있습니다.
- newrelic-log-ingestion 함수나 Extension을 통해 "계측된" 페이로드를 보내고 선택적으로 뉴렐릭에 로그인하는 방법은 뉴렐릭 Lambda 레이어 에도 포함되어 있습니다.
AWS 와 뉴렐릭 계정을 연결하세요
뉴렐릭에서 "계측된" Lambda 함수에 대한 텔레메트리를 받으려면 먼저 AWS 계정을 뉴렐릭에 연결해야 합니다. 계정을 연결하면 AWS 계정 인벤토리를 생성하고 Lambda 함수에 대한 CloudWatch 지표를 자동으로 수집할 수 있는 권한이 부여됩니다. 계정을 연결한 후에는 AWS 계정의 리소스가 엔터티 탐색기 에 엔터티로 표시됩니다. Lambda 엔터티는 서버리스 기능 보기에서 찾을 수 있습니다.
AWS Metric Streams 통합 설정(권장)
뉴렐릭이 Lambda 함수를 모니터링하려면 뉴렐릭과 AWS 간의 통합을 설정해야 합니다. 지연시간을 줄이고 폴링 요청 제한을 방지하려면 지표 스트림을 사용하는 것이 좋습니다.
AWS와 API 폴링 통합 설정
지표 스트림 통합을 사용하지 않는 경우 대신 API 폴링 통합을 설정할 수 있습니다. 기본적으로 Lambda 서비스와 API 폴링 통합을 활성화하면 5분마다 CloudWatch 지표를 폴링합니다.
newrelic-lambda-cli를 사용하면 API 폴링 통합을 설정할 수 있지만 지표 스트림 통합은 설정할 수 없습니다.
$newrelic-lambda integrations install --nr-account-id YOUR_NR_ACCOUNT_ID \>--nr-api-key YOUR_NEW_RELIC_USER_KEY
통합 설치 명령 의 한 단계는 보안을 강화하기 위해 AWS Secrets Manager 에 NEW_RELIC_LICENSE_KEY
비밀을 생성합니다. 이것은 다른 옵션 및 플래그와 함께 --disable-license-key-secret
플래그로 구성할 수 있습니다.
Lambda 함수를 호출하세요
Lambda 함수에 계측 기능을 추가하는 방법에는 여러 가지가 있습니다. "코드 변경 없음"의 경우 뉴렐릭 레이어를 사용하세요. Lambda 함수에 직접 추가 하거나 dockerfile에 포함한 레이어를 추가할 수 있습니다. 확장 계층을 제외한 각 계층에는 페이로드와 로그 전달을 위한 에이전트, 핸들러 래퍼, 확장이 포함되어 있습니다.
newrelic-lambda-cli 는 뉴렐릭 Lambda 레이어를 추가하는 가장 빠르고 쉬운 방법입니다. 연속 통합/연속 배포(CI/CD)보다는 테스트용으로 자주 사용됩니다.
기존 CI/CD 파이프라인을 통해 뉴렐릭 레이어를 추가하기 위해 SAM 및 Terraform 에 대한 예제와 함께 서버리스 프레임워크 바인딩이 있습니다.
성능을 위해 또는 루비를 함수 코드와 더 긴밀하게 통합하려면 루비를 제외한 모든 런타임에 대해 layerlessGateway를 사용할 수 있습니다.
Lambda 함수 구성
함수를 시스템에 등록한 후 AWS 콘솔에서 확인하여 설정 내용이 올바른지 확인하세요.
런타임별로 일반적으로 사용되는 환경 변수에 대해서는 다음 단계를 참조하세요.
환경 변수
CLI에서 Lambda 계층을 계측하는 경우 환경 변수가 자동으로 구성됩니다. 모니터링 요구 사항에 맞는 환경 변수로 Lambda 함수를 구성하고 일부 기본 설정을 변경하고 싶을 수도 있습니다. 사용 가능한 환경 변수와 기본 설정에 대한 권장 사항을 확인하려면 런타임을 선택하세요.
예제 함수를 사용해 보세요
로그된 뉴렐릭의 Lambda 레이어를 사용한 후에는 예제 함수를 시험해 볼 것을 강력히 권장합니다. 이러한 작업 예제는 사용자 서버리스 기능의 시작점으로 사용되어야 합니다. 이러한 예제를 사용하면 뉴렐릭 Lambda 레이어에 익숙해지고 계정 링크를 테스트하는 데 도움이 될 수 있으며 자체 로그에 대한 참조로 사용할 수 있습니다. 각 예에서는 권한 추가, 핸들러 래핑을 위한 런타임별 기술, CloudWatch에서 함수 로그 보존 관리 등을 보여줍니다.
배포하다 Lambda 함수를 관리하고 구현하는 방법에는 여러 가지가 있지만, AWS CloudFormation은 예제에 사용하는 메커니즘입니다.
우리의 예제는 뉴렐릭 Lambda Extension과 함께 이 GitHub 에 게시되어 있습니다. 뉴렐릭이 지원하는 각 Lambda 런타임마다 하나씩 있습니다.
문제점 해결
Lambda 함수에서 문제가 발생한 경우 다음은 몇 가지 일반적인 문제 해결 팁입니다.