elasticsearch - servidor - pila elk
Cómo recuperar el conteo exclusivo de un campo usando Kibana+Elastic Search (5)
¿Es posible consultar un conteo distinto / único de un campo usando Kibana? Estoy usando búsqueda elástica como mi backend a Kibana.
Si es así, ¿cuál es la sintaxis de la consulta? Aquí hay un enlace a la interfaz de Kibana Me gustaría hacer mi consulta: http://demo.kibana.org/#/dashboard
Estoy analizando los registros de acceso de nginx con logstash y almacenando los datos en la búsqueda elástica. Luego, uso Kibana para ejecutar consultas y visualizar mis datos en gráficos. Específicamente, quiero saber el recuento de direcciones IP únicas para un marco de tiempo específico usando Kibana.
Ahora Kibana 4 le permite usar agregaciones. Además de construir un panel como el que se explicó en esta respuesta para Kibana 3, ahora podemos ver el número de direcciones IP únicas en diferentes períodos, eso fue (IMO) lo que OP quería en primer lugar.
Para construir un tablero como este, debe ir a Visualizar -> Seleccionar su índice -> Seleccionar un gráfico de barra vertical y luego en el panel de visualización:
- En el eje Y queremos el recuento único de direcciones IP (seleccione el campo donde almacenó la dirección IP) y en el eje X queremos un histograma de fecha con nuestro campo de tiempo.
- Después de presionar el botón Aplicar , deberíamos tener un gráfico que muestre el recuento único de IP distribuido a tiempo. Podemos cambiar el intervalo de tiempo en el eje X para ver las direcciones IP únicas por hora / día ...
Solo tenga en cuenta que los recuentos únicos son approximate . Para obtener más información, consulte también esta respuesta .
Cree la consulta "topN" en "clientip" y luego histograma con count en "clientip" y configure la consulta "topN" como fuente. Entonces verás la cuenta de diferentes ips por tiempo.
Los recuentos únicos de valores de campo se logran mediante el uso de facetas. Vea la documentación de ES para la historia completa, pero lo esencial es que creará una consulta y luego le pedirá a ES que prepare facetas sobre los resultados para contar los valores encontrados en los campos. Depende de usted personalizar los campos utilizados e incluso describir cómo desea que se devuelvan los valores. El tipo de faceta más básico es solo agrupar por términos, lo que sería como una dirección IP anterior. Puede llegar a ser bastante complejo con estos, ¡incluso requiriendo una consulta dentro de su faceta!
{
"query": {
"match_all": {}
},
"facets": {
"terms": {
"field": "ip_address"
}
}
}
Tenga en cuenta que con conteo único está utilizando la métrica de ''cardinalidad'', que no siempre garantiza un conteo único exacto. :-)
la métrica de cardinalidad es un algoritmo aproximado. Se basa en el algoritmo HyperLogLog ++ (HLL). HLL funciona mezclando su entrada y usando los bits del hash para hacer estimaciones probabilísticas de la cardinalidad.
Dependiendo de la cantidad de datos, puedo obtener diferencias de más de 700 entradas faltantes en un conjunto de datos de 300k a través de Unique Count in Elastic, que de otra manera son realmente únicos.
Lea más aquí: https://www.elastic.co/guide/en/elasticsearch/guide/current/cardinality.html
Para Kibana 4 ve a esta respuesta
Esto es fácil de hacer con un panel de términos:
Si desea seleccionar el recuento de direcciones IP distintas que se encuentran en sus registros, debe especificar en el campo información del clientip
, debe poner un número lo suficientemente grande (de lo contrario, se unirá a diferentes direcciones IP bajo el mismo grupo) y especificar en el mesa de estilo. Después de agregar el panel, tendrá una tabla con IP y el recuento de esa IP: