실제 API 요청에서 문제가 발생함을 인지하는 경우
서버에서 API 요청에 대해서 정상적인 응답이 되는지를 확인하는 방식으로 실제 API 요청이 없는 상황에서는 서버가 다운되었는지 확인할 수 없음.
Sentry
주기적으로 서버에 요청을 보내 서버 헬스체크
요청을 보내는 Endpoint가 서버를 얼마나 대표하는지에 따라 달라질 수 있다는 특징을 가짐.
Github Actions
AWS LoadBalancer
BetterStack
서버에 설치된 에이전트가 서버 내부 상태 정보를 수집하여 체크하는 방식으로, 세밀한 서버 정보를 수집 가능
대규모 서버에서 주로 사용
Promethus
Datadog
name: "Release Health Check"
on:
# 매 3시간마다 수행
schedule:
- cron: "0 */3 * * *"
jobs:
healthcheck:
# ubuntu 버전 지정
runs-on: ubuntu-22.04
steps:
# 릴리즈 서버 헬스 체크 진행
- name: Release API Health Check
uses: jtalk/url-health-check-action@v3
with:
url: ${{ secrets.RELEASE_URI }}
max-attempts: 3 # 시도 횟수
retry-delay: 1s # 시도 간격
Github Marketplace에 올라와있는 스크립트를 기반으로 작성했다.
${{ secrets.BASEURI }}는 Github Actions의 secrets에 서버 주소를 등록해놓으면 된다.
# 헬스 체크 결과 슬랙으로 연동
- name: action-slack
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
author_name: Github Action Health Check
fields: repo,message,commit,action,eventName,ref,workflow,job,took # 보낼 정보들
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEB_HOOK_URL }} # required
if: always() # 스크립트 성공/실패 여부에 상관없이 항상 수행되도록 설정
위 코드를 헬스 체크 워크 플로우 마지막에 추가하면 된다.
위의 이미지와 같이 동작한다. (출처: 스크립트, 2023-11-17)
Slack의 알림을 받을 WEBHOOK_URL은 아래와 같은 방법으로 확인하면 된다.
Github Marketplace에는 다양한 Slack 알림 관련 스크립트들가 많으니, 입맛에 맞게 활용하면 될 것 같다.
workflow_dispatch: 를 schedule 하단에 선언해서 적용하면 첫 workflow의 실행을 진행시킬 수 있다.
위와 같이 계속 오류가 발생했었다.
Scripts 내에 자동으로 잡힌 Github Token이 권한이 없어서 발생한 문제였다.
권한이 있는 Github Token 생성하여 Secrets로 포함시켜서 전달할 수 있도록 변경하였다.
아래의 코드를 slack과 관련된 step에서 with의 하위 항목에 추가하면 된다.
github_token: ${{ secrets.ACCESS_TOKEN_GIT }}
레퍼런스