Monitoring et logs (Fast API)

Le monitoring et les logs permettent de suivre le comportement de l’application, détecter les erreurs, analyser les performances et conserver un historique des événements.

FastAPI, étant basé sur Starlette, offre des mécanismes de journalisation intégrés et peut facilement être intégré avec des outils externes pour le monitoring en production.


Comment ça fonctionne dans FastAPI

1. Journalisation (Logging)

2. Middleware et suivi des requêtes

3. Extensions et outils utiles

4. Intégration dans le code


Bonnes pratiques


Pourquoi c’est important


En résumé

Fonctions :

  • Monitoring et logs avec Fast API

    Exemple de code :

    from fastapi import FastAPI, Request
    import logging
    import time
    
    # Configuration des logs
    logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
    
    app = FastAPI()
    
    # Middleware pour mesurer le temps de traitement de chaque requête
    @app.middleware("http")
    async def log_requests(request: Request, call_next):
        start_time = time.time()
        response = await call_next(request)
        process_time = time.time() - start_time
        logging.info(f"{request.method} {request.url} - {process_time:.3f}s")
        return response
    
    @app.get("/")
    def read_root():
        logging.info("Route / visitée")
        return {"message": "Bienvenue sur FastAPI !"}
    
    @app.get("/items/{item_id}")
    def read_item(item_id: int):
        logging.info(f"Route /items/{item_id} visitée")
        return {"item_id": item_id}

    Explication du code :

    from fastapi import FastAPI, Request importe FastAPI pour créer l’application et Request pour accéder aux informations des requêtes HTTP.

    import logging importe le module logging pour gérer l’écriture des logs.

    import time importe le module time pour mesurer la durée de traitement des requêtes.

    Configuration des logs

    logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s") configure le niveau de log à INFO et définit un format affichant la date/heure, le niveau et le message.

    Créer l’application FastAPI

    app = FastAPI() crée une instance de l’application FastAPI.

    Middleware pour mesurer le temps de traitement

    @app.middleware("http") définit un middleware appliqué à toutes les requêtes HTTP.

    async def log_requests(request: Request, call_next): définit une fonction middleware qui reçoit la requête et la passe à la route suivante via call_next.

    start_time = time.time() enregistre le temps au début du traitement.

    response = await call_next(request) appelle la route correspondante et attend la réponse.

    process_time = time.time() - start_time calcule le temps écoulé pour traiter la requête.

    logging.info(f"{request.method} {request.url} - {process_time:.3f}s") écrit un log avec la méthode HTTP, l’URL et la durée en secondes.

    return response renvoie la réponse finale au client.

    Routes de l’application

    @app.get("/") définit la route racine accessible à /.
    logging.info("Route / visitée") log l’accès à cette route.
    return {"message": "Bienvenue sur FastAPI !"} renvoie un message JSON.

    @app.get("/items/{item_id}") définit une route avec un paramètre dynamique item_id.
    logging.info(f"Route /items/{item_id} visitée") log l’accès avec l’identifiant de l’item.
    return {"item_id": item_id} renvoie l’ID de l’item dans la réponse JSON.