webentwicklung-frage-antwort-db.com.de

So rufen Sie die eindeutige Zählung eines Feldes mit Kibana + Elastic Search ab

Kann mit Kibana eine eindeutige/eindeutige Zählung eines Feldes abgefragt werden? Ich benutze die elastische Suche als Backend für Kibana. 

Wenn ja, wie lautet die Syntax der Abfrage? Hier ist ein Link zur Kibana-Benutzeroberfläche. Ich möchte meine Frage stellen: http://demo.kibana.org/#/dashboard

Ich analysiere Nginx-Zugriffsprotokolle mit logstash und speichere die Daten in der elastischen Suche. Anschließend verwende ich Kibana, um Abfragen auszuführen und meine Daten in Diagrammen zu visualisieren. Insbesondere möchte ich die Anzahl der eindeutigen IP-Adressen für einen bestimmten Zeitraum mit Kibana kennen.

67

Für Kibana 4 gehe zu diese Antwort

Dies lässt sich leicht mit einem Begriffspanel machen:

Adding a terms panel to Kibana

Wenn Sie die Anzahl der unterschiedlichen IP-Adressen in Ihren Protokollen auswählen möchten, geben Sie im Feld clientip eine Länge an, die groß genug ist (andernfalls wird eine andere IP-Adresse in derselben Gruppe angezeigt), und geben Sie in das Feld an Stiltisch. Nach dem Hinzufügen des Panels haben Sie eine Tabelle mit IP und die Anzahl dieser IP:

Table with IP and count

50
Pigueiras

Jetzt können Sie mit Kibana 4 Aggregationen verwenden. Abgesehen von der Erstellung eines Panels wie dem, das in dieser Antwort für Kibana 3 erläutert wurde, können wir jetzt die Anzahl der eindeutigen IPs in verschiedenen Zeiträumen sehen, das war (IMO), was das OP an erster Stelle wollte. 

Um ein solches Dashboard zu erstellen, gehen Sie zu Visualisieren -> Wählen Sie Ihren Index -> Wählen Sie ein vertikales Balkendiagramm aus und dann im Visualisierungsbedienfeld:

  • In der Y-Achse wollen wir die eindeutige Anzahl der IPs (wählen Sie das Feld aus, in dem Sie die IP gespeichert haben) und in der X-Achse möchten wir ein Datumshistogramm mit unserem Zeitfeld.

Building a visualization

  • Nach dem Drücken der Taste Apply sollte ein Diagramm angezeigt werden, das die eindeutige Anzahl der IP-Adressen zeigt, die rechtzeitig verteilt wurden. Wir können das Zeitintervall auf der X-Achse ändern, um die eindeutigen IPs stündlich/täglich anzuzeigen.

Final plot

Berücksichtigen Sie einfach, dass die eindeutigen Zählungen approximate sind. Weitere Informationen finden Sie auch in dieser Antwort .

42
Pigueiras

Beachten Sie bei der Unique-Zählung, dass Sie die Kardinalitätsmetrik verwenden, die nicht immer die genaue eindeutige Zählung garantiert. :-)

die Kardinalitätsmetrik ist ein ungefährer Algorithmus. Es basiert auf dem HyperLogLog ++ (HLL) Algorithmus. HLL funktioniert durch Hashing Ihrer Eingabe und Verwenden der Bits aus dem Hash, um Wahrscheinlichkeitsschätzungen für die .__ vorzunehmen. Kardinalität.

Abhängig von der Datenmenge kann ich über Unique Count in Elastic Unterschiede von mehr als 700 Einträgen in einem 300-k-Datensatz feststellen, die ansonsten wirklich einzigartig sind.

Lesen Sie hier mehr: https://www.elastic.co/guide/de/elasticsearch/guide/current/cardinality.html

7
Marcin

Erstellen Sie die Abfrage "topN" für "clientip" und anschließend das Histogramm mit count für "clientip". Legen Sie als Quelle die Abfrage "topN" fest. Dann werden Sie die Anzahl der ips pro Zeit sehen.

6
olegkhr

Durch die Verwendung von Facetten werden eindeutige Zählwerte von Feldwerten erreicht. Die vollständige Story finden Sie in der ES-Dokumentation . Die Gist besteht jedoch darin, dass Sie eine Abfrage erstellen und dann ES bitten, Facetten der Ergebnisse für das Zählen von Werten in Feldern vorzubereiten. Sie müssen die verwendeten Felder anpassen und sogar beschreiben, wie die Werte zurückgegeben werden sollen. Die grundlegendste Facettenart ist das Gruppieren nach Begriffen, die wie eine IP-Adresse oben aussehen würden. Sie können mit diesen ziemlich komplex werden und benötigen sogar eine Abfrage in Ihrer Facette!

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

Mit Aggs können Sie dies problemlos tun.

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

Dies würde die verschiedenen Werte von field mit den dortigen Dokumentenzahlen zurückgeben.

0
wonder