LLM Gateway Health check 추가
Some checks failed
API Health Check / health-check (push) Failing after 43s
Some checks failed
API Health Check / health-check (push) Failing after 43s
This commit is contained in:
35
.gitea/workflows/health_check.yml
Normal file
35
.gitea/workflows/health_check.yml
Normal file
@@ -0,0 +1,35 @@
|
||||
name: API Health Check
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '* * * * *'
|
||||
|
||||
jobs:
|
||||
health-check:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check API Health and Notify on Failure
|
||||
run: |
|
||||
success=false
|
||||
for i in $(seq 1 5); do
|
||||
response=$(curl -s -o /dev/null -w "%{\http_code}" http://172.16.10.176:8888/health/API)
|
||||
content=$(curl -s http://172.16.10.176:8888/health/API)
|
||||
|
||||
if [ "$response" -eq 200 ] && echo "$content" | grep -q "ok"; then
|
||||
echo "API is healthy (Attempt $i)."
|
||||
success=true
|
||||
break
|
||||
else
|
||||
echo "API health check failed (Attempt $i). HTTP Status: $response, Content: $content"
|
||||
if [ $i -lt 5 ]; then
|
||||
sleep 10 # Wait for 10 seconds before retrying
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$success" = "false" ]; then
|
||||
echo "API health check failed after 5 attempts. Sending notification to Mattermost."
|
||||
curl -i -X POST -H 'Content-Type: application/json' -d '{"text": "## 🚨 API 상태 확인 실패\n**엔드포인트:** `http://172.16.10.176:8888/health/API`\n\nAPI가 5번의 시도에 응답하지 않습니다. 확인이 필요합니다."}' ${{ secrets.MATTERMOST_WEBHOOK }}
|
||||
exit 1
|
||||
fi
|
||||
|
||||
33
README.md
33
README.md
@@ -8,12 +8,17 @@ Grafana, Prometheus, Loki 등에서 수집된 데이터를 기반으로 주기
|
||||
- **자동 리포트 생성**: 지정된 Grafana 대시보드의 패널 쿼리를 실행하여 데이터를 요약하고 리포트를 생성합니다.
|
||||
- **다양한 출력 형식**: 텍스트(Text) 및 테이블(Table) 형식의 리포트를 지원합니다.
|
||||
- **Mattermost 통합**: 생성된 리포트를 지정된 Mattermost 웹훅을 통해 자동으로 전송합니다.
|
||||
- **API 상태 확인**: Gitea 워크플로우를 통해 주기적으로 API 상태를 확인하고 장애 발생 시 Mattermost로 알림을 전송합니다.
|
||||
- **유연한 설정**: `.env` 파일을 통해 Grafana URL, API 키, 대시보드 UID 등의 설정을 쉽게 변경할 수 있습니다.
|
||||
|
||||
## 프로젝트 구조
|
||||
|
||||
```
|
||||
.
|
||||
├── .gitea/
|
||||
│ └── workflows/
|
||||
│ ├── main.yml # 주기적으로 테이블 리포트를 생성하는 Gitea 워크플로우
|
||||
│ └── health_check.yml # API 상태를 주기적으로 확인하는 Gitea 워크플로우
|
||||
├── src/
|
||||
│ ├── clients/ # Grafana, Loki, Prometheus API 클라이언트
|
||||
│ ├── services/ # 리포트 생성, 데이터 요약 등 핵심 비즈니스 로직
|
||||
@@ -27,6 +32,34 @@ Grafana, Prometheus, Loki 등에서 수집된 데이터를 기반으로 주기
|
||||
└── .env.example # 환경 변수 설정 예시 파일
|
||||
```
|
||||
|
||||
## 자동화 워크플로우
|
||||
|
||||
### 테이블 리포트 생성 (`.gitea/workflows/main.yml`)
|
||||
|
||||
- **목적**: 스케줄에 따라 자동으로 테이블 형식의 리포트를 생성하고 Mattermost로 전송합니다.
|
||||
- **동작**:
|
||||
- 매일 15:00 UTC (`cron: '0 15 * * *'`)에 자동으로 실행됩니다.
|
||||
- 월요일에는 지난 7일간의 데이터를 요약(`run_table.sh 7d`), 그 외 요일에는 지난 24시간의 데이터를 요약(`run_table.sh 24h`)하여 리포트를 생성합니다.
|
||||
- 실행 로그는 `report-logs`라는 이름의 아티팩트로 저장되어 워크플로우 실행 결과에서 다운로드할 수 있습니다.
|
||||
- **필수 설정**:
|
||||
- Gitea 저장소의 `Settings > Secrets` 및 `Settings > Actions`에 다음 변수들이 등록되어 있어야 합니다.
|
||||
- `GRAFANA_URL`
|
||||
- `GRAFANA_API_KEY` (Secret)
|
||||
- `MATTERMOST_WEBHOOK`
|
||||
- `GRAFANA_DASHBOARD_UID`
|
||||
|
||||
### API 상태 확인 (`.gitea/workflows/health_check.yml`)
|
||||
|
||||
- **목적**: 특정 API 엔드포인트(`http://172.16.10.176:8888/health/API`)가 정상적으로 작동하는지 주기적으로 확인합니다.
|
||||
- **동작**:
|
||||
- 1분마다 (`cron: '* * * * *'`) 스케줄에 따라 자동으로 실행됩니다.
|
||||
- `curl` 명령을 통해 API에 HTTP 요청을 보냅니다.
|
||||
- 응답이 `200 OK`가 아니거나 응답 내용에 "ok"가 포함되지 않으면 실패로 간주합니다.
|
||||
- 실패 시 10초 간격으로 최대 5번까지 재시도합니다.
|
||||
- 5번 연속 실패하면 Mattermost로 장애 알림 메시지를 전송합니다.
|
||||
- **필수 설정**:
|
||||
- Gitea 저장소의 `Settings > Secrets`에 `MATTERMOST_WEBHOOK`이라는 이름으로 Mattermost 웹훅 URL이 등록되어 있어야 합니다.
|
||||
|
||||
## 시작하기
|
||||
|
||||
### 1. 사전 요구사항
|
||||
|
||||
Reference in New Issue
Block a user