Requêtes StableNet

Cette section s'applique uniquement aux systèmes intégrés à StableNet®.

Les données StableNet® peuvent être interrogées à partir d'un ensemble de données agrégées dans une base de données SKOOR locale ainsi qu'en temps réel à partir de l'API StableNet®. Les directives suivantes permettent de combiner et d'optimiser ces deux méthodes.

Préparez une requête de données matérialisées pour les appareils et les mesures

L'exemple de requête suivant fournit des données de base à utiliser avec un widget FilterMatrix (par exemple, un filtre pour les appareils ou les mesures) ainsi que pour joindre les données de mesure provenant de l'API StableNet® ou du tableau de données agrégées. La source de données doit être définie comme étant de type 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

Comme les données relatives aux appareils et aux mesures ne changent pas très souvent, cette requête doit être matérialisée. Les performances seront ainsi considérablement améliorées.

Définissez l'intervalle d'actualisation sur quotidien et créez des index pour tous les attributs :

image-20240513-142234.png

Joindre une table externe pour les données en temps réel

En plus de la requête de données matérialisées préparée, les données provenant de l'API StableNet® peuvent être jointes à l'aide d'une table étrangère.

Le mot-clé FROM dans l'exemple suivant pointe vers la requête matérialisée préparée ci-dessus.

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}

Dans le tableau de bord ou l'aperçu des données, les attributs suivants doivent être définis pour cette requête d'exemple :

image-20240516-132209.png
  • begin/end : horodatage ISO 8601, par exemple 2024-05-01T00:00:00Z

  • bucket_size : intervalle de temps en mots tels que heure, jour, mois, etc.

  • metric_name : nom de métrique StableNet® valide, tel que Round Trip Time

Au lieu de metric_name, essayez l'attribut metric_key dans la clause WHERE pour sélectionner une métrique spécifique si plusieurs sont disponibles

Joindre la table de données agrégées

Si les performances sont plus importantes que les données en temps réel, il est préférable d'utiliser la table de données agrégées plutôt que les tables externes.

Le mot-clé FROM dans l'exemple suivant pointe vers la requête matérialisée préparée ci-dessus.

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}

Dans le tableau de bord ou l'aperçu des données, les attributs suivants doivent être définis pour cette requête exemple :

image-20240516-132037.png
  • begin/end : horodatage ISO 8601, par exemple 2024-05-01T00:00:00Z

  • metric_name : nom de métrique StableNet® valide, tel que Round Trip Time

Au lieu de metric_name, essayez l'attribut metric_key dans la clause WHERE pour sélectionner une métrique spécifique si plusieurs sont disponibles

Tables externes

Nom

Champs

Qualificatifs

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 (obligatoire)
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 (obligatoire)
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(secondes)
"timestamp" TIMESTAMPTZ

min double precision
max double precision
avg double precisiontag_filter TEXT



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

 

Bien que measurement_id et metric_key soient facultatifs, il n'est pas recommandé d'exécuter des requêtes sans eux. Cela entraîne la lecture des données de toutes les mesures et de tous les indicateurs, ce qui peut prendre beaucoup de temps et imposer une charge importante au server StableNet. Cela n'est conseillé que pour des intervalles de temps très courts (< 1 h). Si plusieurs mesures et indicateurs sont nécessaires, il convient d'utiliser la table stablenet_measurement_data_aggregated.

Données de mesure agrégées

Agrégées par heure, mises à jour automatiquement toutes les heures. Peuvent être utilisées pour effectuer des requêtes analytiques sur un large éventail de mesures et sur de longues périodes.

Il s'agit essentiellement d'une hypertable Timescale (https://docs.timescale.com/ ). La taille des blocs est de 7 jours, les blocs sont compressés après 7 jours.

Nom

Champs

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 Contient uniquement les données pour les clés métriques configurées.