8. Extracción de campos¶
La extracción de campos convierte partes del evento original en valores que
Splunk puede buscar, filtrar, agrupar y mostrar. Es necesaria cuando el dato
existe en _raw, pero Splunk todavía no lo reconoce con un nombre de campo.
Por ejemplo, un evento puede contener:
Si la fuente no está configurada para separar sus columnas, una búsqueda por
status=404 no funcionará aunque el texto 404 esté presente. Primero revisa
el formato y después elige el mecanismo de extracción adecuado.
Dónde se produce la extracción¶
En Splunk conviene distinguir estos momentos:
- Durante la ingesta: se interpreta el evento, se asignan metadatos y se determina el timestamp.
- En tiempo de búsqueda: una extracción como
rexcrea campos al ejecutar la consulta. - Como conocimiento reutilizable: una extracción asociada a un
sourcetypepuede estar disponible para muchas búsquedas y usuarios.
Una extracción en tiempo de búsqueda no modifica los eventos almacenados ni
repara la configuración de la entrada. Si muchos usuarios necesitan el mismo
campo, como administrador debes valorar una configuración mantenida y probada
en lugar de copiar el mismo rex en cada dashboard.
Flujo de trabajo recomendado¶
Antes de crear una expresión regular:
- Confirma el índice y el rango temporal.
- Abre varios eventos y revisa
_raw. - Comprueba si el campo ya existe con
tableofieldsummary. - Identifica si la fuente es CSV, texto libre, JSON u otro formato.
- Prueba la extracción sobre pocos eventos.
- Compara el campo nuevo con el texto original.
- Valida los valores y la tasa de eventos extraídos.
- Decide si la extracción será temporal o reutilizable.
Consulta inicial:
No empieces creando una extracción si el problema real es un índice incorrecto, un rango temporal vacío o una entrada que no está leyendo la fuente.
rex: extraer con expresiones regulares¶
El comando rex crea campos a partir de grupos con nombre. En un log de texto:
index=curso
| rex field=_raw "status=(?<status_extraido>\\d+)"
| table _time status status_extraido _raw
(?<status_extraido>...) es el grupo capturado y su nombre se convierte en el
campo. \\d+ busca uno o más dígitos.
Para una línea CSV como la del laboratorio, puedes probar una extracción temporal si la entrada no separa las columnas automáticamente:
index=curso
| rex field=_raw "^(?<timestamp_extraido>[^,]+),(?<host_extraido>[^,]+),(?<method_extraido>[^,]+),(?<status_extraido>\\d+),(?<uri_extraida>[^,]+)$"
| table _time timestamp_extraido host_extraido method_extraido status_extraido uri_extraida
Este patrón depende de que el evento tenga exactamente cinco columnas, sin comas escapadas dentro de los valores. Para un CSV real con comillas, saltos de línea o delimitadores complejos, configura correctamente la entrada en lugar de ampliar indefinidamente la expresión regular.
Validar una extracción rex¶
index=curso
| rex field=_raw "status=(?<status_extraido>\\d+)"
| stats count as eventos count(status_extraido) as extraidos by sourcetype
Compara eventos y extraidos. Si no coinciden, revisa ejemplos de _raw y
comprueba si el patrón solo cubre una variante del formato.
Errores habituales con expresiones regulares¶
- El grupo no tiene nombre y no crea el campo esperado.
- El patrón exige un orden fijo que la fuente no garantiza.
- No se escapan correctamente caracteres como
.,?,(o[. - El patrón funciona con un evento, pero no con otras variantes.
- Se extraen valores parciales porque faltan los anclajes
^o$.
spath: extraer datos estructurados¶
Para eventos JSON, spath permite obtener valores siguiendo una ruta:
index=curso sourcetype=json
| spath input=_raw path=request.uri output=uri_extraida
| spath input=_raw path=response.status output=status_extraido
| table _time uri_extraida status_extraido
Si el JSON es sencillo, Splunk puede extraer automáticamente algunos campos.
Usa spath de forma explícita cuando necesites controlar la ruta o el nombre
de salida. No apliques este ejemplo al CSV del curso sin confirmar antes el
formato real.
Datos delimitados y CSV¶
La configuración de la entrada debe reconocer el delimitador, las cabeceras y el tratamiento de comillas. Para el laboratorio:
timestamp,host,method,status,uri
2026-01-01T00:00:00Z,web-01,GET,200,/login
2026-01-01T00:01:00Z,web-01,GET,404,/missing
Después de cargar el archivo, valida los campos así:
Si host, method, status o uri no aparecen, revisa la entrada y el
sourcetype antes de crear un rex permanente. Una extracción correcta en la
entrada evita repetir lógica en cada búsqueda.
Extracción mediante Splunk Web¶
Como administrador, puedes revisar los objetos de conocimiento desde **Settings
Fields** y configurar extracciones asociadas a un
sourcetype. El flujo general es:
- Seleccionar la aplicación y el contexto adecuados.
- Crear o revisar la extracción de campos.
- Asociarla al
sourcetypecorrecto. - Definir quién puede verla y utilizarla.
- Probarla con eventos reales.
- Documentar el patrón y el motivo del cambio.
El contexto de aplicación y los permisos importan: una extracción creada en un ámbito privado puede funcionar para el administrador y no para los asistentes. Prueba la búsqueda con el mismo rol que utilizará el resto del grupo.
Configuración reutilizable¶
En entornos administrados, las extracciones pueden mantenerse mediante objetos
de conocimiento o configuración como props.conf y transforms.conf. No
modifiques archivos de configuración sin una copia, una prueba y un plan de
reversión.
| Necesidad | Mecanismo recomendado |
|---|---|
| Probar una hipótesis | rex en la búsqueda. |
| Extraer para un tipo de evento | Objeto de conocimiento asociado al sourcetype. |
| Normalizar una fuente | Configuración de parsing administrada. |
| Corregir un formato de origen | Revisar la fuente o la entrada. |
Una extracción reutilizable debe tener nombre descriptivo, alcance claro, aplicación definida y una prueba documentada.
Validación operativa¶
Después de extraer un campo, comprueba algo más que su existencia:
index=curso
| rex field=_raw "status=(?<status_extraido>\\d+)"
| stats count as eventos count(status_extraido) as con_campo dc(status_extraido) as valores_distintos
Comprueba también sus valores:
index=curso
| rex field=_raw "status=(?<status_extraido>\\d+)"
| stats count by status_extraido
| sort status_extraido
Si el campo se utilizará en un dashboard o alerta, valida varios intervalos,
hosts y variantes del sourcetype. Una extracción que funciona con un evento
no está necesariamente preparada para operación diaria.
Diagnóstico de campos que no se extraen¶
| Síntoma | Causa posible | Comprobación |
|---|---|---|
| El campo no existe | No hay extracción o el nombre es incorrecto. | Revisar _raw y fieldsummary. |
rex no devuelve valores |
El patrón no coincide con el formato real. | Mostrar _raw y probar un patrón más pequeño. |
| Solo algunos eventos tienen campo | Hay variantes de formato. | Comparar eventos por source y sourcetype. |
| JSON aparece como texto | Falta una ruta spath o el tipo no es JSON. |
Confirmar sourcetype y estructura. |
| CSV queda en una sola columna | Delimitador o configuración incorrectos. | Revisar la entrada y el parsing. |
| Funciona para Admin pero no para asistentes | Contexto o permisos del objeto. | Probar con el rol y aplicación del usuario. |
| El campo aparece vacío | El grupo captura una cadena vacía o falta el dato. | Validar valores y variantes de _raw. |
Como administrador, no corrijas una extracción global para resolver una consulta aislada sin confirmar el impacto en otras búsquedas y aplicaciones.
Buenas prácticas¶
- Revisa
_rawantes de escribir una expresión regular. - Prefiere extracciones configuradas correctamente frente a
rexrepetidos. - Usa grupos con nombre en
rex. - Prueba patrones con eventos representativos.
- Valida porcentaje de extracción, valores y campos ausentes.
- Asocia las extracciones al
sourcetypecorrecto. - Controla aplicación, propietario y permisos de los objetos de conocimiento.
- No modifiques parsing global sin probar el impacto en otros datos.
- Documenta el formato esperado y un ejemplo de evento válido.