Root Health 서비스
Root Health 서비스는 백엔드를 위한 몇 가지 헬스 체크 엔드포인트를 제공해요. 기본적으로 rootHttpRouter는 /.backstage/health/v1/readiness와 /.backstage/health/v1/liveness 엔드포인트를 노출하며, 이 엔드포인트는 Root Health 서비스 구현에 따른 백엔드 서비스 상태를 담은 JSON 객체를 반환해요.
출처: 문서
본문
Root Health 서비스는 백엔드를 위한 몇 가지 헬스 체크 엔드포인트를 제공해요. 기본적으로 rootHttpRouter는 /.backstage/health/v1/readiness와 /.backstage/health/v1/liveness 엔드포인트를 노출하며, 이 엔드포인트는 Root Health 서비스 구현에 따른 백엔드 서비스 상태를 담은 JSON 객체를 반환해요.
서비스 구성하기
다음 예시는 root health 서비스 구현을 덮어쓰는 방법을 보여줘요.
import {
RootHealthService,
coreServices,
createServiceFactory,
} from '@backstage/backend-plugin-api';
const backend = createBackend();
class MyRootHealthService implements RootHealthService {
async getLiveness() {
// provide your own implementation
return { status: 200, payload: { status: 'ok' } };
}
async getReadiness() {
// provide your own implementation
return { status: 200, payload: { status: 'ok' } };
}
}
backend.add(
createServiceFactory({
service: coreServices.rootHealth,
deps: {},
async factory() {
return new MyRootHealthService();
},
}),
);
헬스 체크 응답의 사용자 지정 헤더
root health 서비스 자체에는 직접 구현되어 있지 않지만, RootHttpRouter 서비스의 기본 구현에는 헬스 체크 응답에 포함할 추가 헤더를 설정하는 구성 옵션이 있어요. 예를 들어 다음 구성으로 service-name 헤더를 추가할 수 있어요.
backend:
health:
headers:
service-name: my-service
멀티 서비스 환경에서 서비스를 고유하게 식별하는 헤더를 헬스 체크 응답에 설정하는 것이 좋아요. 이렇게 하면 서비스에 대해 구성된 헬스 체크가 다른 서비스가 아닌 실제로 내 서비스에 도달한다는 것을 보장할 수 있어요.
예를 들어 Envoy를 사용한다면 service_name_matcher 구성과 함께 x-envoy-upstream-healthchecked-cluster 헤더에 일치하는 값을 설정할 수 있어요. 예를 들어 다음과 같아요.
backend:
health:
headers:
x-envoy-upstream-healthchecked-cluster: my-service