Observability/OTel

[OTEL] OpenTelemetry의 Java Agent에서 FRAME_SIZE_ERROR 발생

dev_ss 2024. 11. 25. 11:55

 

 

 


문제 발생

 

 

쿠버네티스 클러스터에 OTel 오퍼레이터를 설치하고, Collector와 Java  Agent를 구축하는 과정에서 발생한 에러이다.

 

 

 

https://opentelemetry.io/docs/kubernetes/operator/automatic/

 

Injecting Auto-instrumentation

An implementation of auto-instrumentation using the OpenTelemetry Operator.

opentelemetry.io

 

 

 

 

위 OpenTelemetry 레퍼런스를 참고하여 진행했었고, Operator를 설치 후 CRD를 활용하여 Collector를 설치하였다.

 

 

 

이후 Spring Boot 애플리케이션에 Annotation을 이용해서 Java Agent를 주입하였고, 아래와 같은 에러가 지속적으로 발생했다.

 

 

WARN io.opentelemetry.exporter.internal.grpc.GrpcExporter - Failed to export spans. Server responded with gRPC status code 2. Error message: FRAME_SIZE_ERROR: 4740180

 

 

 

아래는 해당 에러 로그와 관련된 사진이다.

 

 

 

처음에는 FRAME_SIZE_ERROR라는 문구 때문에, collector에서 설정하는 배치 사이즈와 같은 문제인 줄 알았으나 원인은 다른 곳에 있었다.

 


해결

 

 

https://opentelemetry.io/docs/kubernetes/operator/automatic/

 

 

설치 사이트를 참고하자면, 처음에 CRD로 생성하는 Collector의 receivers 포트를 http는 4318, 그리고 grpc는 4317을 선언하는 것을 볼 수 있다.

 

 

 

 

그리고 Instrumentation 파트를 보면 여기는 4318로 선언되어 있는 것을 알 수 있다.

 

그리하여 무의식적으로 http를 이용하겠다고 추측하였었다.

 

 

 

 

추가로 실제 생성된 파드 내부에서 OTel Operator로 주입된 내용을 보면 프로토콜은 grpc를 이용하였고, 선언한 endpoint로 주입된 것을 볼 수 있다.

 

 

 

여기서 중요한 포인트는 Collector에서 receivers내 grpc의 엔드포인트 포트를 4317로 했었고, 이후에 Instrumentation으로 설정된 값들은 grpc의 포트가 4318로 선언했었다는 것이다.

 

 

 

FRAME_SIZE_ERROR라고는 하였으나 실질적으로는 포트와 프로토콜이 잘못 매핑되었다는 것이었다.

 

 

 

이를 수정한 후 에러는 발생하지 않았고, 데이터도 정상적으로 수집할 수 있었다.

 

 


 

 

 

반응형