web-dev-qa-db-fra.com

Comment récupérer le nombre unique d'un champ à l'aide de Kibana + Elastic Search

Est-il possible de demander un nombre distinct/unique d'un champ à l'aide de Kibana? J'utilise la recherche élastique comme base de 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'analyse les journaux d'accès nginx avec logstash et stocke les données dans une recherche élastique. Ensuite, j'utilise Kibana pour lancer 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.

67
Afsheen Khosravian

Pour Kibana 4, allez à cette réponse

C'est facile à faire avec un panneau de termes:

Adding a terms panel to Kibana

Si vous souhaitez sélectionner le nombre d'adresses IP distinctes qui figurent dans vos journaux, vous devez spécifier dans le champ clientip, vous devez définir un nombre suffisamment grand en longueur (sinon, les différentes adresses seront réunies dans le même groupe) et spécifiez dans le champ table de style. Après avoir ajouté le panneau, vous aurez une table avec IP et le nombre de cette IP:

Table with IP and count

50
Pigueiras

Maintenant, Kibana 4 vous permet d’utiliser des agrégations. En plus de construire un panneau comme celui expliqué dans cette réponse pour Kibana 3, nous pouvons maintenant voir le nombre d’adresses IP uniques à différentes périodes, c’est (IMO) ce que le PO voulait au départ. 

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

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

Building a visualization

  • Après avoir appuyé sur le bouton Appliquer, vous devriez avoir un graphique qui montre le nombre unique d'adresses IP distribuées à temps. Nous pouvons modifier l'intervalle de temps sur l'axe X pour afficher les adresses IP uniques toutes les heures/tous les jours ...

Final plot

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

42
Pigueiras

Sachez qu'avec Comptage unique, vous utilisez une métrique de «cardinalité», qui ne garantit pas toujours le comptage unique exact. :-)

la métrique de cardinalité est un algorithme approximatif. Il est basé sur le HyperLogLog ++ (HLL) algorithme. HLL fonctionne en hachant votre entrée et en utilisant les bits du hachage pour faire des estimations probabilistes sur le 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 dans Elastic, qui sont sinon vraiment uniques.

Lisez plus ici: https://www.elastic.co/guide/fr/elasticsearch/guide/current/cardinality.html

7
Marcin

Créez une requête "topN" sur "clientip", puis un histogramme contenant "clientip" et définissez la requête "topN" comme source. Ensuite, vous verrez le nombre d'ips différents à la fois.

6
olegkhr

Des comptes uniques de valeurs de champ sont obtenus en utilisant des facettes. Voir Documentation ES pour le récit complet, mais Gist veut créer une requête, puis demander à ES de préparer des facettes sur les résultats pour le comptage des valeurs trouvées dans les champs. C'est à vous de personnaliser les champs utilisés et même de décrire comment vous voulez que les valeurs soient renvoyées. Le plus élémentaire des types de facettes est simplement de grouper par termes, ce qui serait comme une adresse IP ci-dessus. Vous pouvez obtenir assez complexe avec ceux-ci, même nécessitant une requête dans votre facette!

{
    "query": {
        "match_all": {}
    },
    "facets": {
        "terms": {
            "field": "ip_address"
        }
    }
}
3
J.T.

En utilisant Aggs, vous pouvez facilement le faire . Ecrire une requête pour le moment.

GET index/_search
{
  "size":0,
  "aggs": {
    "source": {
      "terms": {
        "field": "field",
        "size": 100000
      }
    }
  }
 }

Cela renverrait les différentes valeurs de field avec leur nombre de doc.

0
wonder