Calico 트러블슈팅 가이드: BIRD 프로세스에 SIGUSR1 신호 보내기

Calico를 사용하는 환경에서 BIRD 프로세스에 문제가 발생하면 라우팅 정보가 제대로 전달되지 않아 네트워크 성능 저하나 장애가 발생할 수 있다. 이러한 상황을 진단하기 위해 BIRD 프로세스의 상태를 분석하는 것이 중요한데, 이를 위해 SIGUSR1 신호를 보내면 BIRD의 상세 상태와 라우팅 테이블 정보를 덤프할 수 있다. 이 글에서는 호스트에서 컨테이너 내부의 BIRD 프로세스에 SIGUSR1 신호를 보내는 방법을 단계별로 설명한다.

 

호스트에서 BIRD 프로세스 찾기

우선 호스트에서 pidof 명령어를 사용해 BIRD 프로세스의 PID를 찾는다.

pidof bird
 

이렇게 하면 호스트에서 BIRD 프로세스의 PID를 얻을 수 있다.

 

컨테이너 내부의 PID 찾기

다음으로, 해당 PID를 사용하여 /proc/<pid>/status 파일을 확인한다. 이 파일에서 NSpid 항목을 찾으면 컨테이너 내부의 PID를 확인할 수 있다.

$ cat /proc/<host_pid>/status | grep NSpid 
# NSpid: 26617(host의 pid) 383 (컨테이너에서의 Pid)

출력된 NSpid의 두 번째 값이 컨테이너 내부에서의 PID다.

 

실제로 확인해보았을 때

 

 

SIGUSR1 신호 전송

컨테이너 내부의 PID를 찾았다면 이제 SIGUSR1 신호를 컨테이너 내부에서 보낼 수 있다.

(+참고로 호스트 노드에서 직접 프로세스 ID에 SIGUSR1 신호를 보내도 제대로 신호전달이 되는 것 같아서 굳이 컨테이너 내부 PID 값을 찾을 필요는 없다. 하다보니 나중에 알게된 정보..)

# 컨테이너 내부에서 실행
kill -SIGUSR1 <pid>
 
로그 확인

이렇게 하면 해당 노드에 실행 중인 calico-node 컨테이너의 stdout 로그에서 덤프 로그를 확인할 수 있다.

만약 로그가 잘 보이지 않는다면, 다른 노드에 실행 중인 calico-node에서 로그를 확인하면 잘 나올 수 있다. 아마도 BIRD 프로세스에 이상이 있을 때는 덤프가 제대로 생성되지 않는 것 같다.

로그의 모습