Recientemente creé una API de python utilizando el marco FastAPI y funcionó bien en mi servicio AWS ECS. Configuré un punto final /health para las comprobaciones de estado de ALB. El punto de entrada para mi contenedor ECS es este comando
ENTRYPOINT ["app/start.sh"]y esto es lo que tengo en mi start.sh
uvicorn main:app --host 0.0.0.0El problema que tengo es que mis registros de ECS se llenan con 200 OK cuando ALB llega al punto final /health. Es muy frustrante que apenas puedo encontrar mis registros de API y Cloudwatch está lleno de registros de punto final de salud. ¿Hay alguna manera de evitar los registros de punto final de salud?
@app.get("/health", response_class=PlainTextResponse) def healthcheck(): return "200"El comentario sobre este problema de github proporciona un ejemplo de cómo filtrar los registros para un punto final determinado al usar uvicorn, desde su aplicación de Python.
Explica que debe definir un filtro para el punto final y agregarlo al registrador. Como MatsLindh mencionó en los comentarios a continuación , el método anterior filtra cualquier aparición de /health en los mensajes de registro, lo que significa que también filtraría puntos finales como /foo/health , /foo/health/bar etc.
Un ejemplo modificado de lo anterior que filtra los registros de acceso para el punto final /health :
import logging import uvicorn from fastapi import FastAPI app = FastAPI() # Define the filter class EndpointFilter(logging.Filter): def filter(self, record: logging.LogRecord) -> bool: return record.args and len(record.args) >= 3 and record.args[2] != "/health" # Add filter to the logger logging.getLogger("uvicorn.access").addFilter(EndpointFilter()) # Define the API endpoints @app.get('/health') def health(): print('health endpoint') @app.get('/test') def test(): print('test endpoint') Al presionar el punto final /test , podemos ver que hay un registro de acceso y la salida de la función. No hay registro de acceso para el punto final /health , solo la salida de la función.
INFO: Started server process [11272] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) test endpoint INFO: 127.0.0.1:54014 - "GET /test HTTP/1.1" 200 OK health endpoint