InfoGrab DocsInfoGrab Docs

헬스 체크

요약

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

포괄적 헬스 체크#

Warning

로드 밸런싱이나 자동 크기 조정에 /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에서 제외됩니다.

활성 상태#

Warning

GitLab 12.4에서 활성 상태 검사의 응답 본문이 아래 예시와 같이 변경되었습니다.

애플리케이션 서버가 실행 중인지 확인합니다. 이 프로브는 멀티스레딩으로 인해 Rails 컨트롤러가 교착 상태에 빠지지 않았는지 확인하는 데 사용합니다.

GET /-/liveness

요청 예시:

curl "https://gitlab.example.com/-/liveness"

응답 예시:

성공하면 엔드포인트는 200 HTTP 상태 코드와 함께 다음과 같은 응답을 반환합니다.

{
   "status": "ok"
}

실패하면 엔드포인트는 503 HTTP 상태 코드를 반환합니다.

이 검사는 Rack Attack에서 제외됩니다.

Sidekiq#

Sidekiq 헬스 체크 구성 방법을 참고합니다.

헬스 체크

GitLab v19.5
Tier: Free, Premium, Ultimate
Offering: 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

포괄적 헬스 체크#

Warning

로드 밸런싱이나 자동 크기 조정에 /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에서 제외됩니다.

활성 상태#

Warning

GitLab 12.4에서 활성 상태 검사의 응답 본문이 아래 예시와 같이 변경되었습니다.

애플리케이션 서버가 실행 중인지 확인합니다. 이 프로브는 멀티스레딩으로 인해 Rails 컨트롤러가 교착 상태에 빠지지 않았는지 확인하는 데 사용합니다.

GET /-/liveness

요청 예시:

curl "https://gitlab.example.com/-/liveness"

응답 예시:

성공하면 엔드포인트는 200 HTTP 상태 코드와 함께 다음과 같은 응답을 반환합니다.

{
   "status": "ok"
}

실패하면 엔드포인트는 503 HTTP 상태 코드를 반환합니다.

이 검사는 Rack Attack에서 제외됩니다.

Sidekiq#

Sidekiq 헬스 체크 구성 방법을 참고합니다.