6. Estadísticas¶
Las estadísticas convierten muchos eventos en un resumen que se puede comparar y utilizar para tomar decisiones. En lugar de revisar cada petición HTTP, puedes contar peticiones por host, medir la proporción de errores o detectar qué URI concentra más actividad.
En Splunk, el comando principal para este trabajo es stats. La idea clave es
que una búsqueda estadística cambia la forma del resultado: deja de devolver
eventos individuales y devuelve filas agregadas.
Del evento al resumen¶
Una búsqueda de eventos conserva el detalle:
Una búsqueda estadística resume esos eventos:
El resultado contiene una fila por host y el número de eventos de cada grupo.
Después de stats, los campos que no se hayan agrupado o agregado ya no forman
parte del resultado. Si necesitas revisar el evento original, hazlo antes de
resumir o utiliza eventstats.
Sintaxis de stats¶
La estructura habitual es:
Ejemplos:
La cláusula by define la dimensión de agrupación. Añadir más campos crea
grupos más específicos y normalmente más filas.
Funciones básicas de agregación¶
count¶
Cuenta eventos o valores:
Para contar por código HTTP:
dc¶
dc calcula el número de valores distintos. Por ejemplo, hosts diferentes:
Es útil para saber si una fuente está recibiendo datos de un solo sistema o de varios.
values y list¶
values devuelve valores únicos y list conserva la lista de valores
observados. Para una inspección por host:
No uses estas funciones sin controlar el volumen: una lista de valores muy grande puede ser difícil de leer y costosa de manejar.
min, max, avg y sum¶
Estas funciones requieren un campo numérico o convertible en número:
index=curso
| stats min(status) as codigo_minimo max(status) as codigo_maximo avg(status) as codigo_medio
Aunque calcular el promedio de un código HTTP puede servir para una práctica de
funciones, normalmente es más útil agrupar por status o calcular porcentajes
de éxito y error.
En una fuente que tenga un campo de duración, por ejemplo response_ms, podrías
calcular:
Si el dataset no contiene ese campo, la consulta no producirá una métrica útil. Primero comprueba siempre los campos disponibles.
Métricas operativas del laboratorio¶
Total, errores y porcentaje de error¶
index=curso
| stats count as total
count(eval(status>=400)) as errores
| eval porcentaje_error=round(errores * 100 / total, 2)
El resultado permite responder cuántas peticiones se han observado y qué
porcentaje ha devuelto un error. La expresión count(eval(...)) cuenta solo los
eventos que cumplen la condición.
Para evitar una división problemática en una búsqueda reutilizable, añade una comprobación del total:
index=curso
| stats count as total count(eval(status>=400)) as errores
| eval porcentaje_error=if(total=0, 0, round(errores * 100 / total, 2))
Errores por host y URI¶
Este patrón es útil para priorizar una investigación: primero muestra dónde se concentra el problema y después permite volver a los eventos concretos.
Métodos HTTP por host¶
La salida sirve para detectar cambios de comportamiento o una fuente que solo está enviando un tipo de petición.
timechart: estadísticas a lo largo del tiempo¶
timechart agrupa automáticamente por intervalos temporales y es apropiado
para detectar tendencias:
Para comparar códigos HTTP:
El span debe corresponder a la escala de la pregunta. Un intervalo demasiado
pequeño crea ruido o muchos huecos; uno demasiado grande puede ocultar picos.
El rango temporal se selecciona en Splunk Web o mediante earliest y latest.
Para analizar el archivo de prácticas:
index=curso earliest="01/01/2026:00:00:00" latest="01/01/2026:00:10:00"
| timechart span=1m count by status
chart, top y rare¶
chart permite crear una tabla de resultados cruzados:
top identifica los valores más frecuentes de un campo:
rare muestra los valores menos frecuentes:
Estos comandos son prácticos para exploración. Para búsquedas operativas que
deben documentarse con precisión, stats suele hacer más explícita la lógica y
el nombre de las métricas.
Mantener el detalle con eventstats¶
eventstats calcula una estadística y la añade a cada evento sin colapsar la
salida. Esto permite comparar cada evento con el total o con el promedio de su
grupo:
index=curso
| eventstats count as total_por_host by host
| table _time host status uri total_por_host
La búsqueda sigue mostrando eventos individuales, pero cada uno incluye el
total de eventos de su host.
Cálculos acumulados con streamstats¶
streamstats calcula valores progresivos según el orden de los resultados:
index=curso
| sort 0 _time
| streamstats count as numero_acumulado
| table _time host status uri numero_acumulado
Ordena los eventos antes de usarlo si el orden temporal es importante. Si no especificas un orden fiable, el acumulado puede no representar la secuencia que esperas.
Validar una estadística antes de compartirla¶
Una cifra no es automáticamente correcta. Antes de incluirla en un informe o dashboard, comprueba:
- El índice utilizado.
- El rango temporal y la zona horaria.
- Los filtros aplicados antes de
stats. - La presencia y calidad del campo agrupado.
- El número total de eventos de referencia.
- Si los permisos del usuario permiten ver todo el conjunto.
Puedes comparar el resumen con una inspección de eventos:
Si el total no coincide con lo esperado, revisa el filtro y los eventos antes de cambiar la función estadística.
Errores habituales¶
| Síntoma | Causa posible | Acción |
|---|---|---|
stats devuelve una sola fila |
No se indicó by. |
Añadir el campo de agrupación. |
Faltan campos después de stats |
No se incluyeron en la agregación. | Añadirlos a by o usar eventstats. |
| El porcentaje es incorrecto | El denominador no representa el mismo conjunto. | Aplicar el mismo filtro antes de contar. |
avg o sum no dan resultados útiles |
El campo falta o no es numérico. | Inspeccionar valores y tipo del campo. |
| Hay demasiadas filas | Se agrupa por demasiados campos o por un campo de alta cardinalidad. | Reducir dimensiones y rango temporal. |
| El gráfico tiene huecos | No hubo eventos o el rango no coincide. | Revisar _time, intervalo y fuente. |
| La cifra cambia entre usuarios | Rango temporal o permisos distintos. | Fijar earliest/latest y documentar el rol. |
Buenas prácticas para administradores¶
- Filtra por índice y tiempo antes de agregar.
- Da nombres descriptivos a las métricas con
as. - Incluye la dimensión
bysolo cuando responda a la pregunta. - Evita agrupar por campos de cardinalidad muy alta sin necesidad.
- Comprueba el total de referencia antes de calcular porcentajes.
- Usa
eventstatssi necesitas mantener los eventos originales. - Usa
timechartpara tendencias ystatspara resúmenes tabulares. - Documenta índice, rango, filtros, campos y permisos de la búsqueda.