Por qué los costos de CloudWatch Logs se vuelven inesperadamente altos - Estructura de costos de ingesta, almacenamiento y análisis
Explicamos la estructura de precios donde el costo de ingesta de CloudWatch Logs es más de 20 veces el costo de almacenamiento, la explosión de costos causada por VPC Flow Logs y logs de Lambda, y las estrategias de optimización con la clase Infrequent Access y la exportación a S3.
Estructura de costos dominada por la ingesta
Los precios de CloudWatch Logs se componen de tres elementos. El cargo de ingesta (Ingestion) se aplica al enviar datos de log a CloudWatch Logs. En ap-northeast-1 es de 0.76 USD por GB. El cargo de almacenamiento (Storage) se cobra mensualmente por los datos de log almacenados, a 0.033 USD por GB al mes. El cargo de análisis (Logs Insights) se cobra por la cantidad de datos escaneados en las consultas, a 0.0076 USD por GB. El punto clave es que el cargo de ingesta es más de 20 veces el cargo de almacenamiento. Almacenar 1 GB de logs durante un mes cuesta 0.033 USD, pero ingerir ese 1 GB cuesta 0.76 USD. Esto significa que el costo se determina en gran medida en el momento de la ingesta, y reducir el volumen de ingesta es la estrategia de optimización de costos más efectiva.
Tres patrones que causan explosión de costos
Hay 3 patrones donde los costos de CloudWatch Logs se vuelven inesperadamente altos. Primero, VPC Flow Logs. Cuando envía VPC Flow Logs a CloudWatch Logs, se generan logs proporcionales al volumen de tráfico de red. En VPCs con mucho tráfico, se pueden generar decenas de GB de flow logs por día. Ingerir 1 TB de flow logs al mes resulta en un cargo de ingesta solo de aproximadamente 760 USD. Segundo, logs de Lambda. Las funciones Lambda generan logs de inicio, logs de ejecución y logs de error en cada invocación. Funciones con alta frecuencia de invocación (millones de veces al mes) pueden generar cientos de GB de logs. Tercero, logs de aplicaciones ECS/EKS. Las aplicaciones en contenedores que generan logs detallados (logs de acceso, logs de depuración) pueden producir grandes volúmenes de logs proporcionales al número de tareas.
Clase Infrequent Access - Reducir el costo de ingesta a la mitad
La clase Infrequent Access (IA) de CloudWatch Logs, introducida en 2023, es una clase de almacenamiento que puede reducir los cargos de ingesta en aproximadamente un 50%. El cargo de ingesta de la clase IA es de 0.38 USD por GB (la mitad del Standard), y el cargo de almacenamiento es el mismo 0.033 USD/GB. La restricción de la clase IA es que no se pueden realizar consultas con Logs Insights. Si necesita buscar logs, debe usar filtros de métricas o exportar a S3 y consultar con Athena. La clase IA es adecuada para logs que rara vez se buscan pero deben conservarse por requisitos de cumplimiento, como logs de auditoría y logs de acceso. La clase se especifica a nivel de grupo de logs y no se puede cambiar después de la creación, por lo que debe decidir la clase al crear el grupo de logs.
Exportación a S3 y Firehose - La solución óptima para almacenamiento a largo plazo
Para el almacenamiento a largo plazo de logs, S3 es abrumadoramente más económico que CloudWatch Logs. El cargo de almacenamiento de CloudWatch Logs es 0.033 USD/GB, pero S3 Standard es 0.025 USD/GB y S3 Glacier Instant Retrieval es 0.005 USD/GB. Hay 2 métodos para exportar logs de CloudWatch Logs a S3. Primero, la tarea de exportación (CreateExportTask). Esto exporta logs de un período especificado a S3 como un proceso por lotes. Es adecuado para exportación periódica (diaria o semanal), pero hay un retraso de hasta 12 horas. Segundo, Kinesis Data Firehose. Esto transmite logs a S3 en casi tiempo real a través de filtros de suscripción. El retraso es de 60 a 900 segundos (configurable), lo que lo hace adecuado para logs que necesitan estar disponibles para búsqueda poco después de la generación. El costo de Firehose es de 0.029 USD por GB, pero combinado con el ahorro de almacenamiento en S3, es más económico que el almacenamiento a largo plazo en CloudWatch Logs.
Técnicas prácticas para reducir el volumen de logs
El método más efectivo de reducción de costos es reducir el volumen de logs ingeridos. Primero, la configuración apropiada del nivel de log. En entornos de producción, configure el nivel INFO o WARN y no genere logs de nivel DEBUG. Si controla el nivel de log con variables de entorno, puede cambiar a DEBUG solo cuando se necesite depuración. Segundo, el muestreo. Si no necesita registrar logs de todas las solicitudes, registre solo un cierto porcentaje (por ejemplo, 10%) de solicitudes. Esto es efectivo para logs de acceso y logs de rastreo. Tercero, el filtrado. Filtre logs innecesarios en el lado de la aplicación antes de enviarlos a CloudWatch Logs. Por ejemplo, excluya health checks y solicitudes de monitoreo de los logs de acceso. Cuarto, la configuración del período de retención. El período de retención predeterminado de los grupos de logs de CloudWatch Logs es indefinido (retención permanente). Configure un período de retención apropiado (7 días, 30 días, 90 días, etc.) para cada grupo de logs para eliminar automáticamente los logs antiguos y reducir los costos de almacenamiento. Para aprender sistemáticamente sobre gestión de logs y optimización de costos, consulte libros especializados en Amazon.