Mit Abfragen im Trace-Explorer arbeiten

Sie können mit den in der Schnellauswahl im Trace-Explorer angezeigten Out-of-the-box-Abfragen arbeiten oder sie bearbeiten, um Trace-Daten nach Dimensionen zu filtern.

Informationen zu Abfragen im Trace-Explorer

Eine Abfrage im Trace-Explorer folgt einer vereinfachten SQL-ähnlichen Syntax und besteht aus folgenden Elementen:

  • Klauseln: Anweisungen zum Filtern, Kategorisieren und Anzeigen von Informationen im Trace-Explorer.
  • Dimensionen: Metadaten oder Attribute, die durch Taggen eines Spans definiert werden und ein effektives Monitoring der verschiedenen Tiers einer Anwendung ermöglichen. Eine vollständige Liste der Dimensionen ist unter Felder im Trace-Explorer verfügbar.

Die Abfragen im Trace-Explorer sind eine Kombination aus Klauseln und Dimensionen, mit denen Sie Tracedaten filtern können. Sie können entweder die Out-of-the-box-Abfragen verwenden, die in jeder Schnellauswahl verfügbar sind, wie z.B. Traces und Services, oder diese Abfragen bearbeiten, um die Ergebnisse entsprechend Ihren spezifischen Anforderungen weiter anzupassen.

Beim Bearbeiten von Abfragen müssen Sie die Klauseln in der in der folgenden Syntax angegebenen Reihenfolge hinzufügen oder aktualisieren. Die erforderliche Klausel ist kursiv formatiert, die anderen Klauseln sind optional.

SHOW (TRACES) or (SPANS)
dimensioncolumnsToShow_oneOrMore 
WHERE filtersdimensions_oneOrMore
GROUP BY dimensioncolumnsToShow_oneOrMore
HAVING expressionOverdimensionColumns_one
ORDER BY dimensioncolumnsToShow_oneOrMore
FIRST <n> ROWS
TIMESERIES (FOR dimensions_oneOrMore) (<n> minutes) 
BETWEEN time expression AND time expression

Beachten Sie, dass in der Syntax ' ' (einfache Anführungszeichen) für Zeichenfolgenkonstanten und " " (doppelte Anführungszeichen) für IDs in Anführungszeichen verwendet werden. Wenn die ID ein einzelnes Wort ist, sind die doppelten Anführungszeichen optional. Beachten Sie, dass bei den Dimensionswerten, die mit verschiedenen Klauseln wie where und group by hinzugefügt werden, die Groß-/Kleinschreibung beachtet wird.

Arithmetische Vorgänge wie Addition, Subtraktion, Multiplikation und Division können in Ausdrücken wie unten dargestellt verwendet werden:

show (traces) min(UserName) as "User Name",
    min(BrowserName) as "Browser Name",
    min(BrowserVersion) as "Browser Version",
    sum(PageResponseTime) as "Total Response Time",
    sum(PageViews) as "Page Views",
    sum(ErrorCount) as "Error Count",
    count(*) as "Traces",
    avg(ConnectTime) as "Connect Time",
    max(TraceLatestSpanEndTime) - min(TraceFirstSpanStartTime) as "Session Duration"  
where ApmrumPageUpdateType is not omitted OR ApmrumType='Connection'
group by SessionId
order by max(TraceLatestSpanEndTime) - min(TraceFirstSpanStartTime)

Abfrageunterstützung: Beim Arbeiten mit Abfragen wird eine Liste der verfügbaren Attribute und Funktionen angezeigt, nachdem ein Leerzeichen eingegeben und automatisch angehalten wurde. Das Abfrageassistentenfeature kann bei Bedarf manuell mit CTRL+Space aufgerufen werden.

Trace Explorer-Abfragesprache

Ausführliche Informationen zu den Klauseln, die in einer Abfrage im Trace-Explorer verwendet werden können, finden Sie in der folgenden Tabelle:

Klausel Beschreibung
show Gibt die Quelle der Basisdaten für die Abfrage an. Dabei kann es sich um Spans, Traces oder eine Anforderung für Trace- oder Span-Dimensionen handeln.

Beispiel 1: show (traces)

Beispiel 2: show (spans)

Diese Klausel ist nicht erforderlich. Wenn sie nicht angegeben wird, geht die Abfrage davon aus, dass alle Traces angezeigt werden sollen.

Verschachtelte Abfragen und Unterabfragen: Sie können verschachtelte Abfragen mit der Klausel show verwenden.

Beispiel 1: show (show (show traces * ) count(*) as c ) c

Beispiel 2: show traces traceid where serviceName in (show spans serviceName where serviceName is not omitted and operationName= 'A' group by serviceName first 10 rows)

Einschränkungen für verschachtelte Abfragen:
  • Darf keine Auswahlklausel enthalten. Verwenden Sie stattdessen verschachtelte Abfragen mit den Werten IN und NOT IN.
  • Eine verschachtelte Abfrage darf keine Mehrpassvorgänge enthalten (auch als abhängige Abfragen bezeichnet). Nur die äußerste show-Klausel darf sie enthalten. In diesem Fall werden sie über die Ergebnisse der verschachtelten Abfrage ausgeführt.
  • Für eine verschachtelte Abfrage gibt es keine standardmäßige Zeilenbegrenzung. Standardmäßig berücksichtigt eine verschachtelte Abfrage alle Zeilen. Siehe oben Beispiel 1.

    Bei Bedarf können weniger Zeilen angefordert werden, indem der verschachtelten Abfrage eine explizite first n rows-Klausel hinzugefügt wird.

  • Kann nicht auf Werte in einer äußeren Abfrage verweisen (keine korrelierte verschachtelte Abfrage).
Beschränkung von Unterabfragen:
  • Eine in einem Ausdruck verwendete Unterabfrage, wie in Beispiel 2 oben gezeigt, muss eine first n rows-Klausel enthalten, sonst gibt die Abfrage einen Fehler zurück. Die maximale Anzahl von Zeilen, die in einem IN- oder NOT IN-Ausdruck angefordert werden können, beträgt 1 Million.

Auswahlklausel

Sucht eine Gruppe von Traces oder Spans, die vom Rest der Abfrage durchsucht werden.

Syntax: FROM <virtualTable> WHERE <whereClause> FIRST n rows

Beispiel:

show traces from spans where serviceName='a' first 100 rows *

In dieser Klausel ist ein Grenzwert erforderlich, da nur eine begrenzte Anzahl von Elementen für die Suche verwendet werden kann und diese Klausel nur innerhalb einer Traceabfrage verwendet werden kann.

Klausel für zurückgegebene Ausdrücke Gibt an, welche Trace- oder Span-Dimensionen oder Aggregatfunktionen als Spalten in der Liste angezeigt werden sollen. Die ID as stellt optional einen Alias für jede Spaltenüberschrift bereit. Beachten Sie, dass der Alias eindeutig sein muss.

Beispiel:

ServiceName as Service

Wenn auf die ID as ein Leerzeichen folgt, muss der Spaltenname in Anführungszeichen " " stehen.

Die folgenden unterstützten Funktionen können mit dieser Klausel verwendet werden:

  • abs: Gibt den absoluten Wert eines numerischen Ausdrucks zurück.

    Beispiel:

    abs(errorcount)

  • avg: Gibt den Durchschnittswert einer numerischen Dimension zurück.

    Beispiel:

    avg(SpanDuration) as "Duration"

  • cast: Ermöglicht die Angabe einer Einheit für einen Ausdruck, wobei der Ausdruck und die gewünschte Einheit als Argumente verwendet werden. Dies kann dazu führen, dass die Benutzeroberfläche den zurückgegebenen Wert anders wiedergibt.

    Syntax: cast(expression, unit)

    • expression sind die darzustellenden Eingabedaten. Es muss sich um numerische oder Zeitausdrücke handeln.
    • unit ist die Einheit, die bestimmt, wie die Eingabe in die Ausgabe angezeigt/transformiert wird. Die verfügbaren Werte sind:
      • EPOCH_TIME_MS: Zeit in Millisekunden.
      • DURATION_MS: Dauer in ms.
      • BYTES: Größe in Byte.

    Beispiel 1:

    cast(myTimeAttribute, 'EPOCH_TIME_MS')

    Beispiel 2:

    cast(myDuration, 'DURATION_MS')

    Beispiel 3:

    cast(myStorageSize, 'BYTES')

  • ceil: Gibt den nächsthöheren Long-Wert zurück, wenn der Ausdruck einen Bruchteil ungleich Null enthält. Andernfalls wird der Wert als Long zurückgegeben.

    Beispiel:

    ceil(traceDuration)

  • conditional_count: Gibt die Gesamtanzahl (Anzahl) eines bedingten Ausdrucks zurück.

    Syntax: conditional_count(conditional expression)

    Beispiele:

    conditional_count(dimensionA = 'abc')

  • count: Gibt die Gesamtanzahl für eine Dimension zurück.

    Beispiele:

    count(OperationName)as "Operation Count"

    count(*) as "Trace Count"

  • count_distinct: Gibt die Anzahl der eindeutigen Werte für eine Dimension zurück.

    Beispiel:

    count_distinct(sessionId) as "Sessions"

  • date_bucket: Gibt einen transformierten Zeitausdruck zurück.
    Syntax: date_bucket(numeric expression, string)
    • numeric expression ist die Zeiteingabe, die eine Zahl mit der Einheit EPOCH_TIME_MS sein muss.
    • string ist die Zeichenfolge, die bestimmt, wie die Zeiteingabe in die Ausgabe transformiert wird. Gültige Optionen sind:
      • 'day_of_week': Gültige Rückgabewerte sind 1-7, die den UTC-Tag der Woche angeben (Sonntag ist 1).
      • 'day_of_month': Gültige Rückgabewerte sind 1-31, die den UTC-Tag des Monats angeben.
      • 'day_of_year': Gültige Rückgabewerte sind 1-366 basierend auf UTC.
      • 'month_of_year': Gültige Rückgabewerte sind 1-12 basierend auf UTC.
      • 'hour_of_day': Gültige Rückgabewerte sind 0-23 basierend auf UTC.
      • 'minute_of_hour': Gültige Rückgabewerte sind 0-59.
      • 'calendar_quarter_of_year': Gültige Rückgabewerte sind 1-4 basierend auf UTC.
      • 'truncate_day': Der gültige Rückgabezeitwert ist der aktuelle Tag in der UTC-Mitte.
      • 'truncate_hour': Gültiger Rückgabewert ist der Stundenanfang (UTC).
      • 'truncate minute': Gültiger Rückgabewert ist der Beginn der Minute UTC.
  • floor: Schneidet einen Bruchteil des Ausdruckswerts ab und gibt einen langen Wert zurück.

    Beispiel:

    floor(traceDuration)

  • histogram: Erstellt ein Histogramm der Daten in numerischen Attributen. Sie verteilt die Daten in Buckets gleicher Breite (histogram(numeric_attr, min_value, max_value, num_buckets)).

    Beispiel:

    histogram(spanDuration, 0, 6000, 3)

  • max: Gibt den Höchstwert einer Dimension zurück.

    Beispiel:

    max(SpanDuration) as "Maximum Duration"

  • min: Gibt den Mindestwert einer Dimension zurück.

    Beispiel:

    min(SpanDuration) as "Minimum Duration"

  • mod: Gibt den Rest von expression2 geteilt durch expression1 zurück. Wenn expression1 den Wert 0 hat, wird der Wert expression2 zurückgegeben.

    Syntax: mod(expression1, expression2)

    Diese Funktion verwendet als Argumente einen beliebigen numerischen Datentyp oder einen nicht numerischen Datentyp, der implizit in einen numerischen Datentyp konvertiert werden kann. Das Argument mit der höchsten numerischen Priorität wird bestimmt, und die restlichen Argumente werden implizit in diesen Datentyp konvertiert, und dieser Datentyp wird zurückgegeben.

    Beispiel:

    mod (errorcount, spancount)

  • omittedTo: Gibt die Option zum Zuweisen eines Werts zu einer Dimension an, die keinen Wert enthält.

    Beispiel:

    omittedTo(UserName, 'John Doe')

    Wenn im obigen Beispiel der Dimension UserName ein Wert zugewiesen ist, wird der zugewiesene Wert in den Ergebnissen angezeigt. Wenn kein Wert zugewiesen ist, wird "John Doe" angezeigt.

  • percent_of_items: Gibt den Prozentsatz der Traces oder Spans zurück, der durch die aktuelle Zeile dargestellt wird. Der Wert von percent_total_items() ist gleich count(*)/total_items()*100.

    Beispiel:

    show traces serviceName, count(*), total_items(), percent_of_items() group by serviceName

  • percent_with_root_error: Gibt den Prozentsatz der abgeschlossenen Traces zurück, bei denen ein Root-Span mit einem Fehler markiert ist. Dieser Wert entspricht sum(traceRootSpanErrorCount)/count(traceRootSpanErrorCount)*100.

    Beispiel:

    show traces serviceName, sum(traceRootSpanErrorCount), count(traceRootSpanErrorCount), percent_with_root_error() group by serviceName

  • percentile: Gibt den ungefähren Perzentilwert für ein numerisches Attribut ((numeric_attr, 0-100)) zurück.

    Beispiel:

    percentile(traceDuration, 90)

    HINWEIS: Dies wird derzeit in Bezug auf die Funktion approx_percentile() der oracle-Datenbank implementiert und berechnet einen ungefähren Perzentilwert.

  • rate: Gibt den count() im Zeitverlauf zurück.

    Beispiel:

    show traces rate() between now()-1 hour and now() timeseries 5 minutes

    Im obigen Beispiel wird das Ergebnis der Hauptabfrage über 60 Minuten berechnet, sodass der im Ergebnis angezeigte Wert count()/60 lautet. Wenn die Zeitreihe berechnet wird, berechnet jeder Datenpunkt eine Anzahl für 5 Minuten, sodass der Ratenwert für jeden Punkt count()/5 lautet. Dies ergibt eine Rate pro Minute sowohl im Gesamtergebnis als auch für jeden Punkt in der Zeitreihe.

  • regexp_count: Gibt die Gesamtanzahl der Vorkommen eines Musters in der Quellzeichenfolge ab der angegebenen Position zurück. Gibt 0 zurück, wenn keine Übereinstimmung in der Quellzeichenfolge gefunden wird, beginnend mit der Suchposition, oder gibt die Anzahl der Vorkommen des Suchmusters in der Quellzeichenfolge von der angegebenen Startposition zurück.
    Syntax: regexp_count (expression, pattern, position, match_parameter)
    • expression ist ein Zeichenfolgenausdruck. Ein gültiger Zeichenfolgenausdruck (Quellzeichen) ist entweder ein gültiges Attribut, das aktiv ist, oder ein Zeichenfolgenausdruck, der mit Attributen und Operatoren erstellt wird (wie serviceName || operationName).
    • pattern ist ein gültiges reguläres Ausdrucksmuster, das für das Muster zur Validierung und Suche verwendet wird.
    • position ist eine positive Ganzzahl, die angibt, an welcher Stelle des Quellzeichens die Suche beginnen soll. Nachdem das erste Vorkommen gefunden wurde, sucht es nach dem zweiten Vorkommen nach dem ersten.
    • match_parameter ist der Abgleichsparameter, der das Abgleichsverhalten angibt.
      Folgende Werte werden unterstützt:
      • i: Gibt den Abgleich ohne Berücksichtigung der Groß-/Kleinschreibung an.
      • c: Gibt den Abgleich zwischen Groß- und Kleinschreibung und Akzenten an.
      • n: Lässt Punkt (.) im regulären Ausdruck zu. Wenn dieses Zeichen ausgelassen wird, stimmt der Punkt nicht mit dem neuen Zeilenzeichen überein.
      • m: Die Quellzeichenfolge wird als mehrere Zeilen behandelt. caret (^) ist der Start und $ ist das Ende einer beliebigen Zeile in der Quellzeichenfolge und nicht nur am Anfang des Endes der gesamten Quellzeichenfolge. Wenn dieser Parameter ausgelassen wird, wird die Quellzeichenfolge als einzelne Zeile behandelt.
      • x: Leerzeichen werden ignoriert. Standardmäßig stimmen Leerzeichen mit sich selbst überein.

    Beispiel:

    show TRACES traceId where REGEXP_COUNT(traceId, 'a', 7, 'c') >= 2

    Im obigen Beispiel sucht die Abfrage nach Traces, die mindestens 2 Vorkommen von char:a innerhalb von traceId aufweisen, wobei die Suche an Position 7 der traceId beginnt.

    Hinweis

    Sie können auch nur 2 Argumente angeben:

    regexp_count (expression, pattern)

    Beispiel: show TRACES traceId where REGEXP_COUNT(traceId, 'a') >= 2

    Das obige Beispiel sucht nach Traces, die mindestens 2 Vorkommen des Musters/Zeichens aufweisen: a innerhalb des traceId.

  • regexp_instr: Sucht nach einem regulären Ausdrucksmuster in einem bestimmten Ausdruck und gibt die Startposition des ersten Zeichens des Musters in der Zeichenfolge zurück.
    Syntax: regexp_instr (expression, pattern)
    • expression ist ein Zeichenfolgenausdruck. Ein gültiger Zeichenfolgenausdruck ist entweder ein gültiges Attribut, das aktiv ist (wie traceId und serviceName) oder ein Zeichenfolgenausdruck, der mit Attributen und Operatoren erstellt wird (wie serviceName || operationName).
    • pattern ist ein gültiges reguläres Ausdrucksmuster, das für das Muster zur Validierung und Suche verwendet wird.

    Beispiel:

    show TRACES REGEXP_INSTR(serviceName, 'cli') as RegexInstr, traceId

    Im obigen Beispiel sucht die Abfrage nach Traces mit serviceName-Werten, die mit dem Muster/Zeichen cli beginnen.

  • regexp_like: Führt einen Abgleich regulärer Ausdrücke mit dem angegebenen Zeichenfolgenausdruck aus und gibt die übereinstimmenden Zeichenfolgenausdrücke (Attribute) zurück.

    Syntax: regexp_like (expression, pattern, match_parameter)

    • expression ist ein Zeichenfolgenausdruck. Ein gültiger Zeichenfolgenausdruck ist entweder ein gültiges Attribut, das aktiv ist (wie traceId und serviceName) oder ein Zeichenfolgenausdruck, der mit Attributen und Operatoren erstellt wird (wie serviceName || operationName).
    • pattern ist ein gültiges reguläres Ausdrucksmuster, das für das Muster zur Validierung und Suche verwendet wird.
    • match_parameter ist der Abgleichsparameter, der das Abgleichsverhalten angibt. Dies ist ein optionaler Schritt.
      Folgende Werte werden unterstützt:
      • i: Gibt den Abgleich ohne Berücksichtigung der Groß-/Kleinschreibung an.
      • c: Gibt den Abgleich zwischen Groß- und Kleinschreibung und Akzenten an.
      • n: Lässt Punkt (.) im regulären Ausdruck zu. Wenn dieses Zeichen ausgelassen wird, stimmt der Punkt nicht mit dem neuen Zeilenzeichen überein.
      • m: Die Quellzeichenfolge wird als mehrere Zeilen behandelt. caret (^) ist der Start und $ ist das Ende einer beliebigen Zeile in der Quellzeichenfolge und nicht nur am Anfang des Endes der gesamten Quellzeichenfolge. Wenn dieser Parameter ausgelassen wird, wird die Quellzeichenfolge als einzelne Zeile behandelt.
      • x: Leerzeichen werden ignoriert. Standardmäßig stimmen Leerzeichen mit sich selbst überein.

    Beispiele:

    • show TRACES traceId where REGEXP_LIKE(traceId, 'aa')

      Im obigen Beispiel sucht die Abfrage nach Traces mit traceId-Werten, die dem Muster/Zeichen entsprechen: aa.

    • show TRACES traceId where REGEXP_LIKE(traceId, '^aa', 'c')

      Im obigen Beispiel sucht die Abfrage nach Traces mit traceId-Werten, die dem Muster/Zeichen aa entsprechen (Groß-/Kleinschreibung beachten).

  • regexp_replace: Sucht nach einem Quellmuster in einer bestimmten Zeichenfolge und gibt eine Zeichenfolge zurück, bei der das Quellmuster durch das angegebene Muster ersetzt wird.
    Syntax: regexp_replace (expression, pattern, replace_string, numeric expression)
    • expression ist ein Zeichenfolgenausdruck. Ein gültiger Zeichenfolgenausdruck (Quellzeichen) ist entweder ein gültiges Attribut, das aktiv ist (wie traceId oder serviceName) oder ein Zeichenfolgenausdruck, der mit Attributen und Operatoren erstellt wird (wie serviceName || operationName).
    • pattern ist ein gültiges reguläres Ausdrucksmuster, das für das Muster zur Validierung und Suche verwendet wird.
    • replace_string ist die Zeichenfolge, die das Vorkommen der Quellzeichenfolge ersetzt.
    • numeric expression ist eine Zahl oder ein gültiger numerischer Ausdruck, der das Vorkommen der zu ersetzenden Quellzeichenfolge angibt. Dies ist ein optionaler Schritt.
    Beispiele:
    • show TRACES regexp_replace(traceId, 'aa', 'ee') as traceIdReplaced, traceId where REGEXP_LIKE(traceId, 'aa')

    • show TRACES regexp_replace(traceId, 'a', 'apm', 3) as traceIdReplaced, traceId where REGEXP_LIKE(traceId, 'a')

    Hinweis

    Sie können auch 5 Argumente angeben.

    regexp_replace (expression, pattern, replace_string, numeric expression1, numeric expression2)

    In diesem Fall ist numeric expression1 eine Zahl oder ein gültiger numerischer Ausdruck, der das Vorkommen der Quellzeichenfolge angibt, von der die Suche gestartet werden soll. numeric expression2 ist eine Zahl oder ein gültiger numerischer Ausdruck, der das Vorkommen der zu ersetzenden Quellzeichenfolge angibt.

    Beispiel: Verwenden Sie die folgende Abfrage, um die Musterübereinstimmung mit dem ersten Vorkommen des Musters/Zeichens a zu starten, und ersetzen Sie das zweite Vorkommen von a durch die Zeichenfolge apm.
    show TRACES regexp_replace(traceId, 'a', 'apm', 1, 2) as traceIdReplaced, traceId where REGEXP_LIKE(traceId, 'aa')
  • regexp_substr: Sucht nach einem regulären Ausdrucksmuster in einem bestimmten Zeichenfolgenausdruck oder Attribut und gibt die Teilzeichenfolge aus diesem Zeichenfolgenausdruck oder -attribut zurück.
    Syntax: regexp_substr (expression, pattern)
    • expression ist ein Zeichenfolgenausdruck. Ein gültiger Zeichenfolgenausdruck (Quellzeichen) ist entweder ein gültiges Attribut, das aktiv ist (wie traceId oder serviceName) oder ein Zeichenfolgenausdruck, der mit Attributen und Operatoren erstellt wird (wie serviceName || operationName).
    • pattern ist ein gültiges reguläres Ausdrucksmuster, das für das Muster zur Validierung und Suche verwendet wird.

    Beispiel 1:

    show TRACES REGEXP_SUBSTR(serviceName, 'cli') as RegexSubstr, traceId

    Das obige Beispiel sucht nach Traces mit serviceName, die mit dem Muster/Zeichen cli beginnen.

    Beispiel 2:

    show TRACES traceId, serviceName, REGEXP_SUBSTR(serviceName, 'RUM') as RegexSubstr where REGEXP_SUBSTR(serviceName, 'RUM') = 'RUM'

    Im obigen Beispiel wird nach Traces gesucht, die serviceName mit "RUM" enthalten und RUM aus serviceName entfernen und zurückgeben.

  • span_summary: Gibt eine Zusammenfassung der Spans in einem Trace zurück. Diese Funktion kann nur mit show(traces) und in nicht gruppierten Abfragen verwendet werden.

    Beispiel:

    span_summary() as Spans

  • stddev: Gibt die Standardabweichung des angegebenen Ausdrucks zurück.

    Beispiel:

    stddev(traceDuration+1)

  • substr: Gibt eine Teilzeichenfolge aus der angegebenen Zeichenfolge zurück.
    Syntax: substr (expression, numeric expression1, numeric expression2)
    • expression ist ein Zeichenfolgenausdruck. Ein gültiger Zeichenfolgenausdruck (Quellzeichen) ist entweder ein gültiges Attribut, das aktiv ist (wie traceId oder serviceName) oder ein Zeichenfolgenausdruck, der mit Attributen und Operatoren erstellt wird (wie serviceName || operationName).
    • numeric expression1 (start position) ist ein numerischer Ausdruck, der eine Zahl oder eine Zahl ergibt, die die Startposition der Teilzeichenfolge angibt.

      Wenn start position 0 ist, wird es als 1 behandelt.

      Wenn start position positiv ist, zählt die Funktion ab dem Anfang des Zeichens, um das erste Zeichen zu finden. Wenn es negativ ist, zählt die Funktion rückwärts vom Ende des Chars.

    • numeric expression2 (length) ist ein numerischer Ausdruck, der eine Zahl oder eine Zahl ergibt, die die Länge der Teilzeichenfolge ab der Startposition der Teilzeichenfolge angibt.

      length ist immer positiv und gibt nur so viele Zeichen zurück, wie im Wert vorhanden sind.

      Wenn length kleiner als 1 ist, wird Null zurückgegeben. Wenn length größer als die Länge des Zeichenfolgenausdrucks (Quellzeichenfolge) ist, wird die gesamte Zeichenfolge zurückgegeben.

    Beispiel:

    show TRACES SUBSTR(traceId, 0, 1) as traceShortId, traceId

    Das obige Beispiel durchsucht die traceShortId mit der traceShortId Länge 1, beginnend an Position 1 der traceId.

  • sum: Gibt den Aggregatwert einer numerischen Dimension zurück.

    Beispiel:

    sum(ErrorCount) as "Errors"

  • time_bucket: Aufgrund des Zeitattributs für die Tabelle (StartTime oder TraceStartTime) und einer unterstützten Zeitgranularität gibt die Funktion eine Bucket-Nummer zurück, in die die Zeile fällt. Dies wird hauptsächlich beim Ausdrücken von Zeitreihenabfragen verwendet.

    Beispiel:

    In einer Span-Abfrage: time_bucket(15, StartTime)

    In einer Traceabfrage: time_bucket(15, TraceStartTime)

    Ein time_bucket()-Wert kann mit dem folgenden Java-Ausdruck wieder in eine unixe Epochzeit in Millisekunden konvertiert werden: bucketNumber * TimeUnit.MINUTES.toMillis(bucketInMinutes);

  • time_bucket_start: Gibt den Start des Zeit-Buckets als Zeitwert in Millisekunden seit epoch (Einheit: EPOCH_TIME_MS) zurück. Er kann mit einem einzelnen Argument, der Größe des Buckets in Minuten oder ohne Argumente aufgerufen werden. In diesem Fall bestimmt das System die Bucket-Größe basierend auf der Zeitspanne der Abfrage.

    Beispiel:

    In einer Span-Abfrage: time_bucket(15)

    In einer Traceabfrage: time_bucket()

  • total_items: Gibt die Gesamtanzahl der Traces oder Spans zurück, die von der Abfrage berücksichtigt werden.

    Beispiel 1:

    show traces count(*), total_items()

    Beispiel 2:

    show traces count(*), total_items() group by service name

    Hinweis: In Beispiel 1 sind count(*) und total_items() identisch, weil die Abfrage nicht gruppiert ist. In Beispiel 2 bezieht sich count(*) auf die Anzahl der Elemente in der Gruppe für die Zeile, während total_items() denselben Wert wie in Beispiel 1 hat.

  • total_rows: Gibt die Gesamtanzahl der Zeilen zurück, die in der Ergebnismenge angezeigt würden, wenn FIRST x ROWS auf unbegrenzt gesetzt werden könnte.

    Dies kann bei der Suche nach der Kardinalität einer bestimmten Kombination von Abmessungen nützlich sein.

    Beispiel:

    show spans total_rows() where component = 'SERVLET' group by serviceName, operationName first 1 rows

  • unique_values: Gibt die eindeutigen Werte einer Dimension und die Häufigkeit der einzelnen Werte zurück. Wenn eine Dimension fünf oder weniger eindeutige Werte enthält, werden diese in einem Tortendiagramm angezeigt. Wenn eine Dimension mehr als fünf eindeutige Werte enthält, wird in der Spalte ein Link angezeigt, auf den Sie klicken können, um die Liste der eindeutigen Werte anzuzeigen.

    Beispiel:

    unique_values(ApmrumPageUpdateType) as "Page Load/Update"

where Filtert die Ergebnisse, bevor sie gruppiert werden.

Beispiel:

where ApmrumPageUpdateType is not omitted OR ApmrumType='Connection' OR ApmrumType='Script Error'

Die folgenden Ausdrücke werden unterstützt:

  • Boolescher Operator AND von zwei Ausdrücken.

    Beispiel:

    ServiceName='service1' and OperationName='operation1'

  • Boolescher Operator OR von zwei Ausdrücken.

    Beispiel:

    ServiceName='service1' or ServiceName='service2'

  • Gruppierung von (), um die Reihenfolge der Ausdrücke in einem komplexen Ausdruck zu bestimmen.

    Beispiel:

    (ServiceName ='a' or ServiceName='b') and (OperationName='a' or OperationName='b')

  • Vergleich einer Dimension über eine Dimensionsreferenz und einen konstanten Wert. Die folgenden Vorgänge werden unterstützt:

    =,<>, >, >=, <, <=

    Beispiel:

    ServiceName <> 'DoNotReturn'

  • IN-Wertausdruck, der die Dimension mit den aufgeführten Werten vergleicht.

    Beispiel:

    ServiceName in ('service1', 'service2')

  • Wertausdruck IN und NOT IN, der mehrere Dimensionen mit aufgelisteten Werten vergleicht.

    Beispiel:

    (ServiceName, OperationName) in (('service1', 'operation1'))

  • IS OMITTED-Ausdruck, der prüft, ob ein Dimensionswert enthalten ist, oder IS NOT OMITTED, um zu testen, ob ein Dimensionswert fehlt.

    Beispiel:

    OperationName is omitted

  • LIKE-Ausdruck, um Übereinstimmungen eines bestimmten Dimensionswerts zu suchen, oder NOT LIKE, um nach Dimensionswerten zu suchen, mit Ausnahme des angegebenen Wertes.

    Beispiel:

    OperationName like ‘Ajax /path/%’

group by Gruppiert die Ergebnisse nach einer bestimmten Dimension und zeigt sie in Zeilen an.

Beispiel:

group by ServiceName

Wenn die group by-Klausel Teil einer Abfrage mit timeseries oder unique_values ist, wird die Spalte time series oder unique_values() nicht in den Ergebniszeilen angezeigt, in denen die Dimension group by keinen Wert enthält.

Beispiel:

show (traces) UserName as "User Name", unique_values(OperationName), count(*) group by UserName timeseries

Im Beispiel werden die Spans nach der Dimension UserName gruppiert. Wenn in einem Span der Dimension UserName kein Wert zugewiesen ist, zeigt diese Zeile die Spalten timeseries und unique_values nicht an.

having Filtert die Ergebnisse weiter nach der group by-Klausel gruppiert.

Syntax: group by dimension having expression

expression: Der Ausdruck in der having-Klausel kann entweder auf die Ausdrücke in der group by-Klausel oder auf Aggregate zu den Gruppen verweisen.

Die folgenden Ausdrücke werden unterstützt:

  • Boolescher Operator AND von zwei Ausdrücken.

    Beispiel:

    ServiceName='service1' and OperationName='operation1'

  • Boolescher Operator OR von zwei Ausdrücken.

    Beispiel:

    ServiceName='service1' or ServiceName='service2'

  • Gruppierung von (), um die Reihenfolge der Ausdrücke in einem komplexen Ausdruck zu bestimmen.

    Beispiel:

    (ServiceName ='a' or ServiceName='b') and (OperationName='a' or OperationName='b')

  • Vergleich einer Dimension über eine Dimensionsreferenz und einen konstanten Wert. Die folgenden Vorgänge werden unterstützt:

    =,<>, >, >=, <, <=

    Beispiel:

    ServiceName <> 'DoNotReturn'

  • IN-Wertausdruck, der die Dimension mit den aufgeführten Werten vergleicht.

    Beispiel:

    ServiceName in ('service1', 'service2')

  • IN- und NOT IN-Wertausdrücke, die mehrere Dimensionen mit den aufgeführten Werten vergleichen.

    Beispiel:

    (ServiceName, OperationName) in (('service1', 'operation1'))

  • IS OMITTED-Ausdruck, um zu testen, ob ein Dimensionswert enthalten ist, oder IS NOT OMITTED, um zu testen, ob ein Dimensionswert fehlt.

    Beispiel:

    OperationName is omitted

  • LIKE-Ausdruck zum Suchen von Übereinstimmungen mit einem bestimmten Dimensionswert oder NOT LIKE zum Suchen nach Dimensionswerten mit Ausnahme des angegebenen Wertes.

    Beispiel:

    OperationName like ‘Ajax /path/%’

Beispiele:
  • group by errorCount having ErrorCount = 0
  • show traces errorCount, count(*) group by errorCount having errorCount < 10 and count(*) = 10
order by Definiert die Reihenfolge der Liste nach einer bestimmten Dimension in aufsteigender (asc) oder absteigender (desc) Reihenfolge.

Beispiel:

order by avg(ApdexScore) asc

Dies ist eine optionale Klausel. Wenn sie nicht angegeben ist, werden die Ergebnisse nicht sortiert.

Limit-Klausel Begrenzt die Liste auf die angegebene Zahl. Wenn keine Angabe gemacht wird, lautet der Standardwert FIRST 100 ROWS.

Beispiel:

FIRST 5 ROWS

timeseries Zeigt ein Zeitreihendiagramm für die in der select-Klausel für einen definierten Zeitraum ausgewählten Dimensionen an. Sie können die Dimension, für die das Zeitreihendiagramm angezeigt werden soll, in der timeseries-Klausel festlegen. Wenn keine Dimension angegeben ist, werden die Zeitreihendiagramme für jede numerische Dimension in der Klausel für zurückgegebene Ausdrücke angezeigt.

Wenn der Zeitraum (<n> minutes) der Klausel nicht hinzugefügt wird, basiert der Zeitraum auf dem im Trace-Explorer ausgewählten Zeitraum.

Beispiele:

timeseries for avg(TraceDuration) 60 minutes

timeseries

between Zeigt Ergebnisse für die ausgewählten Zeitstempel in UTC-Zeit an. Wenn diese Klausel verwendet wird, setzt sie den im Trace-Explorer ausgewählten Zeitraum außer Kraft.

Beispiel:

BETWEEN 2021-02-17T01:38:49.318Z AND 2021-02-18T01:38:49.318Z

BETWEEN kann auch einen time expression anstelle eines Zeitstempels verwenden.

Beispiel:

BETWEEN queryStartTime() AND queryEndTime()

Zeitausdruck Zeigt eine Zeit oder Dauer in Millisekunden an.