시사
Java용 OpenTelemetry가 포함된 AWS Lambda는 아직 개발 중입니다.
.NET에 대한 유사한 설명서가 있지만 OpenTelemetry와 함께 AWS Lambda용 Python, Go, JavaScript, Ruby 또는 PHP를 사용하는 경우 Java 또는 .NET 설명서를 설정에 대한 일반 가이드로 사용할 수 있습니다. 추가 정보는 OpenTelemetry용 AWS Distro를참조하십시오.
이 가이드에서는 OpenTelemetry Lambda 를 사용하여 AWS의 관리형 OpenTelemetry Lambda Layers 를 사용하여 Java Lambda 함수를 추적하는 방법을 다룹니다. OpenTelemetry를 사용하면 널리 사용되는 많은 라이브러리에 대한 자동 계측을 포함하여 기능을 쉽게 계측할 수 있습니다.
전제 조건
이 가이드에서는 다음이 있다고 가정합니다.
- New Relic 계정. 계정이 없으면 무료로 만드세요 .
- AWS 계정. 계정이 없으면 무료로 만드세요 .
java8.al2
또는java11
런타임에서 실행되는 자바 Lambda 함수. 아직 계정이 없다면 지금 만드세요 .
1단계: X-Ray 활성화
이 설정에서 AWS X-Ray를 사용하지 않더라도 AWS OpenDistro에 내장된 추적 기능을 활성화하려면 Lambda 함수에서 X-Ray를 활성화해야 합니다.
X-Ray를 활성화하려면:
- Lambda 콘솔 에서 함수를 엽니다.
- Configuration 선택한 다음 Monitoring Tools 선택합니다.
- Edit 선택합니다.
- X-Ray 아래에서 Active tracing 활성화합니다.
또는 SAM(서버리스 애플리케이션 모델) 또는 CloudFormation 템플릿을 사용하는 경우 Lambda 함수의 속성에 다음을 추가하여 X-Ray를 활성화할 수 있습니다.
yourFunctionHere: Type: AWS::Serverless::Function Properties: # ... Policies: - AWSLambdaBasicExecutionRole # ... - AWSXrayWriteOnlyAccess Tracing: Active
중요
이 옵션을 사용하려면 AWSLambdaBasicExecutionRole
또는 이에 상응하는 정책이 함수에 연결되어 있어야 합니다.
2단계: 레이어 설치
AWS OpenTelemetry Lambda 수집기,OpenTelemetry Java SDK 및 ADOT 자동 측정, 자동 리소스 에이전트를 포함하는 관리형 계층을 게시합니다.
설치하려면:
Lambda 콘솔 에서 함수를 엽니다.
Designer 섹션의 Layers 아래에서 Add a layer 선택합니다.
Specify an ARN 아래에 함수 아키텍처에 대한 계층 ARN 중 하나를 아래 목록에 붙여넣습니다.
{region}
AWS 지역(예:us-east-1
)으로 바꿉니다.Add 선택합니다.
- AMD64 / X86_64:
arn:aws:lambda:{region}:901920570463:layer:aws-otel-java-agent-amd64-ver-1-11-1:1
- ARM64:
arn:aws:lambda:{region}:901920570463:layer:aws-otel-java-agent-arm64-ver-1-11-1:1
- AMD64 / X86_64:
SAM 또는 CloudFormation 템플릿의 경우 다음을 함수의 속성에 추가합니다.
yourFunctionHere: Type: AWS::Serverless::Function Properties: # ... Layers: # Use this if using x86_64 architecture - !Sub arn:${AWS::Partition}:lambda:${AWS::Region}:901920570463:layer:aws-otel-java-agent-amd64-ver-1-11-1:1 # Use this if using arm64 architecture - !Sub arn:${AWS::Partition}:lambda:${AWS::Region}:901920570463:layer:aws-otel-java-agent-arm64-ver-1-11-1:1
중요
위의 계층 ARN이 최신 상태인지 확인하려면 AWS에서 게시한 최신 ARN 을 참조하십시오.
3단계: 레이어 구성
레이어를 구성하려면 exec wrapper 를 구성해야 합니다. exec 래퍼는 함수 초기화 중에 실행되는 스크립트입니다. 이 경우 스크립트는 OpenTelemetry를 구성합니다.
Lambda 콘솔 에서 함수를 엽니다.
Configuration 선택한 다음 Environment variables 선택합니다.
Environment variables 아래에서 Edit 선택합니다.
Add environment variable 선택합니다.
Key 의 경우
AWS_LAMBDA_EXEC_WRAPPER
로 설정하고 Value 를 다음 옵션 중 하나로 설정합니다(핸들러 유형에 따라 다름). 그런 다음 Save 선택합니다./opt/otel-handler
: 일반 핸들러 래핑용(RequestHandler
구현)/opt/otel-proxy-handler
: API 게이트웨이를 통해 프록시되는 일반 핸들러(RequestHandler
구현)를 래핑하여 HTTP 컨텍스트 전파를 활성화합니다./opt/otel-stream-handler
: 스트리밍 핸들러 래핑(RequestStreamHandler
구현), HTTP 요청에 대한 HTTP 컨텍스트 전파 활성화
SAM 또는 CloudFormation 템플릿의 경우 다음을 함수의 속성에 추가합니다.
yourFunctionHere: Type: AWS::Serverless::Function Properties: # ... Environment: Variables: AWS_LAMBDA_EXEC_WRAPPER: /opt/otel-handler
중요
함수 핸들러가 다른 핸들러 유형 중 하나를 구현하는 경우 /opt/otel-handler
을 교체합니다.
4단계: New Relic 환경 변수 추가
이 계층이 수집하는 OpenTelemetry 데이터를 New Relic으로 보내려면 계층이 수신하는 원격 분석을 New Relic OpenTelemetry Endpoint 로 내보내도록 계층과 함께 패키징된 OpenTelemetry Lambda Collector를 구성해야 합니다. 그렇게 하기 전에 먼저 의존할 몇 가지 환경 변수를 설정해야 합니다.
뉴렐릭 계정에서 뉴렐릭 을(를) 생성하고 복사하세요.
Lambda 콘솔 에서 함수를 엽니다.
Configuration 선택한 다음 Environment variables 선택합니다.
Environment variables 아래에서 Edit 선택합니다.
Add environment variable 선택합니다.
Key 의 경우
NEW_RELIC_LICENSE_KEY
로 설정하고 Value 를 1단계에서 생성한 인스턴스 키의 값으로 설정합니다. 그런 다음 Save 선택합니다.Add environment variable 다시 선택하세요.
Key 의 경우
NEW_RELIC_OPENTELEMETRY_ENDPOINT
로 설정하고 Value 를 아래 옵션 중 하나로 설정합니다(뉴렐릭 지역에 따라 다름). 그런 다음 Save 선택합니다.otlp.nr-data.net:4317
: New Relic 계정이 미국 지역에 있는 경우otlp.eu01.nr-data.net:4317
: New Relic 계정이 EU 지역에 있는 경우
SAM 및 CloudFormation 템플릿의 경우 함수 속성에 다음을 추가합니다. your-license-key-here
를 로 바꾸고 otlp.nr-data.net:4317
를 해당 지역의 뉴렐릭 OpenTelemetry EndPoint로 바꾸세요.
yourFunctionHere: Type: AWS::Serverless::Function Properties: # ... Environment: Variables: # ... NEW_RELIC_LICENSE_KEY: your-license-key-here NEW_RELIC_OPENTELEMETRY_ENDPOINT: otlp.nr-data.net:4317
중요
your-license-key-here
뉴렐릭 으로 바꾸고, otlp.nr-data.net:4317
뉴렐릭 지역에 적합한 EndPoint로 바꾸세요. 위의 목록을 참조하세요.
5단계: 수집기 구성
이제 셸메트리를 뉴렐릭 OpenTelemetry Endpoint로 내보내는 설정으로 OpenTelemetry Lambda 수집기의 기본 설정을 재정의하겠습니다. 이렇게 하려면 함수에 collector.yaml
구성 파일을 포함해야 합니다.
다음 내용으로 함수의 루트 디렉터리에 collector.yaml
파일을 만듭니다.
receivers: otlp: protocols: grpc: http:
exporters: otlp: endpoint: ${NEW_RELIC_OPENTELEMETRY_ENDPOINT} headers: api-key: ${NEW_RELIC_LICENSE_KEY}
service: pipelines: traces: receivers: [otlp] exporters: [otlp] metrics: receivers: [otlp] exporters: [otlp] logs: receivers: [otlp] exporters: [otlp]
이 collector.yaml
파일을 함수의 zip 패키지 루트 디렉터리에 묶고 다시 배포합니다.
- Lambda 콘솔 에서 함수를 엽니다.
- Configuration 선택한 다음 Environment variables 선택합니다.
- Environment variables 아래에서 Edit 선택합니다.
- Add environment variable 선택합니다.
- Key 의 경우
OPENTELEMETRY_COLLECTOR_CONFIG_FILE
설정하고 Value 를/var/task/collector.yaml
로 설정합니다. - 그런 다음 Save 선택합니다.
SAM 및 CloudFormation 템플릿의 경우 다음을 함수의 속성에 추가합니다.
yourFunctionHere: Type: AWS::Serverless::Function Properties: # ... Environment: Variables: # ... OPENTELEMETRY_COLLECTOR_CONFIG_FILE: /var/task/collector.yaml
중요
이것은 함수의 루트 디렉토리에 collector.yaml
를 번들로 묶었다고 가정합니다. 다른 곳에 번들로 묶은 경우 /var/task/collector.yaml
을 collector.yaml
경로로 바꿉니다.
6단계: New Relic UI [view-data]에서 데이터 보기
먼저 Lambda 함수를 몇 번 호출하여 원격 분석 생성을 시작하려고 합니다. 거기에서 New Relic으로 이동하여 trace , metrics 및 logs 를 찾으십시오.
원격 측정은 New Relic Serverless 아래에 나타나지 않습니다. 대신 New Relic OpenTelemetry Nerdlets에서 원격 측정 데이터를 찾을 수 있습니다.
자동 계측 오버헤드
Java 자동 계측 에이전트용 ADOT Lambda 레이어는 AWS Lambda의 시작 시간에 상당한 영향을 미치며, 일반적으로 프로비저닝된 동시성 과 함께 이를 사용하여 초기화하는 동안 초기 요청에서 시간 초과를 일으키지 않고 프로덕션 요청을 제공해야 합니다. 사용 사례에 적합한 설정을 결정하기 위해 먼저 비프로덕션 환경에서 이 구성을 테스트하는 것이 좋습니다.
또는 다음과 같은 수동 계측 방법을 사용할 수 있습니다. 기본적으로 수동 계측은 함수 초기화 시 더 적은 리소스를 필요로 합니다. 그러나 이 방법은 대부분의 경우 코드 변경이 필요합니다.
수동 계측
수동 계측 방법은 이 문서의 자동 계측 절차와 유사합니다. 유일한 차이점은 1단계 에서 지정한 Lambda 계층 ARN입니다.
수동 계측의 경우 2단계 에서 계층 ARN을 사용하는 대신 함수 아키텍처에 대해 아래 목록에 있는 계층 ARN 중 하나를 사용하십시오.
- AMD64 / X86_64:
arn:aws:lambda:{region}:901920570463:layer:aws-otel-java-wrapper-amd64-ver-1-11-1:1
- ARM64:
arn:aws:lambda:{region}:901920570463:layer:aws-otel-java-wrapper-arm64-ver-1-11-1:1
{region}
을 us-east-1
과 같은 AWS 리전으로 바꿉니다.
다른 모든 단계는 동일하게 유지됩니다.
이 대체 Lambda 계층은 여전히 자동 방법처럼 Lambda 함수를 래핑합니다. 또한 AWS SDK 를 자동으로 계측합니다. 그러나 사용하는 다른 모든 라이브러리를 사용하려면 함수의 종속성에 OpenTelemetry 계측 리포지토리 의 라이브러리의 OpenTelemetry 계측 라이브러리를 포함하고 코드를 수정하여 초기화해야 합니다.
GitHub에서 OKHttp의 예를 볼 수 있습니다.
중요
위의 계층 ARN이 최신 상태인지 확인하려면 AWS에서 게시한 최신 ARN 을 참조하십시오.
분산 추적
경우에 따라 이 구성으로 New Relic 내에서 조각난 분산 추적을 볼 수 있습니다. 이는 추적이 시작되거나 ADOT 컨텍스트 외부에 있는 서비스(예: 관리형 AWS 서비스)와 관련될 때 발생합니다. 해당 서비스의 범위는 OpenTelemetry가 아닌 X-Ray에 의해 생성되며 ADOT은 이를 New Relic에 전달하지 않습니다. 추적이 조각난 것처럼 보이지만 여전히 Lambda 함수 내에서 성능에 대한 완전한 통찰력과 범위가 New Relic으로 전달된 다른 서비스를 제공합니다.
추가 정보
자세한 내용은 New Relic OpenTelemetry 빠른 시작 을 확인하십시오.