Concepto clave
El mapeo de índices en Elasticsearch es el proceso de definir cómo se almacenan y analizan los datos dentro de un índice. Para logs de aplicaciones, un buen mapeo no solo organiza los campos, sino que optimiza el rendimiento de búsqueda y análisis. Piensa en esto como el plano arquitectónico de un edificio: sin un diseño adecuado, las búsquedas serán lentas y los análisis imprecisos.
En logs, los datos suelen ser semiestructurados y dinámicos. Un mapeo avanzado permite controlar aspectos como el tipo de datos (texto, números, fechas), el análisis de texto (tokenización, filtros) y configuraciones específicas como fields multifield para permitir búsqueda exacta y full-text en el mismo campo. Esto es crucial para roles como Search Engineer, donde la eficiencia en consultas complejas es prioritaria.
Cómo funciona en la práctica
Vamos a diseñar un mapeo para logs de una aplicación web. Supongamos que cada log incluye: timestamp, nivel de log (info, error, etc.), mensaje, usuario, y metadatos como IP y endpoint. El paso a paso es:
- Identificar campos clave: Define qué campos son críticos para búsqueda y análisis.
- Elegir tipos de datos: Usa tipos como
datepara timestamp,keywordpara campos categóricos como nivel, ytextcon análisis para mensajes. - Configurar análisis: Aplica analizadores personalizados si es necesario, por ejemplo, para tokenizar mensajes en palabras.
- Usar multifields: Para campos como
usuario, puedes tener una versiónkeywordpara agregaciones y unatextpara búsqueda full-text.
Ejemplo de código inicial:
PUT /application-logs
{
"mappings": {
"properties": {
"timestamp": { "type": "date" },
"level": { "type": "keyword" },
"message": {
"type": "text",
"fields": {
"keyword": { "type": "keyword" }
}
}
}
}
}Caso de estudio
Imagina una plataforma de e-commerce que genera logs para transacciones. Los logs incluyen: event_time (fecha), user_id (texto), action (como "purchase" o "view"), product_id (keyword), y details (texto con descripción). Para optimizar búsquedas, diseñamos un mapeo que:
- Usa
dateparaevent_timecon formato ISO. - Configura
user_idcomokeywordpara búsquedas exactas en dashboards. - Aplica un analizador en inglés para
detailspara mejorar búsquedas full-text. - Añade un campo
action.rawcomo multifield de tipokeywordpara agregaciones rápidas.
Tabla de ejemplo de datos de log:
| event_time | user_id | action | product_id | details |
|---|---|---|---|---|
| 2023-10-01T10:30:00Z | user123 | purchase | prod456 | User purchased item with credit card |
| 2023-10-01T10:35:00Z | user456 | view | prod789 | User viewed product details page |
Un mapeo bien diseñado puede reducir el tiempo de consulta en logs grandes en más de un 50%, según casos reales en la industria.
Errores comunes
- Usar tipo text para todo: Esto infla el índice y ralentiza búsquedas exactas. Solución: Usa
keywordpara campos categóricos. - Ignorar el análisis de fechas: No definir formato en campos
datepuede causar errores en consultas. Solución: Especifica el formato, ej."format": "yyyy-MM-dd HH:mm:ss". - Olvidar multifields: Perder la capacidad de búsqueda exacta y full-text en un campo. Solución: Añade campos multifield como en el ejemplo de
message. - Sobredimensionar el mapeo: Añadir muchos campos innecesarios aumenta el almacenamiento. Solución: Prioriza campos basados en casos de uso reales.
- No probar con datos reales: Diseñar sin validar puede llevar a inconsistencias. Solución: Usa un pequeño conjunto de logs para probar el mapeo antes de producción.
Checklist de dominio
- ¿Identificaste todos los campos clave de los logs para búsqueda y análisis?
- ¿Asignaste tipos de datos apropiados (date, keyword, text) a cada campo?
- ¿Configuraste multifields para campos que requieren búsqueda exacta y full-text?
- ¿Definiste formatos de fecha y analizadores de texto si es necesario?
- ¿Validaste el mapeo con una muestra de datos reales?
- ¿Consideraste el rendimiento en consultas comunes, como filtros por nivel o usuario?
- ¿Documentaste el mapeo para el equipo de desarrollo?
Diseña un mapeo para logs de una API REST
En este ejercicio, crearás un mapeo de índice en Elasticsearch para logs generados por una API REST. Sigue estos pasos:
- Revisa los datos de ejemplo: Los logs incluyen campos:
timestamp(fecha y hora),method(HTTP method como GET, POST),endpoint(ruta de la API),status_code(código HTTP como 200, 404),response_time_ms(tiempo en milisegundos),client_ip(dirección IP), ybody(cuerpo de la solicitud en texto). - Diseña el mapeo: Usa la API de Elasticsearch para definir un mapeo que optimice búsquedas. Considera:
- Usar tipo
dateparatimestampcon formato ISO. - Configurar
methodystatus_codecomokeywordpara agregaciones rápidas. - Aplicar un analizador para
bodyque permita búsqueda full-text, y añadir un multifieldkeywordpara búsqueda exacta. - Definir
response_time_mscomo tipointegerpara análisis numérico.
- Usar tipo
- Implementa el mapeo: Escribe el comando PUT en Elasticsearch para crear el índice llamado
api-logscon tu mapeo. Incluye configuraciones como el número de réplicas si lo deseas. - Prueba con datos: Inserta un log de ejemplo usando la API de indexación y ejecuta una consulta simple para verificar que funcione.
Entrega el código del mapeo y una breve explicación de tus decisiones de diseño.
Pistas- Recuerda que los campos keyword son ideales para filtros y agregaciones en Kibana.
- Usa el formato 'strict_date_optional_time' para el campo timestamp si no estás seguro del formato exacto.
- Considera añadir un campo multifield para endpoint si necesitas búsqueda parcial en rutas.
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.