개발자는 기록이 답이다

AWS health check + Slack 본문

DevOps/AWS

AWS health check + Slack

slow-walker 2024. 2. 28. 22:45

ECR,ECS로 배포한 서버의 DNS로 접속시, 메인 라우터로 로그가 나오게 한 뒤 슬랙알람으로 연동했는데,

로그가 계속 연속으로 쌓이는 문제가 발생했습니다.

처음에는 DNS를 랜덤하게 라우팅 받아서 포트스캐닝하는 해킹 시도인 줄 알고,

보안인증서 SSL적용을 해야하나, 팀원들 ip로만 포트를 열어야 되나 고민했었는데,

헬스체킹으로 인한 AWS의 DNS접속 시도라고 판단되어 관련 문제를 해결한 포스팅을 작성하려고 합니다


1. 문제 상황

CloudWatch logs에 몇 초마다 끊임없이 생기는 로그때문에 슬랙알람도 계속 오고 있었습니다.

이런 상황은 불필요한 로그와 알람으로 aws과금 문제가 발생할 수 있기 때문에 해결해야 했습니다.

 

2. 헬스 체크용 라우터 vs 메인 라우터 코드 분리

@Get() getHello(): { statusCode: number; data: string } { const logger = new Logger('application.app.controller') logger.info('안녕하세요', '대문입니다.') const data = this.appService.getHello(); return { statusCode: 200, data }; } @Get('/health') getHealth(): { statusCode: number; data: string } { const logger = new Logger('application.app.controller') logger.info('Health check', '서비스 정상 동작 확인') return { statusCode: 200, data: 'Health check passed!' }; }

3. AWS 콘솔에서 헬스체크 path 변경

  • EC2 대시보드에서 "로드 밸런서"를 클릭
  • 로드 밸런서 목록에서 원하는 로드 밸런서를 선택
  • 선택한 로드 밸런서의 상세 페이지에서"리스너" 탭을 클릭
  • 리스너 탭에서 로드 밸런서에 연결된 리스너를 선택
  • 선택한 리스너의 상세 정보에서 대상그룹 선택
  • Health checks에서 Path확인 (헬스체크 라우터로 안되어있다면 편집으로 수정)

4. CloudWatch Log에서 로그 확인해보기

예상대로 해킹시도가 아니라 헬스체크를 위한 접속이었습니다.

로드 밸런서가 헬스 체크로 설정된 경로로 요청을 주기적으로 보내고 응답을 확인하는 경우, 해당 경로에 대한 요청이 지속적으로 발생할 수 있습니다. 따라서 해당 경로에 대한 로그가 계속 찍히게 될 수 있습니다.

헬스 체크로드 밸런서가 관리하는 서버의 상태를 모니터링하고, 비정상적인 상태로 판단되는 경우 해당 서버를 제외하고 트래픽을 분산하는 역할을 수행합니다. 따라서 헬스 체크 요청은 정상적인 트래픽과 동일한 방식으로 로드 밸런서에서 발생하며, 이로 인해 해당 경로로의 요청이 로그에 찍힐 수 있습니다.

이처럼 해당 로그가 너무 많이 찍힌다면 헬스 체크 간격을 늘리거나, 헬스 체크에 사용되는 경로를 다른 경로로 변경하는 등의 방법을 고려하여 로그의 양을 조절할 수 있습니다. 또는 로드 밸런서의 헬스 체크를 비활성화하여 해당 경로로의 요청이 로그에 찍히지 않도록 할 수도 있습니다.