헬스 체크( Health check)
- 서버 운영중 트래픽이 증가하여 DB에 부하가 생기거나 네트워크 연결에 장애가 발생할 수 있음
- 서버는 HTTP, DB, 메모리, 디스크 상태 등을 체크하는 헬스 체크 장치가 있어야함
- 상태가 좋지 않은경우 슬랙같은 메신저를 통해 서버 상태를 파악하고 에러 메세지를 전송해야함
- 모니터링 전략을 세워 서버의 상태를 파악해야함
헬스 체크 라이브러리
- Nest는 Terminus(@nestjs/terminus) 헬스 체크 라이브러리를 제공함
- Terminus는 다양한 상태 표시기 health indicator를 제공함
- HttpHealthIndicator
- MongooseHealthInicator
- TypeOrmHealthIndicator
- SequelizeHealthIndicator
- MicroServiceHealthIndicator
- MemoryHealthIndicator
- GRPCHealthIndicator
- DiskHealthIndicator
라이브러리 설치
npm i @nestjs/terminus
헬스 체크 컨트롤러
- 상태확인은 특정 라우터 엔드포인트에 요청을 보내고 응답을 확인하는 방법을 사용
- HttpHealthIndicator가 제공하는 pingCheck함수를 이룔하여 서비스가 제공하는 다른 서버가 잘 동작하고 있는지 확인
- pingCheck함수 첫번째 인자로는 nestjs-docs로 응답을 받는 객체
- 두번째 인자로는 요청을 보낼 url 주소 ex) https://www.naver.com/
import { Controller, Get } from '@nestjs/common';
import {
HealthCheckService,
HttpHealthIndicator,
HealthCheck,
TypeOrmHealthIndicator,
} from '@nestjs/terminus';
import { DogHealthIndicator } from './dog.health';
//healthc-check 컨트롤러 생성
@Controller('health-check')
export class HealthCheckController {
constructor(
private health: HealthCheckService,
private http: HttpHealthIndicator,
//컨트롤러에 typeOrmHealthindicator DI주입
private db: TypeOrmHealthIndicator,
private dogHealthIndicator: DogHealthIndicator,
) {}
@Get()
@HealthCheck()
check() {
return this.health.check([
//https://docs.nestjs.com에 요청을 보내서 응답을 잘 받으면 응답 결과를 ''nestjs-docs'로 응답
//상태값 up은 정상동작하는 상태
() => this.http.pingCheck('nestjs-docs', 'https://docs.nestjs.com'),
//데이터 베이스의 상태를 확인하는 헬스체크
() => this.db.pingCheck('database'),
//() => this.dogHealthIndicator.isHealthy('dog'),
]);
}
}
HttpHealthIndicator
- 동작과정에서 axios요청을 필요로함 axis는 HTTP 클라이언트 패키지로서 HTTP 네트워크 통신 구현
npm i @nestjs/axios
app.module.ts
- app.module에 httpModule을 추가하여 다른 컴포넌트에서도 사용가능 하도록 주입
import { HttpModule } from '@nestjs/axios';
@Module({
imports:[
...다른 모듈들
HttpModule]
})
요청/응답