Datenbanktuning: Abfragen

Document created by RSA Information Design and Development on Apr 19, 2018
Version 1Show Document
  • View in full screen mode
 

In diesem Thema wird die Datenbankabfragesyntax beschrieben. Es gibt drei Hauptmechanismen für das Durchführen von Abfragen in der Datenbank, die Aufrufe query , values und msearch im Ordner /sdk in jedem Core-Service.

Der Aufruf query gibt Metaelemente aus der Metadatenbank zurück, wobei der Index für ein schnelles Abrufen genutzt werden kann.

Der Aufruf values gibt Gruppen eindeutiger Metawerte zurück, die nach bestimmten Kriterien geordnet sind. Er ist so optimiert, dass er die eindeutigen Werte als Untergruppe zurückgibt, die von einer Aggregatfunktion, z. B. Anzahl, sortiert werden.

Der Aufruf msearch verwendet Suchbegriffe als Eingabe und gibt passende Sitzungen zurück, die mit den Suchbegriffen übereinstimmen. Er kann innerhalb von Indizes, Metadaten, Rohpaketdaten oder Rohprotokolldaten suchen.

query Syntax

Die Meldung query weist folgende Syntax auf:

 query-params = size-param, space, query-param, {space, start-meta-param}, {space, end-meta-param}; size-param = "size=", ? integer between 0 and 1,677,721 ? ; query-param = "query=", query-string ; start-meta-param = "id1=", metaid ; end-meta-param = "id2=", metaid ; metaid = ? any meta ID from the meta database ? ; 

Die Parameter id1 , id2 und size bilden für die Rückgabe größerer Ergebnismengen aus der Datenbank einen Auslagerungsmechanismus. Sie werden vor allem von Entwicklern genutzt, die Anwendungen direkt für die NetWitness Core-Datenbank erstellen. Normalerweise werden zurückgegebene Ergebnisse vom ältesten zum neuesten Eintrag sortiert (höhere Meta-IDs sind stets aktueller). Um die Ergebnisse vom neuesten zum ältesten Eintrag zu sortieren, drehen Sie die IDs um, sodass id1 größer ist als id2 . Dies bringt eine leichte Verschlechterung der Performance mit sich, da die Where-Klausel zunächst vollständig ausgewertet werden muss, bevor die Verarbeitung in umgekehrter Reihenfolge beginnen kann.

Wenn keine Größe angegeben oder sie auf null gesetzt wurde, gibt das System alle Ergebnisse ohne Paging zurück. Für die RESTful-Schnittstelle wird die gesamte Antwort daher mit segmentierter Codierung zurückgegeben. Das systemeigene Protokoll gibt die Ergebnisse in mehreren Meldungen zurück.

Der Parameter query ist eine query -Befehlszeichenfolge mit eigener NetWitness-spezifischer Syntax:

 query-string = select-clause {, where-clause} {, group-by-clause {, order-by-clause } } ; select-clause = "select ", ( "*" | meta-or-aggregate {, meta-or-aggregate} ) ; where-clause = " where ", { where-criteria } ; meta-or-aggregate = meta | aggregate_func, "(", meta-key, ")" ; aggregate_func = "sum" | "count" | "min" | "max" | "avg" | "distinct" | "first" | "last" | "len" | "countdistinct" ; group-by-clause = " group by ", meta-key-list meta-key-list = meta-key {, meta-key-list} order-by-clause = " order by ", order-by-column order-by-column = meta-or-aggregate { "asc" | "desc" } {, order-by-column} 

Mithilfe der select -Klausel können Sie entweder * festlegen, dass alle Metadaten aus allen Sitzungen zurückgegeben werden, die mit der Where-Klausel übereinstimmen, oder eine Reihe von Meta-Feldnamen und Aggregatfunktionen angeben, anhand derer bei jeder Sitzung eine Untergruppe der Metadaten ausgewählt wird.

Die Klausel select kann umbenannte Metaschlüsselnamen enthalten. Alle Felder, die im Ergebnissatz als Ergebnis eines umbenannten Schlüssels in der Klausel select angezeigt werden, werden mit den Namen des Metaschlüssels zurückgegeben, der dem in der Klausel select verwendeten Namen entspricht. Beispiel: Wenn der Schlüssel port_src zum Umbenennen von tcp.srcport verwendet wird, gibt eine Abfrage mit select port_src nur port_src -Felder zurück, selbst wenn die zugrunde liegenden Metadaten den Typ tcp.srcport aufwiesen.

Die Aggregatfunktionen wirken sich wie folgt auf den Ergebnissatz der Abfrage aus:

                                             
Funktion Ergebnis
sum Alle Metawerte zusammenaddieren; nur bei Ziffern möglich
count Die Gesamtzahl von Metafeldern, die zurückgegeben worden wären
min Der gesehene Mindestwert
max Der gesehene Maximalwert
avg Der Durchschnittswert für die Anzahl
distinct Gibt eine Liste aller erkannten eindeutigen Werte zurück
countdistinct Gibt die Anzahl der gesehenen eindeutigen Werte zurück. countdistinct ist gleich der Anzahl von Metawerten, die die Funktion „distinct“ zurückgegeben hätte.
first Gibt den ersten gesehenen Wert zurück
last Gibt den letzten gesehenen Wert zurück
len Konvertiert alle Feldwerte in eine UInt32-Länge, statt den tatsächlichen Wert anzugeben. Diese Länge entspricht nicht der Länge der in der Metadatenbank gespeicherten Struktur, sondern der für die Speicherung des tatsächlichen Werts erforderlichen Anzahl von Byte. Für den Begriff „NetWitness“ wird beispielsweise die Länge 10 zurückgegeben. Für IPv4-Felder, z. B. ip.src , werden stets 4 Byte zurückgegeben.

where Klauseln

Bei der where -Klausel handelt es sich um einen spezifischen Filter, mit dem Sie unter Verwendung des Index Sitzungen aus der Sammlung auswählen können.

Syntax:

 where-criteria = criteria-or-group, { space, logical-op, space, criteria-or-group } ; criteria-or-group = criteria | group ; criteria = meta-key, ( unary-op | binary-op meta-value-ranges ) ; group = ["~"], "(" where-clause ")" ; logical-op = "&&" | "||" ; unary-op = "exists" | "!exists" ; binary-op = "=" | "!=" | "<" | ">" | ">=" | "<=" | "begins" | "contains" | "ends" | "regex" ; meta-value-ranges = meta-value-range, { ",", meta-value-range } ; meta-value-range = (meta-value | "l" ), [ "-", ( meta-value | "u" ) ] ; meta-value = number | quoted-value | ip-address | mac-address | relative-time ; quoted-value = ( '"' text '"' ) | ( '"' date-time '"' ) ; relative-time = "rtp(" , time-boundary , "," , positive-integer , time-unit, ")" ; time-boundary = "earliest" | "latest" ; positive-integer = ? any non-negative integral number ? time-unit = "s" | "m" | "h" ; 

Bei der Angabe von Regelkriterien muss der Teil der Klausel, der sich auf den meta-value bezieht, mit dem im meta-key angegebenen Metawert übereinstimmen. Wenn der Schlüssel beispielsweise ip.src ist, sollte der meta-value eine IPv4-Adresse sein.

Abfragen mit einem meta-key -Namen stimmen mit Metaelementen überein, die sowohl dem meta-key -Namen als auch den Namen aller für den Schlüssen angegebener „Umbenennungen“ entsprechen. Details zum Umbenennen von Schlüsseln finden Sie im Thema Indexanpassung .

Abfrageoperatoren

In der folgenden Tabelle werden die Funktionen der einzelnen Operatoren beschrieben:

                                                         
Operator Funktion
= Entspricht Sitzungen, die den exakten Metawert enthalten. Bei Angabe eines Wertebereichs wird jeder der Werte als Übereinstimmung betrachtet.
!= Entspricht allen Sitzungen, die mit ebendieser Klausel nicht übereinstimmen würden, wenn sie mit dem Operator = verfasst worden wäre.
< Für numerische Werte: Entspricht Sitzungen, die Metadaten mit einem numerischen Wert enthalten, der kleiner ist als die rechte Seite. Wurde auf der rechten Seite ein Bereich angegeben, wird der erste darin genannte Wert herangezogen. Wenn mehrere Bereiche angegeben wurden, ist das Verhalten unbestimmt. Bei Metadaten in Textform erfolgt ein lexikografischer Vergleich.
<= Dasselbe Verhalten wie bei < , wobei auch Sitzungen mit Metadaten, die dem Wert genau entsprechen, als Übereinstimmung gelten.
> Ähnlich wie beim Operator < , wobei hier Sitzungen als Übereinstimmung gelten, deren numerischer Wert größer ist als die rechte Seite. Wurde die rechte Seite als Bereich angegeben, wird der letztgenannte Wert des Bereichs für den Vergleich berücksichtigt.
>= Dasselbe Verhalten wie bei > , wobei auch Sitzungen mit Metadaten, die dem Wert genau entsprechen, als Übereinstimmung gelten.
begins Entspricht Sitzungen, die Metadaten in Textform enthalten, die mit den gleichen Buchstaben wie die rechte Seite beginnen.
ends Entspricht Sitzungen, die Metadaten in Textform enthalten, die mit den gleichen Buchstaben wie die rechte Seite enden.
contains Entspricht Sitzungen, die Metadaten in Textform enthalten, die die auf der rechten Seite angegebene Teilzeichenkette enthalten.
regex Entspricht Sitzungen, die Metadaten in Textform enthalten, die dem regulären Ausdruck (Regex) auf der rechten Seite entsprechen. Die Regex-Analyse erfolgt durch boost::regex.
exists Entspricht Sitzungen, die beliebige Metawerte mit dem angegebenen Metaschlüssel enthalten.
!exists Entspricht Sitzungen, die keine Metawerte enthalten, die dem angegebenen Metaschlüssel entsprechen.
length Entspricht Sitzungen, die Metawerte in Textform mit einer bestimmten Länge enthalten. Der Ausdruck auf der rechten Seite muss eine nichtnegative Zahl sein.

Textwerte

Das System erwartet in Anführungszeichen stehende Textwerte. Wenn er nicht als Zeit (siehe unten) analysiert werden kann, wird ein in Anführungszeichen stehender Wert als Text interpretiert.

IP-Adressen

IP-Adressen lassen sich mithilfe von Standardtextausdrücken für IPv4- und IPv6-Adressen darstellen. Außerdem kann in der Abfrage die CIDR -Notation für den Ausdruck eines Adressbereichs verwendet werden. Bei Verwendung der CIDR-Notation wird diese auf den entsprechenden Wertebereich erweitert.

MAC-Adressen

Eine MAC-Adresse kann mithilfe der standardmäßigen MAC-Adressen-Notation angegeben werden: aa:bb:cc:dd:ee:ff

Ausdruck von Datum und Zeit

Datumsangaben in NetWitness Suite erfolgen mithilfe der Unix-Epochenzeit, die der Anzahl der seit dem 1.1.1970 (UTC) vergangenen Sekunden entspricht. In Abfragen können Sie die Zeit als Anzahl dieser Sekunden darstellen oder die Darstellung als Zeichenkette nutzen. Die Darstellung von Datum und Zeit als Zeichenkette lautet "YYYY-mmm-DD HH:MM:SS" . Der Monat wird als dreibuchstabige Abkürzung dargestellt. Sie können den Monat auch als zweistellige Zahl zwischen 01 und 12 angeben.

Zeitwerte müssen in Anführungszeichen gesetzt werden.

Es wird davon ausgegangen, dass in Abfragen enthaltene Zeitangaben im UTC-Format angegeben sind.

Relative Zeitpunkte

Mit relativen Zeitpunkten kann eine where-Klausel auf einen Wert mit einem bestimmten Versatz von den frühesten oder spätesten Zeitmetadaten in der Sammlung verweisen.

Ein Ausdruck für einen relativen Zeitpunkt weist die Syntax rtp(boundary, duration) auf.

Die Grenze ist entweder earliest oder latest .

Die Dauer ist ein Ausdruck von Stunden, Minuten oder Sekunden. Beispiel: 24h , 60m oder 60s .

Relative Zeit Punkte können nur in SDK-Vorgängen mit einer Sammlung verwendet werden, aus der die Grenzen für die frühesten und spätesten Zeitmetawerte abgerufen werden können.

Relative Zeitpunkte können nur mit indizierten Metadatentypen verwendet werden. Standardmäßig sind time und event.time indizierte Metadatentypen.

Beispiele:

 Last 90m of collection time: time = rtp(latest, 90m) - u First 2 days of event time: event.time = l - rtp(earliest, 48h) 

Werte für spezielle Bereiche

Bereiche werden üblicherweise mit der Syntax * smallest * - * largest * angegeben, es gibt allerdings einige spezielle Platzhalterwerte, die in Bereichsausdrücken verwendet werden können. Der Buchstabe l wird beispielsweise verwendet, um die untere Grenze aller Metawerte als Startwert des Bereichs zu verwenden, während u für die obere Grenze steht. Die Grenzen werden anhand des kleinsten bzw. größten Werts aus allen bereits in den Index eingegangenen Metawerten ermittelt.

Wenn Sie das Tag l oder u verwenden, sollte es nicht in Anführungszeichen stehen.

So würde der Ausdruck time = "2014-may-20 11:57:00" - u allen Zeitangaben ab dem 20. Mai 2014 11:57:00 bis zum neuesten in der Sammlung enthaltenen Datum entsprechen.

Beachten Sie, dass der Ausdruck eines Bereichs leicht mit einer Textzeichenkette verwechselt werden kann. Stellen Sie sicher, dass Textwerte, die - enthalten, in Anführungszeichen stehen und dass Bindestriche innerhalb von Ausdrücken eines Bereichs nicht innerhalb von Text in Anführungszeichen stehen.

group by -Klausel (seit 10.5)

Die Abfrage-API hat die Fähigkeit, aus den Ergebnissen eines Abfrageaufrufs Aggregatgruppen zu erzeugen. Dies geschieht, indem eine group by -Klausel auf die Abfrage angewendet wird. Wenn group by angegeben wird, wird der Ergebnissatz für die Abfrage in Gruppen unterteilt. Jede Ergebnisgruppe wird durch die in der group by-Klausel angegebenen Metawerte eindeutig identifiziert.

Ziehen Sie beispielsweise die Abfrage select count(ip.dst) in Betracht. Diese Abfrage gibt die Anzahl aller ip.dst-Metadaten in der Datenbank zurück. Bei Hinzufügen einer group by -Klausel wie select count(ip.dst) group by ip.src gibt die Abfrage jedoch eine Anzahl der ip.dst-Metadaten zurück, die für jede eindeutige ip.src gefunden wurde.

Ab NetWitness Suite Version 10.5 können Sie bis zu 6 Metafelder in einer group by -Klausel verwenden.

Die group by -Klausel hat mit der values -Abfrage einige Funktionen gemeinsam, aber sie bietet signifikant erweiterte Gruppen auf Kosten längerer Abfragezeiten. Zum Hervorbringen der Ergebnisse einer gruppierten Abfrage gehört das Lesen der Metadaten von der Metadatenbank für alle Sitzungen, die der where -Klausel entsprechen, während eine Values-Abfrage ihre Aggregate hervorbringen kann, indem sie einfach den Index liest.

Die Inhalte jeder Gruppe, die von der Abfrage zurückgegeben werden, werden durch die select -Klausel definiert. Die select -Klausel kann jede der ausgewählten Aggregatfunktionen oder Metafelder enthalten. Wenn mehrere Aggregate ausgewählt werden, wird das Ergebnis der Aggregatfunktion für jede Gruppe definiert. Wenn nicht aggregierte Felder ausgewählt werden, werden die Metafelder für jede Gruppe stapelweise zurückgegeben.

Der Ergebnissatz einer group by -Abfrage wird mit den folgenden Regeln kodiert:

  1. Alle einer Gruppe zugeordneten Metadaten werden mit derselben Gruppennummer bereitgestellt.
  2. Die ersten an die Gruppe zurückgegebenen Metadaten bestimmen den Gruppenschlüssel. Wenn beispielsweise die group by -Klausel group by ip.src angibt, ist das erste Metadatenelement jeder Gruppe ip.src .
  3. Die normalen, nicht aggregierten Metadatenelemente werden nach dem group key zurückgegeben, werden aber alle dieselbe Gruppennummer aufweisen wie die Gruppenschlüsselmetadaten.
  4. Danach werden die aggregierten Ergebnismetafelder für jede Gruppe zurückgegeben.
  5. Alle Felder innerhalb einer Gruppe werden zusammen zurückgegeben. Verschiedene Gruppenergebnisse werden sich nicht überlappen.

Wenn einem der group by -Metadatenelemente von einer der durch die where -Klausel zugeordneten Sitzungen fehlen, wird das entsprechende Metafeld für die Zwecke dieser Gruppe als NULL behandelt. Wenn die Ergebnisse für diese Gruppe zurückgegeben werden, werden die als NULL gewerteten Teile des Gruppenschlüssels aus den Gruppenergebnissen ausgelassen, da die Datenbank kein Konzept von NULL hat.

Die Semantik einer group by -Abfrage unterscheidet sich von einer SQL-artigen Datenbank dahingehend, welche Metafelder zurückgegeben werden. SQL-Datenbanken erfordern, dass Sie die group by -Spalten explizit in der select -Klausel auswählen, wenn Sie möchten, dass sie im Ergebnissatz zurückgegeben wird. Die NetWitness Core-Datenbank gibt die Gruppenspalten immer implizit zuerst zurück.

Eine Abfrage mit einer group by -Klausel honoriert den Parameter size für den Ergebnissatz, falls einer angegeben wurde. Allerdings legt sie aufgrund des Typs der Gruppierung dem Aufrufer eine zusätzliche Belastung auf, Gruppen zu paginieren und zu reformieren, wenn ein Ergebnissatz mit fester Größe gefordert wird. Aus diesem Grund sollten Sie keine ausdrückliche Ergebnisgröße angeben, wenn Sie einen group by -Aufruf tätigen. Wenn Sie keine ausdrückliche Größe angeben, wird der gesamte Ergebnissatz als teilweises Ergebnis geliefert.

Die folgende Tabelle beschreibt die Datenbank-Honorierungs-Konfigurationsparameter, die die Auswirkung von I/O oder Speicher einer Group-by-Abfrage beschränken.

             
Parameter Funktion
/sdk/config/max.query.groups Dies ist der Grenzwert für die Anzahl der Gruppen, die im Speicher gehalten werden können, um Aggregate zu berechnen. Dieser Parameter erlaubt Ihnen, die Gesamtspeichernutzung der Abfrage zu begrenzen.
/sdk/config/max.where.clause.sessions Dies ist der Grenzwert für die Anzahl der Sitzungen, die von der Where-Klausel in einer Abfrage verarbeitet werden können. Dieser Parameter erlaubt Ihnen, einen Grenzwert für die Anzahl der Sitzungen einzustellen, die von den Metadaten- und Sitzungsdatenbanken gelesen werden müssen, um eine Abfrage zu lösen.

order by -Klausel (seit 10.5)

Eine order by -Klausel kann zu einer Abfrage hinzugefügt werden, die eine group by -Klausel enthält. Die order by -Klausel sorgt dafür, dass der Satz gruppierter Ergebnisse in sortierter Reihenfolge zurückgegeben wird.

Eine order by -Klausel besteht aus einem Satz von zu sortierenden Elementen in aufsteigender oder absteigender Reihenfolge. Das Sortieren kann auf jedem Datenfeld durchgeführt werden, das im Ergebnissatz zurückgegeben wird. Dazu zählen von der select -Klausel spezifizierte Metadaten, von der select -Klausel spezifizierte Ergebnisse von Aggregatfunktionen oder group by -Metadatenfelder.

Die order by -Klausel kann über mehrere Spalten sortieren. Es gibt keinen Grenzwert für die Anzahl zulässiger order by -Spalten in der Abfrage, aber es gibt eine praktische Begrenzung insoweit, dass jede der order by -Spalten sich auf etwas beziehen muss, das von der select -Klausel oder group by -Klausel zurückgegeben wurde. Die Sortierung über mehrere Spalten geschieht lexikographisch, das heißt, wenn zwei Gruppen gleiche Werte für die erste Spalte haben, werden sie nach den zweiten Spalten sortiert. Wenn auch die zweiten Spalten gleich sind, werden sie nach den dritten Spalten sortiert usw. über alle order by -Spalten hinweg.

Die NetWitness Core-Datenbank ist insofern einzigartig, als dass jede der Ergebnisgruppen, die auf eine Abfrage zurückgegeben werden, viele Werte für eine Auswahl haben können. Zum Beispiel ist es möglich, alle einem Metadatentyp entsprechenden Metadaten auszuwählen und sie in Gruppen zu organisieren und es ist möglich, mithilfe der Funktion distinct() Gruppen von unterschiedlichen Metawerten zurückzugeben. Wenn eine order by -Klausel eines der Felder in der Gruppe mit mehreren Werten referenziert, wird wie folgt sortiert:

  1. Innerhalb jeder Gruppe werden die Felder mit mehreren passenden Werten nach der Sortierklausel sortiert.
  2. Alle Gruppen werden sortiert, indem das erste Vorkommnis des sortierten Feldes, das innerhalb jeder Gruppe gefunden wird, verglichen wird.

Die order by -Klausel ist nur in Abfragen verfügbar, die eine group by -Klausel haben, da Gruppen die Metafelder in unterschiedliche Datensätze organisieren müssen. Wenn Sie eine beliebige Abfrage so sortieren möchten, als wäre keine Gruppierung angewendet worden, verwenden Sie group by sessionid . So wird sichergestellt, dass die Ergebnisse in Gruppen von unterschiedlichen Sitzungen oder Ereignissen zurückgegeben werden.

group by -Klauseln werden natürlicherweise in aufsteigender Gruppenschlüssel-Reihenfolge zurückgegeben, aber mithilfe einer order by -Klausel können Gruppen auch in anderer Reihenfolge zurückgegeben werden.

Wenn bei einer order by -Spalte weder asc noch desc angegeben ist, wird standardmäßig aufsteigend sortiert.

Beispiele:

 select countdistinct(ip.dst) GROUP BY ip.src ORDER BY countdistinct(ip.dst) select countdistinct(ip.dst) GROUP BY ip.src ORDER BY countdistinct(ip.dst) desc select countdistinct(ip.dst),sum(size) GROUP BY ip.src ORDER BY sum(size) desc, countdistinct(ip.dst) select sum(size) GROUP BY ip.src, ip.dst ORDER BY ip.dst desc select user.dst,time GROUP BY sessionid ORDER BY user.dst select * GROUP BY sessionid ORDER BY time 

values -Aufruf

Der Index hält eine Funktion für values auf niedriger Stufe bereit, um auf die im Index gespeicherten eindeutigen Metawerte zugreifen zu können. Dank dieser Funktion können Entwickler erweiterte Funktionen an Gruppen eindeutiger Metawerte ausführen.

Parametersyntax für den Aufruf values :

 values-params = field-name-param, space, where-param, space, size-param, {space, flags-param} {space, start-meta-param}, {space, end-meta-param}, {space, threshold-param}, {space, aggregate-func-param}, {space, aggregate-field-param}, {space, min-param}, {space, max-param} ; field-name-param = "fieldName=", meta-key ; where-param = "where=", where-clause ; size-param = "size=", ? integer between 1 and 1,677,721 ? ; start-meta-param = ? same as query message ? end-meta-param = ? same as query message ? flags-param = "flags=", {values-flag, {"," values-flag} } ; values-flag = "sessions" | "size" | "packets" | "sort-total" | "sort-value" | "order-ascending" | "order-descending" ; threshold-flag = "threshold=", ? non-negative integer ? ; aggregate-func-param = "aggregateFunction=", { aggregate-func-flag } ; aggregate-func-flag = "count" | "sum" ; aggregate-field-param = "aggregateFieldName=", meta-key ; min-param = "min=", meta-value ; max-param = "max=", meta-value ; 

Mit dem values -Aufruf steht eine Funktion für die Rückgabe einer Reihe von eindeutigen Metawerten für einen angegebenen Metaschlüssel bereit. Der values -Aufruf kann für jeden eindeutigen Wert eine aggregierte Gesamtanzahl zurückgeben. Die für die Berechnung der Summe verwendete Funktion wird vom Flags-Parameter gesteuert.

Parameter

In der folgenden Tabelle werden die Eigenschaften der einzelnen Parameter beschrieben:

                                         
Parameter Funktion
fieldName Dies ist der Name des Metaschlüssels, für den Sie eindeutige Werte abrufen. Wenn fieldName beispielsweise ip.src lautet, gibt diese Funktion die eindeutigen Quellen-IP-Werte in der Sammlung zurück. Wenn sich fieldName auf einen Schlüssel mit Umbenennungsverweisen bezieht, wird das Ergebnis als die Kombination von Feldwerten für den angegebenen Metaschlüsselnamen und allen Metaschlüsseln der Verweise definiert.
where Dies ist eine where -Klausel, die der Filterung derjenigen Sitzungen dient, für die eindeutige Werte zurückgegeben wurden. Wenn beispielsweise fieldName den Wert ip.src aufweist und die where -Klausel ip.src = 192.168.0.0/16 ist, werden nur Werte im Bereich zwischen 192.168.0.0 und 192.168.255.255 zurückgegeben. Weitere Informationen zur Syntax der where -Klausel finden Sie unter Where-Klauseln.
size Die Größe der zurückgegebenen Menge von Werten. Mit dieser Funktion wird eine kleine Untermenge der möglichen eindeutigen Werte aus der Datenbank zurückgegeben.
id1 , id2 Mit diesen optionalen Parametern wird der Umfang der Suche nach eindeutigen Werten auf einen bestimmten Abschnitt der Metadatenbank und des Index begrenzt. Die Festlegung der Parameter id1 und id2 für einen begrenzten Bereich der Metadatenbank ist unabdingbar, um umfangreiche Sammlungen schnell durchsuchen zu können.
flags Mit Flags wird die Sortierung und Aufsummierung von Werten gesteuert. Flags werden im folgenden Abschnitt „Werte-Flags“ beschrieben.
threshold Durch Setzen des Parameters threshold kann der values -Aufruf die Erfassung der mit jedem Wert verknüpften Summe abkürzen, sobald der Schwellenwert erreicht ist. Durch die Angabe eines Schwellenwertes kann der Aufrufer die Menge der aus der Datenbank abzurufenden Index- und Metaelemente beschränken. Diese Optimierung findet nicht statt, wenn der Parameter threshold nicht festgelegt oder auf null gesetzt wurde.
aggregateFunction Optionaler Parameter, der zum Ändern des Standardverhaltens vom Zählen von Sitzungen, Paketen oder Größen bis hin zum Zählen oder Aufsummieren des durch aggregateFieldName definierten numerischen Felds verwendet wird. Wenn einer der Parameter definiert wurde, müssen beide angegeben werden. Übergeben Sie entweder sum oder count , um anzugeben, welches Verhalten ausgeführt werden soll.
aggregateFieldName Das Metadatenfeld, für das aggregateFunction ausgeführt wird. Sowohl der Parameter aggregateFunction als auch der Parameter aggregateFieldName müssen angegeben werden, wenn das Flag aggregate gesetzt ist. Die Ausführung eines values -Aufrufs mithilfe einer der Aggregatfunktionen kann erheblich langsamer erfolgen als ein values -Aufruf, der die Summen von Sitzungen, Paketen oder Größen erfasst. Das liegt daran, dass für jede übereinstimmende Sitzung die where -Klausel aus der Metadatenbank abgerufen werden muss. Bei diesem Scanvorgang erfolgt eine I/O-Bindung eines überwiegenden Teils der Abfrage an die Meta-Datenbank-Volumes. Die für einen aggregierten values -Aufruf erforderliche Zeit verhält sich linear proportional zur Anzahl der Sitzungen, die der where -Klausel entsprechen.
min , max Der Mindest- und der Maximalwert, die vom Aufruf zurückgegeben werden sollten. Diese Parameter werden für die Iteration (oder das Paging) einer besonders hohen Anzahl von Werten verwendet – üblicherweise mehr Werte, als von einem einzelnen Aufruf zurückgegeben werden könnten. Sie werden vor allem zusammen mit den Flags sort-value,sort-ascending verwendet, sodass der höchste zurückgegebene Wert in einem nachfolgenden Aufruf als Wert für den Parameter min verwendet wird. Es handelt sich um exklusive Werte. Wenn min="rsa" angegeben wurde und rsa ein gültiger Wert war, wird nicht rsa zurückgegeben, sondern der nächsthöhere Wert.

values -Flags

Mit dem Parameter flags wird die Funktion des Werteaufrufs gesteuert. Es gibt drei Gruppen von Flags, die den unterschiedlichen Operationsmodi entsprechen, wie Sie der folgenden Tabelle entnehmen können.

                 
Flag Beschreibung
sessions , size , packets Mit dem Aufruf values können Sie eins der folgenden Flags angeben, um zu bestimmen, wie die Summe für jeden Wert berechnet werden soll. Beim Flag sessions gibt der Aufruf values eine Anzahl von Sitzungen zurück, die jeden Wert enthalten. Mit dem Flag size summiert der Aufruf values die Größe aller Sitzungen, die jeweils eindeutige Werte enthalten, und meldet die Gesamtgröße für jeden eindeutigen Wert. Beim Flag packets summiert der Werteaufruf die Anzahl der Pakete in allen Sitzungen, die jeweils eindeutige Werte enthalten, und gibt diese Summe für jeden eindeutigen Wert zurück.
sort-total , sort-value Mit diesen Flags wird die Sortierung der Flags gesteuert. Wenn das Flag sort-total lautet, wird die Ergebnismenge in der Reihenfolge der erfassten Summen sortiert. Mit dem Flag sort-value erfolgt die Sortierung der Ergebnisse in der Reihenfolge ihrer Werte.
order-ascending , order-descending Mit diesen Flags wird die Sortierreihenfolge der Ergebnismenge gesteuert. Wenn zum Beispiel nach der Summe in absteigender Reihenfolge sortiert werden soll, dann werden die Werte mit der größten Summe zuerst zurückgegeben.

Beispiele für den Aufruf values

Der Aufruf values wird von der Ansicht „Navigation“ in NetWitness Suite sehr häufig verwendet. Die Standardansicht erzeugt Aufrufe, die wie folgt aussehen:

 /sdk/values id1=198564099173 id2=1542925695937 size=20 flags=sessions,sort-total,order-descending threshold=100000 fieldName=ip.src where="time=\"2014-May-20 13:12:00\"-\"2014-May-21 13:11:59\"" 

In diesem Beispiel fordert die Ansicht „Navigation“ eindeutige Werte für ip.src an. Es werden eindeutige Werte von ip.src im angegebenen Zeitbereich angefordert. Die Anforderung bezieht sich auf die Anzahl von Sitzungen, die mit jedem ip.src übereinstimmen. Ausgegeben werden die ersten 20 ip.src -Werte bei einer Sortierung nach der Gesamtanzahl der Sitzungen in absteigender Reihenfolge. Außerdem verfügt die Ansicht „Navigation“ über einen Meta-ID-Bereich, um der Suchmaschine einen Optimierungshinweis zu liefern.

msearch -Aufruf

Der Index bietet die Low-Level-Funktion msearch für die Durchführung von Textsuchvorgängen für alle Metadatentypen. Für diese Art von Suche müssen Benutzer in ihren Abfragen keine bekannten Metadatentypen definieren. Stattdessen werden alle Teile der Datenbank auf Übereinstimmungen durchsucht. msearch wird von der Textsuche der Ereignisansicht verwendet. Details zu den akzeptierten Suchformularen und Beispiele finden Sie im Thema „Filter und Suchergebnisse in der Ereignisansicht“ im Leitfaden zu Investigation und Malware Analysis .

msearch -Parameter:

 msearch-params = search-param, {space, where-param}, {space, limit-param}, {space, flags-param}; search-param = "search=", ? free-form search string ? ;where-param = "where=", ? optional where clause ? ; limit-param = "limit=", ? optional session scan limit ? ;flags = "flags=", {msearch-flag, {"," msearch-flag} }; msearch-flag = "sp" | "sm" | "si" | "ci" | "regex" ; 

Der msearch -Algorithmus funktioniert folgendermaßen:

  1. Ein Satz von Sitzungen wird im Index ermittelt, indem die Schnittmenge der folgenden drei Sätze gesucht wird:
    • (Satz 1) Alle Sitzungen in der Datenbank
    • (Satz 2) Sitzungen, die dem Parameter der where -Klausel entsprechen
    • (Satz 3) Wenn das Flag si angegeben ist: Sitzungen, die Werte indiziert haben, die dem Suchzeichenfolgen-Parameter entsprechen.
  2. Wenn bei der Suche der Parameter sm angegeben ist, werden alle Metadaten aus dem im Schritt 1 ermittelten Sitzungssatz gelesen und auf Übereinstimmung mit dem Suchzeichenfolgen-Parameter geprüft. Die Metadatenelemente werden aus dem Service gelesen, der dem Punkt am nächsten liegt, von dem aus die Suche ausgeführt wurde. Wenn die Suche beispielsweise in einem Broker ausgeführt wurde, können die Metadatenelemente aus dem dem Broker nächstgelegenen Concentrator gelesen werden, wenn aber die Suche in einem Archiver ausgeführt wurde, werden die Metadatenelemente aus dem Archiver selbst gelesen.
  3. Wenn bei der Suche der Parameter sp angegeben ist, werden alle Rohpaketdaten oder Rohdatenprotokolleinträge aus dem im Schritt 1 ermittelten Sitzungssatz gelesen und auf Übereinstimmung mit dem Suchzeichenfolgen-Parameter geprüft. Die Pakete werden aus dem Service gelesen, der dem Punkt am nächsten liegt, von dem aus die Suche ausgeführt wurde. Wenn die Suche beispielsweise in einem Concentrator ausgeführt wurde, werden die Paketdaten aus dem Decoder gelesen, wenn aber die Suche in einem Archiver ausgeführt wurde, werden die Paketdaten aus dem Archiver selbst gelesen.
  4. Übereinstimmungen aus Schritt 2 und 3 werden zurückgegeben, sobald sie gefunden werden, bis zum Erreichen des Parameters limit . Der limit-Parameter gibt die maximale Anzahl der Sitzungen an, in denen nach Meta- und Paketdatenbanken gesucht wird. Wenn „limit“ nicht angegeben ist, wird der gesamte Satz an Sitzungen durchsucht, der in Schritt 1 bestimmt wurde.

msearch -Flags

                         
Flag Beschreibung
sp Durchsucht Rohpaketdaten
sm Durchsucht alle Metadaten
si Führt vor dem Durchsuchen von Metadaten Indexabfragen für alle Suchparameter aus
ci Führt eine Suche ohne Beachtung der Groß- und Kleinschreibung durch. Bei den zurückgegebenen Ergebnisse wird die Groß- und Kleinschreibung beachtet.
regex Behandelt den Parameter „search“ als regulären Ausdruck. Nur ein regulärer Ausdruck kann angegeben werden, er kann aber beliebig komplex sein.

msearch -Indexsuchmodus

Im Indexsuchmodus, angegeben durch das Flag si , werden Ergebnisse deutlich schneller zurückgegeben als in jedem anderen Modus. Die wichtigste Einschränkung dieses Modus ist, dass nur Übereinstimmungen mit Textbegriffen zurückgegeben werden, die werteindizierten Metawerten entsprechen.

  • Der Parameter si muss mit dem Flag sm kombiniert werden. Mit dem Parameter si wird angegeben, dass die Suche nur in indizierten Metadaten erfolgt.
  • Der Parameter si kann bei Suchläufen mit regulären Ausdrücken verwendet werden, es werden jedoch nur textindizierte Werte abgeglichen. IP-Adressen und Zahlen werden mit den regulären Ausdrücken nicht geprüft.

msearch Tipps

  • Verwenden Sie immer die where -Klausel, um einen Zeitbereich für die Suche anzugeben.
  • Um nach IP-Adressbereichen zu suchen, geben Sie diese in die where -Klausel ein.
  • Verwenden Sie den Parameter limit , wenn Sie nicht den Indexsuchmodus verwenden. Ohne diesen wird sonst eine sehr große Menge an Daten in der Meta- und Paketdatenbank gelesen.

Gespeicherte Verfahren

Die Aufrufe query und values halten weitere Suchfunktionen auf niedriger Ebene bereit. Für umfassendere Anwendungsbeispiele sind serverseitig gespeicherte Verfahren vorhanden.

Verwendung von Anführungsstrichen in der Abfragesyntax

Der Abfrageparser unterscheidet nicht zwischen einfachen oder doppelten Anführungsstrichen in einer Abfrageanweisung. Ein Wert in einfachen oder doppelten Anführungszeichen wird als Textmetawert behandelt.

Der Abfrageparser versucht, die Bedeutung dessen zu verstehen, was Sie in die Anweisung schreiben. Er ist nicht sehr streng in dieser Hinsicht.

Beispiel:

reference.id=4752

Diese Klausel identifiziert Sitzungen, die den Metawert reference.id und einen numericWert von 4752 aufweisen.

reference.id='4752' oder reference.id="4752"

Diese Klausel identifiziert Sitzungen, die den Metawert reference.id und einen stringWert von 4752 aufweisen.

Allerdings vergleicht die Abfrage-Engine implizit Zahlen und Zeichenfolgen, die wie Zahlen aussehen, und behandelt sie gleich, wenn die Werte semantisch gleich sind. Es funktioniert also mit jeder dieser Schreibweisen.

Für eine möglichst effiziente Performance wäre es allerdings eine gute Idee, die Abfragen so zu konstruieren, dass die Abfragesyntax den vom Parser erzeugten Datentypen entspricht.

Wenn also zum Beispiel der Parser reference.id als einen numerischen Datentyp erstellt, (wie uint32 oder uint64), verwenden Sie die numerische Syntax.

Wenn der Parser reference.id als einen Textdatentyp erstellt, sollten Sie die Zeichenfolgensyntax verwenden.

Previous Topic:Rollover
Next Topic:Indexanpassung
You are here
Table of Contents > Abfragen

Attachments

    Outcomes