서버 운영
서버 헬스 체크가 실패할 때 빨리 확인하는 방법
서버 운영 중 헬스 체크 문제를 단계별로 진단하는 순서를 정리했습니다.
서버 헬스 체크가 계속 실패하면 대부분의 원인은 세 가지 중 하나다. 프로세스가 죽었거나, 포트를 리스닝하지 않거나, 응답이 느려서다.
프로세스와 포트 상태
먼저 서비스가 정말로 실행 중인지 확인한다.
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
전체 시스템 로그와 특정 서비스 로그를 확인해서 실패 시점과 다른 이벤트의 연관성을 본다.
수정 후 확인
- 현재 프로세스, 포트, 리소스 상태를 기록한다
- 하나의 문제만 수정한다 (예: 로그 파일 삭제)
- 서비스를 재시작하고 헬스 체크를 다시 실행한다
- 이전과 달라진 부분을 명확히 한다
서버 문제는 한 번에 여러 곳을 고치면 다음 번 디버깅이 훨씬 어려워진다.