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 sur 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éparer 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 des données de mesure provenant de l'API StableNet® ou de la table de données agrégées. La source de données doit être 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

Étant donné que 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 s'en trouveront considérablement améliorées.

Définissez l'intervalle de rafraîchissement comme étant quotidien et créez des index pour tous les attributs :

image-20240513-142234.png

Joindre une table étrangère 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 de l'API StableNet® peuvent être jointes à l'aide d'une table étrangère.

Le mot-clé FROM dans l'exemple suivant renvoie à 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 cet exemple de requête :

image-20240516-132209.png
  • début/fin : Horodatage ISO 8601, par exemple 2024-05-01T00:00:00Z

  • bucket_size : Période de temps en mots comme l'heure, le jour, le mois, etc.

  • metric_name : Un nom de métrique StableNet® valide comme Round Trip Time (temps de trajet aller-retour)

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

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

Si les performances sont plus importantes que les données en temps réel, la table de données agrégées doit être préférée aux tables étrangères.

Le mot-clé FROM dans l'exemple suivant renvoie à 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 cet exemple de requête :

image-20240516-132037.png
  • début/fin : Horodatage ISO 8601, par exemple 2024-05-01T00:00:00Z

  • metric_name : Un nom de métrique StableNet® valide comme Round Trip Time (temps de trajet aller-retour)

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

Tables étrangères

Nom de la table

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 TEXT
measurement_id BIGINT
metric_key TEXT
metric_name TEXT
"start" TIMESTAMPTZ
"end" TIMESTAMPTZ
bucket_size INT (secondes)
"timestamp" TIMESTAMPTZ
min double precision
max double precision
avg double precision
tag_filter TEXT

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

Bien que measurement_id et metric_key soient optionnels, il n'est pas recommandé d'exécuter des requêtes sans eux. En effet, les données de toutes les mesures et de toutes les métriques sont lues, ce qui peut prendre beaucoup de temps et imposer une charge importante au serveur StableNet. Cela n'est conseillé que pour des périodes très courtes < 1h. Si plusieurs mesures et métriques sont nécessaires, la table stablenet_measurement_data_aggregated doit être utilisée.

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 grandes plages de temps.

Il s'agit essentiellement d'une échelle de temps hypertable(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 des données pour les clés métriques configurées.