Skip to content

Instantly share code, notes, and snippets.

@charsyam
Created June 16, 2025 14:43
Show Gist options
  • Save charsyam/dc307383e3ab5aec2e0582a74ae78f40 to your computer and use it in GitHub Desktop.
Save charsyam/dc307383e3ab5aec2e0582a74ae78f40 to your computer and use it in GitHub Desktop.
# 모니터링 시스템
이 프로젝트는 FastAPI와 Celery를 사용한 모니터링 시스템입니다.
## 프로젝트 구조
```
.
├── app/
│ ├── __init__.py
│ ├── celery_app.py # Celery 설정
│ ├── collector.py # 데이터 수집기
│ ├── main.py # FastAPI 애플리케이션
│ ├── models.py # 데이터 모델
│ └── schemas.py # Pydantic 스키마
├── static/ # 정적 웹 파일
│ ├── index.html # 메인 페이지
│ ├── css/ # CSS 파일
│ ├── js/ # JavaScript 파일
│ └── assets/ # 이미지 등 기타 자산
├── requirements.txt # 프로젝트 의존성
└── README.md # 프로젝트 문서
```
## 환경 설정
### PYTHONPATH 설정
프로젝트 루트 디렉토리를 PYTHONPATH에 추가해야 합니다. 다음 방법 중 하나를 선택하여 설정하세요:
1. 임시 설정 (현재 터미널 세션에만 적용)
```bash
export PYTHONPATH=$PYTHONPATH:$(pwd)
```
2. 영구 설정 (zsh 사용 시)
```bash
echo 'export PYTHONPATH=$PYTHONPATH:$(pwd)' >> ~/.zshrc
source ~/.zshrc
```
3. 영구 설정 (bash 사용 시)
```bash
echo 'export PYTHONPATH=$PYTHONPATH:$(pwd)' >> ~/.bashrc
source ~/.bashrc
```
## 주요 모듈 설명
### 1. FastAPI 애플리케이션 (app/main.py)
- 웹 서버의 메인 애플리케이션
- API 엔드포인트 정의
- 데이터 조회 및 관리 기능 제공
- 정적 웹 파일 서빙
- JSON API 제공
### 2. Celery 설정 (app/celery_app.py)
- Celery 워커 설정
- 태스크 큐 설정
- 비동기 작업 처리
### 3. 데이터 수집기 (app/collector.py)
- 주기적인 데이터 수집
- 시스템 메트릭 수집
- 데이터베이스 저장
### 4. 데이터 모델 (app/models.py)
- 데이터베이스 모델 정의
- SQLAlchemy ORM 모델
### 5. 스키마 (app/schemas.py)
- API 요청/응답 데이터 검증
- Pydantic 모델 정의
## 실행 방법
### 1. 의존성 설치
```bash
pip install -r requirements.txt
```
### 2. Celery Worker 실행
```bash
./celery_app/run_worker.sh
```
### 3. Celery Beat 실행 (주기적 작업)
```bash
./celery_app/run_beat.sh
```
### 4. FastAPI 서버 실행
기본 실행 (localhost에서만 접근 가능):
```bash
uvicorn app.main:app --reload --host 127.0.0.1 --port 8000
```
외부에서 접근 가능하도록 실행:
```bash
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
```
> **Note:**
> - Celery Worker와 Beat는 프로젝트 루트 디렉토리에서 실행해야 합니다.
> - 각 Celery 스크립트는 별도의 터미널에서 실행하세요.
서버가 실행되면 다음 URL에서 접근할 수 있습니다:
- 웹 인터페이스: http://localhost:8000
- API 문서: http://localhost:8000/docs
- 대체 API 문서: http://localhost:8000/redoc
## 웹 인터페이스
웹 인터페이스는 순수 HTML, CSS, JavaScript로 구현되어 있으며, FastAPI 서버에서 직접 서빙됩니다. 주요 기능:
- 로그인 화면: 사용자가 로그인 토큰이 없으면 처음에는 로그인 화면이 표시됩니다.
- 그룹 대시보드: 로그인 후에는 그룹 대시보드가 표시됩니다.
- 실시간 메트릭 모니터링
- 메트릭 히스토리 차트
- 시스템 상태 대시보드
## API 엔드포인트
모든 API는 JSON 형식으로 응답합니다:
- `GET /`: 웹 인터페이스 메인 페이지 (로그인 화면 또는 그룹 대시보드)
- `GET /api/health`: API 상태 확인
- `GET /api/metrics`: 수집된 메트릭 조회
- `GET /api/metrics/{metric_id}`: 특정 메트릭 상세 정보
- `GET /api/metrics/history`: 메트릭 히스토리 조회
API 응답 예시:
```json
{
"status": "success",
"data": {
"metrics": [
{
"id": "cpu_usage",
"value": 45.2,
"timestamp": "2024-03-14T12:00:00Z"
},
{
"id": "memory_usage",
"value": 60.5,
"timestamp": "2024-03-14T12:00:00Z"
}
]
}
}
```
## API 사용 예시
### curl을 사용한 API 호출
```bash
# 상태 확인
curl http://localhost:8000/api/health
# 메트릭 조회
curl http://localhost:8000/api/metrics
# 특정 메트릭 조회
curl http://localhost:8000/api/metrics/cpu_usage
```
### JavaScript를 사용한 API 호출
```javascript
// API 기본 URL
const BASE_URL = "http://localhost:8000/api";
// 메트릭 조회
async function fetchMetrics() {
const response = await fetch(`${BASE_URL}/metrics`);
const data = await response.json();
return data;
}
// 특정 메트릭 조회
async function fetchMetric(metricId) {
const response = await fetch(`${BASE_URL}/metrics/${metricId}`);
const data = await response.json();
return data;
}
```
## 주의사항
1. Celery Worker와 Beat는 별도의 터미널에서 실행해야 합니다.
2. 데이터베이스 연결 설정이 올바르게 되어있는지 확인하세요.
3. 환경 변수 설정이 필요한 경우 `.env` 파일을 생성하여 설정하세요.
4. PYTHONPATH가 올바르게 설정되어 있는지 확인하세요. 설정이 되어있지 않으면 모듈을 찾지 못하는 오류가 발생할 수 있습니다.
5. FastAPI 서버 실행 시 `--host`와 `--port` 옵션을 확인하세요. 외부에서 접근하려면 `--host 0.0.0.0`을 사용해야 합니다.
6. API 응답은 항상 JSON 형식이며, 에러 발생 시에도 JSON 형식으로 에러 메시지가 반환됩니다.
7. 웹 인터페이스는 `static` 디렉토리의 파일을 사용하므로, 파일 수정 시 서버를 재시작할 필요가 없습니다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment