[OTEL] OpenTelemetry의 Java Agent에서 FRAME_SIZE_ERROR 발생
문제 발생
쿠버네티스 클러스터에 OTel 오퍼레이터를 설치하고, Collector와 Java Agent를 구축하는 과정에서 발생한 에러이다.
https://opentelemetry.io/docs/kubernetes/operator/automatic/
위 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라고는 하였으나 실질적으로는 포트와 프로토콜이 잘못 매핑되었다는 것이었다.
이를 수정한 후 에러는 발생하지 않았고, 데이터도 정상적으로 수집할 수 있었다.