Created
June 16, 2025 14:43
-
-
Save charsyam/dc307383e3ab5aec2e0582a74ae78f40 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 모니터링 시스템 | |
이 프로젝트는 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