← 전체 글로 돌아가기

서버 운영

서버 헬스 체크가 실패할 때 빨리 확인하는 방법

서버 운영 중 헬스 체크 문제를 단계별로 진단하는 순서를 정리했습니다.

서버 헬스 체크가 계속 실패하면 대부분의 원인은 세 가지 중 하나다. 프로세스가 죽었거나, 포트를 리스닝하지 않거나, 응답이 느려서다.

프로세스와 포트 상태

먼저 서비스가 정말로 실행 중인지 확인한다.

sudo ss -lntp | grep :3000
ps aux | grep service-name
sudo systemctl status service-name

ss 명령으로 포트가 LISTEN 상태인지 확인하고, systemctl로 서비스의 전체 상태를 본다. 만약 failed 상태라면 로그를 봐야 한다.

디스크와 메모리 상태

df -h
free -h
du -sh /var/log/*

디스크가 거의 찼거나 메모리가 부족하면 프로세스가 갑자기 죽을 수 있다. 특히 /var/log가 커져 있으면 로그 로테이션을 확인해야 한다.

실제 헬스 체크 응답

curl http://localhost:3000/health
curl -v http://localhost:3000/health

-v 플래그로 응답 헤더와 시간을 확인한다. 타임아웃되고 있는지, 잘못된 상태 코드를 반환하고 있는지, 응답 시간이 너무 긴지 판단할 수 있다.

시간대와 주기적인 문제

특정 시간대에만 헬스 체크가 실패한다면 배치 작업이나 백업 프로세스 때문일 수 있다.

sudo journalctl -n 100
sudo journalctl -u service-name -n 50

전체 시스템 로그와 특정 서비스 로그를 확인해서 실패 시점과 다른 이벤트의 연관성을 본다.

수정 후 확인

  1. 현재 프로세스, 포트, 리소스 상태를 기록한다
  2. 하나의 문제만 수정한다 (예: 로그 파일 삭제)
  3. 서비스를 재시작하고 헬스 체크를 다시 실행한다
  4. 이전과 달라진 부분을 명확히 한다

서버 문제는 한 번에 여러 곳을 고치면 다음 번 디버깅이 훨씬 어려워진다.