Interrogazione di StableNet

Questa sezione si applica solo ai sistemi integrati con StableNet®.

I dati StableNet® possono essere interrogati da un set di dati aggregati su un database SKOOR locale, nonché in tempo reale dall'API StableNet®. Le seguenti linee guida aiutano a combinare e ottimizzare questi due metodi.

Preparare una query di dati materializzata per dispositivi e misurazioni

La seguente query di esempio fornisce dati di base da utilizzare con un widget FilterMatrix (ad esempio, filtro per dispositivi o misurazioni) e per unire i dati di misurazione dall'API StableNet® o dalla tabella di dati aggregati. L'origine dati deve essere impostata su uno dei tipi StableNet.

-- 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

Poiché i dati relativi ai dispositivi e alle misurazioni non cambiano molto spesso, questa query dovrebbe essere materializzata. Le prestazioni saranno notevolmente migliorate.

Impostare l'intervallo di aggiornamento su giornaliero e creare indici per tutti gli attributi:

image-20240513-142234.png

Unire la tabella esterna per i dati in tempo reale

Oltre alla query dei dati materializzati preparata, è possibile unire i dati provenienti dall'API StableNet® utilizzando una tabella esterna.

La parola chiave FROM nell'esempio seguente punta alla query materializzata preparata sopra.

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}

Nella dashboard o nell'anteprima dei dati, è necessario impostare i seguenti attributi per questa query di esempio:

image-20240516-132209.png
  • inizio/fine: timestamp ISO 8601, ad esempio 2024-05-01T00:00:00Z

  • bucket_size: intervallo di tempo in parole come ora, giorno, mese, ecc.

  • metric_name: un nome di metrica StableNet® valido, ad esempio Round Trip Time

Invece del metric_name, prova l'attributo metric_key nella clausola WHERE per selezionare una metrica specifica se ne sono disponibili più di una

Unire la tabella dei dati aggregati

Se le prestazioni sono più importanti dei dati in tempo reale, è preferibile utilizzare la tabella dei dati aggregati piuttosto che le tabelle esterne.

La parola chiave FROM nell'esempio seguente punta alla query materializzata preparata sopra.

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}

Nella dashboard o nell'anteprima dei dati, è necessario impostare i seguenti attributi per questa query di esempio:

image-20240516-132037.png
  • begin/end: timestamp ISO 8601, ad esempio 2024-05-01T00:00:00Z

  • metric_name: un nome di metrica StableNet® valido come Round Trip Time

Invece di metric_name, provare l'attributo metric_key nella clausola WHERE per selezionare una metrica specifica se ne è disponibile più di una

Tabelle esterne

Nome

Campi

Qualificatori

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 (obbligatorio)
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 (obbligatorio)
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 TEXTmeasurement_id BIGINTmetric_key TEXTmetric_name TEXT"start" TIMESTAMPTZ"end" TIMESTAMPTZbucket_size INT(secondi)
"timestamp" TIMESTAMPTZ

min double precision
max double precision
avg double precisiontag_filter TEXT



measurement_id BIGINTmetric_key TEXT"start" TIMESTAMPTZ(obbligatorio)
"end" TIMESTAMPTZ(obbligatorio)
bucket_size INT(obbligatorio)
tag_filter TEXT

 

Sebbene measurement_id e metric_key siano opzionali, non è consigliabile eseguire query senza di essi. Ciò comporta la lettura dei dati di tutte le misurazioni e di tutte le metriche, operazione che potrebbe richiedere molto tempo e comportare un carico elevato sul server StableNet. Consigliabile solo per intervalli di tempo molto brevi < 1h. Se sono necessarie più misurazioni e metriche, è necessario utilizzare la tabella stablenet_measurement_data_aggregated.

Dati di misurazione aggregati

Aggregati per ora, aggiornati automaticamente ogni ora. Possono essere utilizzati per eseguire query analitiche su un'ampia gamma di misurazioni e su intervalli di tempo estesi.

Si tratta fondamentalmente di una hypertable Timescale (https://docs.timescale.com/ ). La dimensione dei blocchi è di 7 giorni, i blocchi vengono compressi dopo 7 giorni.

Nome

Campi

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 contiene solo dati per le chiavi metriche configurate.