Comment récupérer un compte unique d’un champ à l’aide de Kibana + Elastic Search

Est-il possible d’interroger un compte distinct / unique d’un champ en utilisant Kibana? J’utilise la recherche élastique comme backend pour Kibana.

Si oui, quelle est la syntaxe de la requête? Voici un lien vers l’interface Kibana Je voudrais faire ma requête: http://demo.kibana.org/#/dashboard

J’parsing les journaux d’access nginx avec logstash et stocke les données dans une recherche élastique. Ensuite, j’utilise Kibana pour exécuter des requêtes et visualiser mes données dans des graphiques. Plus précisément, je souhaite connaître le nombre d’adresses IP uniques pour une période donnée en utilisant Kibana.

Pour Kibana 4, allez à cette réponse

Ceci est facile à faire avec un panneau de termes:

Ajout d'un panneau de termes à Kibana

Si vous voulez sélectionner le nombre d’IP distinctes qui se trouvent dans vos journaux, vous devez spécifier dans le champ clientip , vous devez mettre un nombre suffisant en longueur (sinon, il rejoindra des adresses IP différentes dans le même groupe) et spécifier dans le table de style. Après avoir ajouté le panneau, vous aurez une table avec IP et le nombre de cette IP:

Table avec IP et nombre

Maintenant, Kibana 4 vous permet d’utiliser des agrégations. En dehors de la construction d’un panel comme celui qui a été expliqué dans cette réponse pour Kibana 3, nous pouvons maintenant voir le nombre d’IP uniques à différentes périodes, c’est-à-dire ce que l’OP voulait en premier lieu.

Pour créer un tableau de bord comme celui-ci, vous devez aller à Visualiser -> Sélectionnez votre index -> Sélectionnez un graphique à barres verticales puis dans le panneau de visualisation:

  • Dans l’axe Y, nous voulons le nombre unique d’IP (sélectionnez le champ dans lequel vous avez stocké l’IP) et dans l’axe X, nous voulons un histogramme de date avec notre champ temporel.

Construire une visualisation

  • Après avoir appuyé sur le bouton Appliquer , nous devrions avoir un graphique qui indique le nombre unique d’IP dissortingbuées à temps. Nous pouvons changer l’intervalle de temps sur l’axe X pour voir les adresses IP uniques toutes les heures / tous les jours …

Complot final

Il suffit de prendre en compte que les comptes uniques sont approximatifs . Pour plus d’informations, consultez également cette réponse .

Soyez conscient avec le compte Unique que vous utilisez la mésortingque de «cardinalité», ce qui ne garantit pas toujours un décompte unique exact. 🙂

la mésortingque de cardinalité est un algorithme approximatif. Il est basé sur l’algorithme HyperLogLog ++ (HLL). HLL fonctionne en hachant votre entrée et en utilisant les bits du hachage pour faire des estimations probabilistes sur la cardinalité.

En fonction de la quantité de données, je peux obtenir des différences de plus de 700 entrées manquantes dans un jeu de données 300k via Unique Count in Elastic, qui sont par ailleurs vraiment uniques.

Lire plus ici: https://www.elastic.co/guide/en/elasticsearch/guide/current/cardinality.html

Créez une requête “topN” sur “clientip”, puis un histogramme avec count sur “clientip” et définissez la requête “topN” comme source. Ensuite, vous verrez le nombre de ips différents par heure.

Des compteurs uniques de valeurs de champ sont obtenus en utilisant des facettes. Voir la documentation ES pour le récit complet, mais l’essentiel est que vous allez créer une requête et demander à ES de préparer des facettes sur les résultats pour compter les valeurs trouvées dans les champs. C’est à vous de personnaliser les champs utilisés et même de décrire comment vous souhaitez que les valeurs soient retournées. Le plus fondamental des types de facette est juste de regrouper par termes, ce qui serait comme une adresse IP ci-dessus. Vous pouvez devenir assez complexe avec ceux-ci, même nécessitant une requête dans votre facette!

 { "query": { "match_all": {} }, "facets": { "terms": { "field": "ip_address" } } }