본문 바로가기

server/kafka

fluentd grpc ruby 버전 에러

booted, phase: 0","timestamp":"2025-07-27T04:09:02.32159913Z"}
[BUG] Segmentation fault at 0x0000000000000029
ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) [x86_64-linux]

-- Control frame information -----------------------------------------------
c:0001 p:---- s:0003 e:000002 (none) [FINISH]


-- Machine register context ------------------------------------------------
 RIP: 0x00007f20478d905f RBP: 0x00007f203f2f03a8 RSP: 0x00007f203d583d30
 RAX: 0x0000000000000001 RBX: 0x0000000000000000 RCX: 0x0000000000000000
 RDX: 0x0000000000000000 RDI: 0x00007f203f2f03a8 RSI: 0x0000000000000cf1
  R8: 0x000000000000021d  R9: 0x0000000000000000 R10: 0x00007f203f2e6cb8
 R11: 0x000000000000003a R12: 0x00007f203f2f03a8 R13: 0x0000000000000cf1
 R14: 0x00007f2040e43e50 R15: 0x00007f203d583d50 EFL: 0x0000000000010206

-- C level backtrace information -------------------------------------------
/usr/local/lib/libruby.so.3.1(rb_print_backtrace+0x11) [0x7f20478fd348] vm_dump.c:759
/usr/local/lib/libruby.so.3.1(rb_vm_bugreport) vm_dump.c:1045
/usr/local/lib/libruby.so.3.1(rb_bug_for_fatal_signal+0xf0) [0x7f20476fb800] error.c:821
/usr/local/lib/libruby.so.3.1(sigsegv+0x49) [0x7f2047853429] signal.c:964
/lib/x86_64-linux-gnu/libpthread.so.0(__restore_rt+0x0) [0x7f20475f7140]
/usr/local/lib/libruby.so.3.1(cached_callable_method_entry+0x9) [0x7f20478d905f] vm_method.c:1253
/usr/local/lib/libruby.so.3.1(callable_method_entry) vm_method.c:1323
/usr/local/lib/libruby.so.3.1(gccct_method_search_slowpath+0x38) [0x7f20478d9c48] vm_eval.c:433
/usr/local/lib/libruby.so.3.1(gccct_method_search+0x4b) [0x7f20478f18bb] vm_eval.c:482
/usr/local/lib/libruby.so.3.1(rb_funcallv_scope) vm_eval.c:1044
/usr/local/lib/libruby.so.3.1(rb_funcallv) vm_eval.c:1065
/usr/local/bundle/gems/grpc-1.74.0-x86_64-linux-gnu/src/ruby/lib/grpc/3.1/grpc_c.so(0x7f203dfa5686) [0x7f203dfa5686]
/usr/local/lib/libruby.so.3.1(rb_vrescue2+0x10b) [0x7f2047703c4b] eval.c:903
/usr/local/lib/libruby.so.3.1(rb_rescue2+0x8a) [0x7f2047703eba] eval.c:884
...................
7f2047a51000-7f2047a63000 rw-p 00000000 00:00 0 
7f2047a63000-7f2047a6b000 r--p 00000000 00:37 3644357                    /usr/lib/libjemalloc.so.2
7f2047a6b000-7f2047af9000 r-xp 00008000 00:37 3644357                    /usr/lib/libjemalloc.so.2
7f2047af9000-7f2047b0e000 r--p 00096000 00:37 3644357                    /usr/lib/libjemalloc.so.2
7f2047b0e000-7f2047b0f000 ---p 000ab000 00:37 3644357                    /usr/lib/libjemalloc.so.2
7f2047b0f000-7f2047b15000 r--p 000ab000 00:37 3644357                    /usr/lib/libjemalloc.so.2
7f2047b15000-7f2047b16000 rw-p 000b1000 00:37 3644357                    /usr/lib/libjemalloc.so.2
7f2047b16000-7f2047d22000 rw-p 00000000 00:00 0 
7f2047d22000-7f2047d23000 r--p 00000000 00:37 3634548                    /lib/x86_64-linux-gnu/ld-2.31.so
7f2047d23000-7f2047d43000 r-xp 00001000 00:37 3634548                    /lib/x86_64-linux-gnu/ld-2.31.so
7f2047d43000-7f2047d4b000 r--p 00021000 00:37 3634548                    /lib/x86_64-linux-gnu/ld-2.31.so
7f2047d4b000-7f2047d4c000 rw-p 00000000 00:00 0 
7f2047d4c000-7f2047d4d000 r--p 00029000 00:37 3634548                    /lib/x86_64-linux-gnu/ld-2.31.so
7f2047d4d000-7f2047d4e000 rw-p 0002a000 00:37 3634548                    /lib/x86_64-linux-gnu/ld-2.31.so
7f2047d4e000-7f2047d4f000 rw-p 00000000 00:00 0 
7ffe3047c000-7ffe30c7b000 rw-p 00000000 00:00 0                          [stack]
7ffe30cb8000-7ffe30cbc000 r--p 00000000 00:00 0                          [vvar]
7ffe30cbc000-7ffe30cbe000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0                  [vsyscall]


{"time":"2025-07-27 04:13:21","level":"error","message":"Worker 0 exited unexpectedly with signal SIGABRT"}
2025-07-27 04:13:22 +0000 [info]: #0 init worker0 logger path=nil rotate_age=nil rotate_size=nil

 

fluentd로 kafka consumer를 작업했었는데, 이미지 빌드 후 30분마다 에러가 발생하면서, 계속 재부팅이 되는 현상을 겪었다. 

(아마도 30분 마다인것은 특정 API 로그를 받아서 일꺼라 추측한다.)

 

문제는 fluentd의 재부팅으로 pod가 재부팅된게 아니여서, 알림으로 알수 없는 상황...(물론 특정 단어로 alert를 걸면되지만..그러면 CPU를 과도하게 사용하게 된다.)

일단 근본적인 문제를 해결해야 했다. 

 

저 에러는 무엇인가?

 

해답

https://github.com/grpc/grpc/issues?q=is%3Aissue%20state%3Aclosed%201.54

 

GitHub - grpc/grpc: C++ based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)

C++ based gRPC (C++, Python, Ruby, Objective-C, PHP, C#) - grpc/grpc

github.com

 

결론부터 말하자면 grpc가 ruby 버전의 충돌이였다. 추측으로는 이미지를 새롭게 빌드하면서 특정 패키지의 버전이 업데이트 되었고, 

거기에 사용하는 grpc 버전과 도커 이미지에서 사용하는 ruby 버전이 충돌난것으로 추측하고 있다. 

(추측이라 쓴건..사실 패키지 버전이 아무것도 변경되지 않았기 때문이다.. 특정 패키지의 패키지의 패키지가 변경된거라 추측하고 있다. )

설치된 grpc 버전은  1.74.0으로  google-protobuf 3.25 이상 5.0 미만을 요구하는데, 현재 환경에는 이 버전이 설치되지 않았거나 충돌하는 버전이 설치되어 있었고, 

 

1. ruby 버전을 조정하거나 -> 모든 패키지 점검 필요 

2. grpc 버전을 낮추거나 -> grpc만 버전 명시로 설치

 

로 되어 2번째 grpc만 설치하도록 했는데...

 

일단 dockerfile에서 gem install 로 버전을 명시했지만, 계속 최신 버전이 설치되었다. (명시를 했는데도!!!)

Gemfile로 설치하면 해당 버전이 고정되어 Gemfile을 통해서 설치했다. 

 

 

 

dockerfile

# grpc 설치시 필요 패키지들
RUN apt-get update && apt-get install -y \
  build-essential liblz4-dev libprotobuf-dev protobuf-compiler ruby-dev \
  autoconf libtool pkg-config cmake vim

# Gemfile을 복사
COPY Gemfile /fluentd/Gemfile

# bundler 설치 및 gem install
RUN gem install bundler:2.4.22 \
 && cd /fluentd \
 && bundle lock --add-platform x86_64-linux \
 && bundle config set system 'true' \
 && bundle install

 

 

Gemfile

source "https://rubygems.org"

gem "grpc", "1.54.0"

 

 

이렇게 추가해줬다. (덤으로 dockerfile에 있던 gem 패키지 설치 부분을 전부 Gemfile로 옮겨서 더욱 깔끔해졌다.)

문제는 Gemfile로 설치시에는 로그가 상세하게 보이지 않아. 가끔씩 빌드가 멈춰있는걸로 보이는 경우가 잇었다. (아마 옵션이 있을거라 생각하는데...ruby쪽은 잘 모르겠다.)

 

 

 

패키지 만으로 이 사단이 나고, 빌드 시간이 1분에서 10분정도로 길어졌고, 사용하는 패키지가 멀티스레드 + 멀티프로세스도 지원하지 않아..썩 만족스럽지 못한 fluentd 경험을 하고 있다. 

특히 패키지 관리가 전혀 완되고 있어서 특정 패키지는 10년이 넘도록 업데이트 안되는것도 많이 봐왔다. 

아마 다음번에는 fluentd 말고 다른걸 쓰지 않을까 생각한다. 

 

'server > kafka' 카테고리의 다른 글

Kafka producer/consumer 튜닝 (acks, batch.size, linger.ms 등)  (2) 2025.08.08
kafka-reassign-partitions  (3) 2025.07.30
ksqldb  (1) 2025.07.17
kafka reset offset  (0) 2025.07.13
ELK 실습  (0) 2025.04.28