New Relic Now Start training on Intelligent Observability February 25th.
Save your seat.

Möchten Sie Ihre New Relic Daten besser verstehen? New Relic Query Language (NRQL) kann helfen. Mit NRQL können Sie Ihre Daten in Echtzeit analysieren. Auch wenn es auf den ersten Blick überwältigend erscheinen mag – keine Sorge!

In Teil 1 und Teil 2 haben wir 10 wesentliche NRQL-Funktionen und -Klauseln behandelt, die Ihnen helfen, NRQL besser zu verstehen und tiefere Einblicke in Ihre Daten zu gewinnen. Wir haben Prozentsätze, Heatmaps, bedingte Widgets und einige weitere Funktionen und Klauseln behandelt, die Ihnen dabei helfen, Ihre Telemetriedaten mühelos zu analysieren.

Im nächsten Teil dieser Blogserie untersuchen wir vorhandene Funktionen und spannende neue Ergänzungen zu NRQL, die bei der Transformation, Formatierung und Visualisierung von Daten helfen können.

Formatierung

toDateTime

Verwenden Sie diese Funktion, um einen unbearbeiteten Zeitstempel in den von Ihnen gewünschten formatierten Datums-/Uhrzeit-String umzuwandeln.

Dies ist hilfreich beim Umgang mit großen Datasets oder Logs, deren Zeitstempel nicht leicht lesbar sind oder in mehreren verschiedenen Formaten vorliegen. Mit dieser Funktion können Sie diese Zeitstempel in ein für Menschen besser lesbares Format konvertieren, was die Analyse und das Verständnis Ihrer Daten erleichtert.

toDateTime() nimmt drei Argumente an, von denen zwei optional sind:

  • Timestamp: Dies sollte ein unbearbeiteter Zeitstempel im Epochenformat Millisekunden sein. Beispiel: 1709787389000
  • (optional) Pattern: Ein String-Muster zum Formatieren von Datum und Uhrzeit im angegebenen Format. Dies kann variieren, z. B. YYYY-MM-dd HH:mm:ss oder YYYY-MMM-dd hh:mm:ss usw.
  • (optional) Timezone: Ein optionaler Parameter an dritter Stelle zur Angabe der Zeitzone. Im Abschnitt „Referenzen“ finden Sie eine Liste aller unterstützten String-Werte für Zeitzonen.

Hier ist ein Beispiel für einen Zeitstempel, der als yyyy-MM-dd HH:mm:ss z formatiert ist, mit der Zeitzone America/chicago

WITH 1709787389000 as timestampValue 
SELECT toDatetime(timestampValue,'yyyy-MM-dd  HH:mm:ss z', timezone: 'America/Chicago') as formattedTimeStamp 

Sie können anstelle der Zeitzone auch die Klausel WITH TIMEZONE als dritten Parameter verwenden.

WITH 1709787389000 as timestampValue 
SELECT toDatetime(timestampValue, 'yyyy-MM-dd hh:mm:ss') AS 'Formatted TimeStamp' 
FROM Event WITH TIMEZONE 'America/Los_Angeles'

Wenn keine Muster- und Zeitzonenparameter angegeben werden, verwendet die Funktion standardmäßig das Format 1970-01-01T00:20:34.567Z, das ebenfalls in UTC ist.

Referenzen


Transformation

jparse

Verwenden Sie diese Funktion, um unbearbeitete JSON-Strings aus Events oder Logs in eine Zuordnungstabelle mit strukturierten Werten zu parsen, auf die direkt im NRQL wie auf einen First-Class-Typ verwiesen werden kann.

jparse() nimmt zwei Argumente an:

  • Attribute: Ein JSON-String-Wert
  • (optional) Path: Ein optionaler Pfadparameter zum Parsen bestimmter Werte aus dem JSON-String.

Hier ist ein einfaches Beispiel mit einem JSON-String, bei dem der Wert des Felds name extrahiert wird:

WITH  '{"name": "Avatar", "gender": "M", "age": 14 }' as jsonString 
SELECT jparse(jsonString)[name] as Name

Wenn kein Schlüsselselektor angegeben ist, gibt die Funktion jparse() ein serialisiertes JSON zurück.

jparse funktioniert auch mit einem Array-String. Wenn Sie ein einfaches Array haben, können Sie es auf die gleiche Weise abfragen wie ein JSON-Objekt und auch hier den Indexwert als Selektor verwenden:

WITH '["key1","key2"]' as jsonString 
SELECT jparse(jsonString)[0]

Der Pfadparameter kann hilfreich sein, wenn ein verschachteltes JSON vorhanden ist und mehrere Werte extrahiert werden müssen. Im folgenden Beispiel enthält das Array eine Liste von Benutzer:innen mit ihren Namen und UserIDs. Der Pfadparameter kann als regulärer Ausdruck bereitgestellt werden, um alle IDs für alle Benutzer:innen abzurufen.

WITH '{"users": [{"name": "A", "id": 5}, {"name": "B", "id": 10}]}' as jsonString, jparse(jsonString, 'users[*].id') as ids 
SELECT ids as UserIDs

Referenzen:

Weitere Informationen finden Sie in der Dokumentation zur Pfadsyntaxreferenz.

mapKeys

Verwenden Sie diese Funktion, um die Liste der Schlüssel aus der bereitgestellten Zuordnungstabelle oder einem JSON-String zu extrahieren. Der JSON-String kann mit der Funktion jparse() in eine Zuordnungstabelle konvertiert werden.

mapKeys nimmt ein einzelnes Argument an: attribute: ein Zuordnungs-Dataset.

Hier ist ein einfaches Beispiel für das Extrahieren aller Schlüssel aus einem bereitgestellten JSON-String:

WITH '{"name": "Avatar", "gender": "M", "age": 14 }' as jsonString 
SELECT mapKeys(jparse(jsonString)) as keys

Die obige NRQL-Abfrage deserialisiert das JSON, ordnet alle Schlüssel zu und gibt sie zurück, d. h.: [’name’,’gender’,age’].

Diese Funktion funktioniert auch mit verschachtelten JSON-Strings. Allerdings extrahiert sie nur die Schlüssel der ersten Ebene:

WITH '{"value1": "test", "value2": {"nestedValue1": [1, 2, 3], "nestedValue2": 100}}' as jsonString 
SELECT mapKeys(jparse(jsonString)) AS keys

mapValues

Wie die Funktion mapKeys kann mapValues dabei helfen, alle Werte aus dem bereitgestellten Zuordnungs-Dataset zu extrahieren.

mapValues nimmt ein einzelnes Argument an: attribute: ein Zuordnungs-Dataset.

Extrahieren wir nun die Werte aus diesem einfachen JSON-String:

WITH '{"name": "Avatar", "gender": "M", "age": 14 }' as jsonString 
SELECT mapValues(jparse(jsonString)) as Values

Für den verschachtelten JSON-String funktioniert es auf die gleiche Weise, allerdings werden nur die Werte der ersten Ebene extrahiert und deserialisiert.

WITH '{"value1": "test", "value2": {"nestedValue1": [1, 2, 3], "nestedValue2": 100}}' as jsonString 
SELECT mapValues(jparse(jsonString)) AS values

Der Wert des verschachtelten Objekts kann angezeigt werden, indem die Visualisierung in den Diagrammtyp JSON geändert wird:


Visualisierung

Im vorherigen Blogbeitrag dieser Reihe haben wir einige sofort einsatzbereite Visualisierungen wie Heatmaps, Histogramme und Zuordnungs-Widgets behandelt. Hier möchte ich eine vorhandene NRQL-Klausel (wieder) einführen, die beim Glätten der Diagramme oder beim Bereitstellen weiterer Datenpunkte für Visualisierungen wie Linien-, Flächen- oder gestapelte Säulendiagramme helfen kann.

Slide By

Die SLIDE BY-Klausel ermöglicht sogenannte gleitende Fenster. Gleitende Fenster gruppieren Daten in überlappende Zeitfenster oder Zeit-Buckets, was sich von kaskadierenden Fenstern unterscheidet.

Diese Fenster können dazu beitragen, Liniendiagramme zu glätten und Ihren Diagrammen eine höhere Auflösung zu verleihen. Diese Feature kann besonders nützlich sein, wenn Sie ein größeres Dataset in einem TIMESERIES-Format mit mehr Daten in jedem Zeitabschnitt auswerten möchten.

Syntax

Die SLIDE BY-Klausel kann zusammen mit der TIMESERIES-Klausel verwendet werden.

Die Syntax lautet wie folgt: SELECT ... TIMESERIES units SLIDE BY units

Verwendung

Das folgende Beispiel zeigt die Abfrage der durchschnittlichen Dauer von Transaktionen SINCE 5 MINUTES AGO unter Verwendung eines TIMESERIES-Bucket von jeweils 1 Minute. Das Diagramm unten zeigt Ergebnisse aus 5 Buckets oder Zeitfenstern.

SELECT average(duration) FROM Transaction
TIMESERIES 1 minute SINCE 5 minutes ago

Mithilfe der SLIDE BY-Klausel kann dasselbe Diagramm ohne die Lücken in jedem Bucket angezeigt werden.

SELECT average(duration) FROM Transaction
TIMESERIES 1 minute SLIDE BY 30 seconds
SINCE 5 minutes ago

Hier ist ein weiteres Beispiel mit PageView-Metriken in einem Liniendiagramm.

Die Klausel TIMESERIES bietet mehr Buckets und ein größeres Dataset zur Analyse. Wenn Sie jedoch mehr Datenpunkte im gleitenden Fensterbereich analysieren möchten, fügen Sie einfach die Klausel SLIDE BY zur gleichen Abfrage hinzu, wie in diesem Beispiel gezeigt:

FROM PageView SELECT count(*) TIMESERIES 1 minute SLIDE BY 10 seconds

Beachten Sie, dass die Bucket-Größe gleich bleibt, die Datenpunkte jedoch weitaus höher sind als zuvor, sodass Sie eine höher aufgelöste Vorschau der PageView-Metriken erhalten.

Referenzen:

Fazit

Durch die Beherrschung von NRQL können Sie Ihre Daten erfassen, transformieren und interpretieren, sodass Sie das Gesamtbild in leicht verständliche Teile zerlegen können. Auf diese Weise können Sie Probleme erkennen, sobald sie auftreten, und Ihre Daten in Echtzeit analysieren, sodass Sie Ihre Telemetriedaten optimal nutzen können. Egal, ob Sie die Performance optimieren, Trends erkennen, wichtige Metriken zur Unterstützung geschäftlicher Entscheidungen überwachen oder einfach nur Dashboards mit benutzerdefinierten Daten erstellen möchten: NRQL ist ein unverzichtbares Tool, das Ihnen dabei helfen kann, Ihre Daten umfassend zu verstehen.