헬스 체크
GitLab v19.5Offering: GitLab Self-Managed
요약
GitLab은 서비스 상태와 필수 서비스로의 연결 가능 여부를 나타내는 활성 상태 및 준비 상태 프로브를 제공합니다. 헬스 체크 엔드포인트는 주로 트래픽을 전달하기 전에 서비스 가용성을 판단해야 하는 로드 밸런서와 그 밖의 Kubernetes 스케줄링 시스템에서 사용합니다.
GitLab은 서비스 상태와 필수 서비스로의 연결 가능 여부를 나타내는 활성 상태 및 준비 상태 프로브를 제공합니다. 이 프로브는 데이터베이스 연결, Redis 연결, 파일 시스템 액세스 상태를 보고합니다. 이 엔드포인트는 Kubernetes와 같은 스케줄러에 제공하여 시스템이 준비될 때까지 트래픽을 보류하거나 필요에 따라 컨테이너를 재시작할 수 있습니다.
헬스 체크 엔드포인트는 주로 트래픽을 전달하기 전에 서비스 가용성을 판단해야 하는 로드 밸런서와 그 밖의 Kubernetes 스케줄링 시스템에서 사용합니다.
대규모 Kubernetes 배포에서 실질 가동 시간을 판단하는 용도로는 이 엔드포인트를 사용하지 않아야 합니다. 그렇게 하면 자동 크기 조정, 노드 장애, 또는 그 밖의 정상적이고 중단을 일으키지 않는 운영 사유로 Pod가 제거될 때 거짓 음성이 나타날 수 있습니다.
대규모 Kubernetes 배포에서 가동 시간을 판단하려면 UI로 향하는 트래픽을
확인합니다. 이 트래픽은 적절히 분산되고 스케줄링되므로 실질 가동 시간을 더 잘
나타냅니다. 로그인 페이지 /users/sign_in 엔드포인트를 모니터링할 수도
있습니다.
GitLab.com에서는 Pingdom과 같은 도구와 Apdex 측정값으로 가동 시간을 판단합니다.
IP 허용 목록#
모니터링 리소스에 액세스하려면 요청하는 클라이언트 IP가 허용 목록에 포함되어야 합니다. 자세한 내용은 모니터링 엔드포인트의 허용 목록에 IP를 추가하는 방법을 참고합니다.
로컬에서 엔드포인트 사용#
기본 허용 목록 설정에서는 다음 URL로 localhost에서 프로브에 액세스할 수 있습니다.
GET http://localhost/-/health
GET http://localhost/health_check
GET http://localhost/-/readiness
GET http://localhost/-/liveness
헬스#
애플리케이션 서버가 실행 중인지 확인합니다.
데이터베이스나 다른 서비스가 실행 중인지는 검증하지
않습니다. 이 엔드포인트는 Rails 컨트롤러를 우회하며
요청 처리 수명 주기의 아주 이른 시점에 추가 미들웨어
BasicHealthCheck로 구현되어 있습니다.
GET /-/health
요청 예시:
curl "https://gitlab.example.com/-/health"
응답 예시:
GitLab OK
포괄적 헬스 체크#
로드 밸런싱이나 자동 크기 조정에 /health_check를 사용하지 않아야 합니다. 이 엔드포인트는 백엔드 서비스(데이터베이스, Redis)를 검증하므로, 해당 서비스가 느리거나 사용할 수 없으면 애플리케이션이 정상 동작하더라도 실패합니다. 이 때문에 정상적인 애플리케이션 노드가 로드 밸런서에서 불필요하게 제거될 수 있습니다.
/health_check 엔드포인트는 데이터베이스 연결, Redis 가용성, 그 밖의 백엔드 서비스를 포함한 포괄적인 헬스 체크를 수행합니다. health_check gem이 제공하며 애플리케이션 스택 전체를 검증합니다.
다음 용도로 이 엔드포인트를 사용합니다.
- 포괄적인 애플리케이션 모니터링
- 백엔드 서비스 상태 검증
- 연결 문제 해결
- 모니터링 대시보드 및 알림
GET /health_check
GET /health_check/database
GET /health_check/cache
GET /health_check/migrations
요청 예시:
curl "https://gitlab.example.com/health_check"
응답 예시(성공):
success
응답 예시(실패):
health_check failed: Unable to connect to database
사용 가능한 검사:
database- 데이터베이스 연결migrations- 데이터베이스 마이그레이션 상태cache- Redis 캐시 연결geo(EE 전용) - Geo 복제 상태
준비 상태#
준비 상태 프로브는 GitLab 인스턴스가 Rails 컨트롤러를 통해 트래픽을 받을 준비가 되었는지 확인합니다. 기본적으로 이 검사는 인스턴스 검사만 수행합니다.
all=1 파라미터를 지정하면 종속 서비스(데이터베이스, Redis,
Gitaly 등)까지 검증하고
각각의 상태를 함께 반환합니다.
GET /-/readiness
GET /-/readiness?all=1
요청 예시:
curl "https://gitlab.example.com/-/readiness"
응답 예시:
{
"master_check":[{
"status":"failed",
"message": "unexpected Master check result: false"
}],
...
}
실패하면 엔드포인트는 503 HTTP 상태 코드를 반환합니다.
이 검사는 Rack Attack에서 제외됩니다.
활성 상태#
GitLab 12.4에서 활성 상태 검사의 응답 본문이 아래 예시와 같이 변경되었습니다.
애플리케이션 서버가 실행 중인지 확인합니다. 이 프로브는 멀티스레딩으로 인해 Rails 컨트롤러가 교착 상태에 빠지지 않았는지 확인하는 데 사용합니다.
GET /-/liveness
요청 예시:
curl "https://gitlab.example.com/-/liveness"
응답 예시:
성공하면 엔드포인트는 200 HTTP 상태 코드와 함께 다음과 같은 응답을 반환합니다.
{
"status": "ok"
}
실패하면 엔드포인트는 503 HTTP 상태 코드를 반환합니다.
이 검사는 Rack Attack에서 제외됩니다.
Sidekiq#
Sidekiq 헬스 체크 구성 방법을 참고합니다.