StableNet-Abfragen

Dieser Abschnitt gilt nur für mit StableNet® integrierte Systeme

StableNet®-Daten können sowohl aus einem aggregierten Datensatz in einer lokalen SKOOR-Datenbank als auch in Echtzeit über die StableNet®-API abgefragt werden. Die folgenden Richtlinien helfen, diese beiden Methoden zu kombinieren und zu optimieren.

Bereiten Sie eine materialisierte Datenabfrage für Geräte und Messungen vor

Die folgende Beispielabfrage liefert Basisdaten für die Verwendung mit einem FilterMatrix-Widget (z. B. Filter für Geräte oder Messungen) sowie für die Verknüpfung von Messdaten aus der StableNet® API oder der Tabelle mit aggregierten Daten. Die Datenquelle muss auf den Typ StableNet eingestellt sein.

-- Data query example "device_measurement"

SELECT   
  std.id AS device_id,
  std.display_name AS device_name,
  sm.id as measurement_id,
  sm.name as measurement_name
FROM stablenet_taggable_device std
JOIN stablenet_measurement sm 
  ON std.id = sm.dest_device_id

Da sich Geräte- und Messdaten nicht sehr oft ändern, sollte diese Abfrage materialisiert werden. Die Leistung wird dadurch erheblich gesteigert.

Setzen Sie das Aktualisierungsintervall auf täglich und erstellen Sie Indizes für alle Attribute:

image-20240513-142234.png

Join foreign table for realtime data

Zusätzlich zu der vorbereiteten materialisierten Datenabfrage können Daten aus der StableNet® API über eine fremde Tabelle verbunden werden.

Das Schlüsselwort FROM im folgenden Beispiel verweist auf die oben vorbereitete materialisierte Abfrage.

SELECT   
  dm.device_id,
  dm.device_name,
  dm.measurement_name,
  dm.measurement_id,
  sma.metric_key,
  sma.metric_name,
  sma.interval,
  sma.min,
  sma.max,
  sma.avg,
  sma.timestamp
FROM device_measurement dm
JOIN stablenet_measurement_data sma 
  ON dm.measurement_id = sma.measurement_id
WHERE sma.start = ${begin}::timestamptz
  AND sma."end" = ${end}::timestamptz
  AND sma.bucket_size = EXTRACT(
    EPOCH FROM ('1 ' || ${bucket_size})::interval
  )::integer
  AND sma.metric_name = ${metric_name}

Im Dashboard oder in der Datenvorschau müssen die folgenden Attribute für diese Beispielabfrage festgelegt werden:

image-20240516-132209.png
  • Anfang/Ende: ISO 8601-Zeitstempel, z. B. 2024-05-01T00:00:00Z

  • bucket_size: Zeitbereich in Worten wie Stunde, Tag, Monat, usw.

  • metric_name: Ein gültiger StableNet®-Metrikname wie Round Trip Time

Versuchen Sie anstelle von metric_name das Attribut metric_key in der WHERE-Klausel, um eine bestimmte Metrik auszuwählen, wenn mehr als eine vorhanden ist

Aggregierte Datentabelle verbinden

Wenn die Leistung wichtiger ist als die Echtzeitdaten, sollte die aggregierte Datentabelle den Fremdtabellen vorgezogen werden.

Das Schlüsselwort FROM im folgenden Beispiel verweist auf die oben vorbereitete materialisierte Abfrage.

SELECT   
  dm.device_id,
  dm.device_name,
  dm.measurement_name,
  dm.measurement_id,
  sma.metric_key,
  sma.metric_name,
  sma.interval,
  sma.min,
  sma.max,
  sma.avg,
  sma.timestamp
FROM device_measurement dm
JOIN stablenet_measurement_data_aggregated sma 
  ON dm.measurement_id = sma.measurement_id
WHERE sma.timestamp BETWEEN ${begin}::timestamptz AND ${end}::timestamptz
  AND sma.metric_name = ${metric_name}

Im Dashboard oder in der Datenvorschau müssen die folgenden Attribute für diese Beispielabfrage gesetzt werden:

image-20240516-132037.png
  • Anfang/Ende: ISO 8601-Zeitstempel, z. B. 2024-05-01T00:00:00Z

  • metric_name: Ein gültiger StableNet®-Metrikname wie Round Trip Time

Versuchen Sie anstelle des metric_name das metric_key-Attribut in der WHERE-Klausel, um eine bestimmte Metrik auszuwählen, wenn mehr als eine vorhanden ist

Fremdtabellen

Name

Felder

Bezeichner

stablenet_info

server_name TEXT
name TEXT
version TEXT
technical_version TEXT

stablenet_taggable

server_name TEXT
domain TEXT
id BIGINT
name TEXT
display_name TEXT
state TEXT
attribute_tags JSONB
custom_tags JSONB
tag_filter TEXT

domain TEXT (obligatorisch)
id BIGINT
tag_filter TEXT

stablenet_taggable_device

server_name TEXT
id BIGINT
name TEXT
display_name TEXT
state TEXT
attribute_tags JSONB
custom_tags JSONB
tag_filter TEXT

id BIGINT
tag_filter TEXT

stablenet_taggable_interface

server_name TEXT
id BIGINT
name TEXT
display_name TEXT
state TEXT
attribute_tags JSONB
custom_tags JSONB
tag_filter TEXT

id BIGINT
tag_filter TEXT

stablenet_taggable_job

server_name TEXT
id BIGINT
name TEXT
display_name TEXT
state TEXT
attribute_tags JSONB
custom_tags JSONB
tag_filter TEXT

id BIGINT
tag_filter TEXT

stablenet_taggable_link

server_name TEXT
id BIGINT
name TEXT
display_name TEXT
state TEXT
attribute_tags JSONB
custom_tags JSONB
tag_filter TEXT

id BIGINT
tag_filter TEXT

stablenet_taggable_service

server_name TEXT
id BIGINT
name TEXT
display_name TEXT
state TEXT
attribute_tags JSONB
custom_tags JSONB
tag_filter TEXT

id BIGINT
tag_filter TEXT

stablenet_taggable_agent

server_name TEXT
id BIGINT
name TEXT
display_name TEXT
state TEXT
attribute_tags JSONB
custom_tags JSONB
tag_filter TEXT

id BIGINT
tag_filter TEXT

stablenet_tag_category

server_name TEXT
domain TEXT
id BIGINT
name TEXT
description TEXT

domain TEXT (obligatorisch)
id BIGINT

stablenet_measurement

server_name TEXT
id BIGINT
name TEXT
description TEXT
categories JSONB
dest_device_id BIGINT
dest_interface_id BIGINT
agent_id BIGINT
start_time TIMESTAMPTZ
end_time TIMESTAMPTZ
state TEXT
type TEXT
template_name TEXT
permanent BOOL
payload JSONB
active BOOL
tag_filter TEXT

tag_filter TEXT
dest_device_id BIGINT

stablenet_measurement_metric

server_name TEXT
measurement_id BIGINT
data_id BIGINT
description TEXT
expected_interval INT
key TEXT
name TEXT
only_average BOOL
unit TEXT

measurement_id BIGINT

stablenet_measurement_data

server_name TEXT
measurement_id BIGINT
metric_key TEXT
metric_name TEXT
"start" TIMESTAMPTZ
"end" TIMESTAMPTZ
bucket_size INT (Sekunden)
"timestamp" TIMESTAMPTZ
min double precision
max double precision
avg double precision
tag_filter TEXT

measurement_id BIGINT
metric_key TEXT
"start" TIMESTAMPTZ (obligatorisch)
"end" TIMESTAMPTZ (obligatorisch)
bucket_size INT (obligatorisch)
tag_filter TEXT

Obwohl measurement_id und metric_key optional sind, ist es nicht empfehlenswert, Abfragen ohne sie auszuführen. Dadurch werden die Messdaten aller Messungen und aller Metriken gelesen, was sehr lange dauern kann und den StableNet Server stark belastet. Nur ratsam für sehr kurze Zeiträume < 1h. Wenn mehrere Messungen und Metriken benötigt werden, sollte die Tabelle stablenet_measurement_data_aggregated verwendet werden.

Aggregierte Messdaten

Aggregiert nach Stunden, automatisch jede Stunde aktualisiert. Kann verwendet werden, um Analyseabfragen über ein breites Spektrum von Messungen und über große Zeitspannen durchzuführen.

Ist im Grunde eine Zeitskala-Hypertabelle(https://docs.timescale.com/ ). Chunk-Größe ist 7 Tage, Chunks werden nach 7 Tagen komprimiert.

Name

Felder

stablenet_measurement_data_aggregated

server_name TEXT
measurement_id BIGINT
metric_key TEXT
metric_name TEXT
"timestamp" TIMESTAMPTZ NOT NULL
min double precision
max double precision
avg double precision

stablenet_measurement_data_aggregated enthält nur Daten für konfigurierte metrische Schlüssel.