diff --git a/app/main.py b/app/main.py index ecacf6c..4f51d58 100644 --- a/app/main.py +++ b/app/main.py @@ -3,6 +3,7 @@ import structlog from fastapi import FastAPI +from prometheus_fastapi_instrumentator import Instrumentator from redis.asyncio import Redis from app.core.config import settings @@ -40,12 +41,14 @@ async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]: lifespan=lifespan, ) +Instrumentator().instrument(app).expose(app) + setup_exception_handlers(app) app.include_router(user_router_v1, prefix='/api/v1', tags=['Users']) app.include_router(order_router_v1, prefix='/api/v1', tags=['Orders']) app.include_router(inventory_router_v1, prefix='/api/v1', tags=['Inventory']) -app.include_router(media_router_v1, prefix='/api/v1/media', tags=['Media']) +app.include_router(media_router_v1, prefix='/api/v1', tags=['Media']) @app.get('/health') diff --git a/app/services/media/routes.py b/app/services/media/routes.py index c42f659..23d3045 100644 --- a/app/services/media/routes.py +++ b/app/services/media/routes.py @@ -15,7 +15,7 @@ from app.services.user.models import User from app.shared.deps import get_current_user -router_v1 = APIRouter(prefix='/api/v1/media', tags=['Media']) +router_v1 = APIRouter(prefix='/media', tags=['Media']) @router_v1.post('/products/{product_id}/upload_url', response_model=ImageUploadResponse) diff --git a/docker-compose.yaml b/docker-compose.yaml index b996f19..76d8318 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -4,6 +4,8 @@ volumes: fairdrop-s3: fairdrop-app: fairdrop-gateway: + fairdrop-prometheus: + fairdrop-grafana: services: postgres: @@ -89,3 +91,24 @@ services: - '${GATEWAY_PORT}:80' volumes: - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro + + prometheus: + image: prom/prometheus:latest + container_name: prometheus_fairdrop + ports: + - '9090:9090' + volumes: + - ./infrastructure/prometheus/prometheus.yaml:/etc/prometheus/prometheus.yml:ro + - fairdrop-prometheus:/prometheus + depends_on: + - app + + grafana: + image: grafana/grafana:latest + container_name: grafana_fairdrop + ports: + - '3000:3000' + volumes: + - fairdrop-grafana:/var/lib/grafana + depends_on: + - prometheus diff --git a/infrastructure/prometheus/prometheus.yaml b/infrastructure/prometheus/prometheus.yaml new file mode 100644 index 0000000..e02499f --- /dev/null +++ b/infrastructure/prometheus/prometheus.yaml @@ -0,0 +1,7 @@ +global: + scrape_interval: 5s + +scrape_configs: + - job_name: 'fairdrop_fastapi_app' + static_configs: + - targets: ['app:8000']