StableNet® Foreign Data Wrapper

Voraussetzungen

Eine PostgreSQL-Datenbank mit einem Benutzer, der berechtigt ist, Datenbankobjekte zu ändern, ist erforderlich. Der Fremddaten-Wrapper muss auf der gleichen Server-Instanz installiert sein, auf der auch der Datenbankserver läuft.

Beispiel: Anlegen der Datenbank infosim im Besitz der Rolle infosim:

export DB_NAME=infosim
mkdir -p /var/lib/pgsql/custom/user_tblspc/${DB_NAME}_tblspc/tab_space/${DB_NAME} \
 /var/lib/pgsql/custom/user_tblspc/${DB_NAME}_tblspc/idx_space/${DB_NAME} && \
 chown -R postgres:postgres /var/lib/pgsql/custom/user_tblspc
psql -Upostgres -c "CREATE ROLE $DB_NAME WITH LOGIN PASSWORD '$DB_NAME';"
psql -Upostgres -c "CREATE TABLESPACE ${DB_NAME}_tab OWNER $DB_NAME \
LOCATION '/var/lib/pgsql/custom/user_tblspc/${DB_NAME}_tblspc/tab_space/$DB_NAME';"
psql -Upostgres -c "CREATE TABLESPACE ${DB_NAME}_idx OWNER $DB_NAME \
LOCATION '/var/lib/pgsql/custom/user_tblspc/${DB_NAME}_tblspc/idx_space/$DB_NAME';"
psql -Upostgres -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_NAME TEMPLATE template0 \
TABLESPACE ${DB_NAME}_tab ENCODING 'UTF8' LC_COLLATE 'de_CH.UTF-8' LC_CTYPE 'de_CH.UTF-8';"

Standard-Installation

RPM aus SKOOR Repo installieren

dnf install eranger-stablenet-fdw

Konfiguration

Konfig-Datei

/etc/stablenet-fdw/stablenet-fdw.conf

[global]

accept_insecure_certificate = false
                                        # Accept insecure certificates
                                        # (self-signed, expired, etc.)
                                        # when connecting to the web service
default_user = 
                                        # Default user name for the web service.
                                        # This is used in case no authorization 
                                        # is provided by the SQL client.
default_password =
                                        # Default password for the web service.
                                        # This is used in case no authorization 
                                        # is provided by the SQL client.
skoor_auth_url = http://localhost:8094
                                        # URL of the SKOOR web service
                                        # (default: http://localhost:8094)
                                        # This is used to get the StableNet®
                                        # auth tokens.

[webservice]  

url =
                                        # URL of StableNet® the web service

#[webservice_<server_id>]               # Optional, if multiple StableNet® servers 
                                        # are used. Replace <server_id> with a unique
                                        # identifier for the StableNet® server.
                                        # Only alphanumeric lower case characters are allowed.
                                        # Please note, that every webservice section 
                                        # must have a unique identifier if multiple 
                                        # StableNet® servers are used.

#server_name = 
                                        # Unique name of the connected StableNet®
                                        # server. This should be a human readable
                                        # name, not a technical identifier.
                                        # Defaults to server_id if omitted.
#url =
                                        # URL of the StableNet® the web service

Optionen können auch durch Umgebungsvariablen mit dem Präfix STABLENET_FDW_WEBSERVICE_ und dem Optionsnamen in Großbuchstaben angegeben werden (z. B. STABLENET_FDW_WEBSERVICE_URL). Für die Einstellungen von global muss GLOBAL im ENV-Schlüssel weggelassen werden (z. B. STABLENET_FDW_DEFAULT_USER ).

url ist die Basis-URL des StableNet® API-Webdienstes. Sie hat normalerweise die Form https://<host>:5443/api/1.

Mehrere StableNet®-Instanzen können über mehrere webservice -Abschnitte mit eindeutigen server_id -Suffixen definiert werden. Der server_id wird als interner Bezeichner verwendet, um z.B. den passenden Autorisierungsstring von SKOOR Auth zu erhalten. Es sollte eine entsprechende server_name gesetzt werden, die zur Identifizierung des Servers in den fremden und aggregierten Tabellen verwendet wird. Dies kann auch über Umgebungsvariablen konfiguriert werden (z.B. STABLENET_FDW_WEBSERVICE_URL_TEST, STABLENET_FDW_WEBSERVICE_SERVER_NAME_TEST).

Nach einer Konfigurationsänderung muss der PostgreSQL Server neu gestartet werden.

systemctl restart postgresql-13

Initialisierung der fremden Tabellen

Initialisierung der fremden Tabellen, die vom Fremddaten-Wrapper benötigt werden.

/opt/stablenet-fdw/init-foreign-tables.sh -h <host> -p <port> -d <database> -U <user> -o <owner>

z.B..

/opt/stablenet-fdw/init-foreign-tables.sh -U postgres -h localhost -p 5432 -d infosim -o infosim

Dieser Befehl sollte nach jeder Aktualisierung von eranger-stablenet-fdw ausgeführt werden, um neue Tabellendefinitionen zu erhalten.

Testen der Verbindung

psql -h localhost -p 5432 -U infosim -d infosim -c "SELECT * from stablenet.stablenet_info;"

Dieser Befehl sollte die Anzahl der Geräte in der verbundenen StableNet®-Instanz zurückgeben.

Daten-Aggregation

Initialisierung der aggregierten Daten

Initialisiert die Zeitskala-Hypertabelle, die für aggregierte Metrikdaten benötigt wird.

/opt/stablenet-fdw/init-aggregated-data.sh -h <host> -p <port> -d <database> -U <user> -o <owner> \
-i <interval> [-m <metric_keys>] [-f <tag_filter>] [-r <retention>]

-m Kommagetrennte Liste von Metrikschlüsseln zur Voraggregation. Kann weggelassen werden, um Daten für alle Metriken vorzuladen, aber dies kann sehr lange dauern. z.B.. "SNMP_1,SNMP_2,SNMP_3"

-i Intervall zum Vorladen von Daten, z. B. 6 months, 1 week, 5 days

-f Tag-Filter zum Filtern von Messungen, z. B. "'Device Domain' eq 'Test'"

-r Richtlinie zur Datenaufbewahrung, z. B. "1 year"

Initialisierung des Refreshers für aggregierte Daten

Erzeugt einen TimescaleDB-Job zur regelmäßigen Aktualisierung der aggregierten Daten für bestimmte Metriken

/opt/stablenet-fdw/init-aggregated-data-refresher.sh -h <host> -p <port> -d <database> -U <user> -o <owner> \
[-m <metric_keys>][-f <tag_filter>]

-m Kommagetrennte Liste der zu aggregierenden Metrikschlüssel. Kann weggelassen werden, um Daten für alle Metriken zu aktualisieren. Z.B.. "SNMP_1,SNMP_2,SNMP_3"

-f Tag-Filter zum Filtern von Messungen, z. B. "'Device Domain' eq 'Test'"

Hinzufügen/Entfernen von Metriken

Docker Compose-Installation

Konfiguration

Fügen Sie die folgenden Umgebungsvariablen zum Abschnitt eranger-postgresql services environment der SKOOR docker-compose.yaml hinzu und setzen Sie die Variable STABLENET_FDW_WEBSERVICE_URL auf eine gültige StableNet Host-URL:

      - STABLENET_FDW_WEBSERVICE_URL=https://<StableNet host>:5443/api/1
      - STABLENET_FDW_ACCEPT_INSECURE_CERTIFICATE=false
      - STABLENET_FDW_DEFAULT_USER=myuser
      - STABLENET_FDW_DEFAULT_PASSWORD=mypass
      - STABLENET_FDW_SKOOR_AUTH_URL=http://eranger-auth-${INSTANCE_NAME}:8094

Webservice-Container-Konfiguration

Der Webservice muss in der Lage sein, mit der eranger-auth Komponente zu kommunizieren, um Anfragen an StableNet zu authentifizieren. Fügen Sie im Abschnitt eranger-webservice service die folgende Umgebungsvariable hinzu:

      - SKOOR_WEBSERVICE_auth_service_url=http://eranger-auth-${INSTANCE_NAME}:8094

Initialisierung fremder Tabellen

Führen Sie im laufenden Container das Skript init-database.sh aus, um das Stablenet-Schema zu löschen und neu zu erstellen (Vorsicht: alle Objekte im Schema werden gelöscht!).

Beispiel mit einer Kundendatenbank namens infosim mit dem Benutzer infosim (setzen Sie die Variable PGSQL_CONTAINER auf den Containernamen eranger-postgresql):

export PGSQL_CONTAINER=eranger-postgresql-<instance>
docker exec $PGSQL_CONTAINER /opt/stablenet-fdw/init-foreign-tables.sh -h localhost \
-p 5432 -d infosim -U postgres -o infosim

Führen Sie eine Datenabfrage im Dashboard aus, um die Fremddatenumhüllung zu überprüfen:

SELECT * from stablenet.stablenet_info

Daten-Aggregation

Initialisierung der aggregierten Daten

Initialisiert die Timescale-Hypertabelle, die für aggregierte metrische Daten benötigt wird.

docker exec $PGSQL_CONTAINER /opt/stablenet-fdw/init-aggregated-data.sh -h localhost \
-p 5432 -d infosim -U postgres -o infosim -i <interval> [-m <metric_keys>] [-f <tag_filter>] [-r <retention>]

-m Kommagetrennte Liste von Metrikschlüsseln zur Voraggregation. Kann weggelassen werden, um Daten für alle Metriken vorzuladen, aber das kann sehr lange dauern.

-i Intervall zum Vorladen der Daten, z. B. 6 months, 1 week, 5 days

-f Tag-Filter zum Filtern von Messungen, z. B. "'Device Domain' eq 'Test'"

-r Richtlinie zur Datenaufbewahrung, z. B. "1 year"

Initialisierung des Refreshers für aggregierte Daten

Erzeugt einen TimescaleDB-Job zur regelmäßigen Aktualisierung der aggregierten Daten für bestimmte Metriken

docker exec $PGSQL_CONTAINER /opt/stablenet-fdw/init-aggregated-data-refresher.sh -h localhost \
-p 5432 -d infosim -U postgres -o infosim [-m <metric_keys>] [-f <tag_filter>]

-m Kommagetrennte Liste der zu aggregierenden Metrikschlüssel. Kann weggelassen werden, um Daten für alle Metriken zu aktualisieren. Z.B.. "SNMP_1,SNMP_2,SNMP_3"

-f Tag-Filter zum Filtern von Messungen, z. B. "'Device Domain' eq 'Test'"

Integrieren in SKOOR

Der StabeleNet FDW kann integriert werden, indem eine neue Datenquelle im Bereich Daten & Objekte erstellt wird.

image-20240313-115126.png

Nach dem Speichern sollte die Glühbirne in der Navigation grün leuchten.

image-20240313-120727.png

Die fremden Tabellen können auf der Registerkarte Daten eingesehen werden.

image-20240313-121026.png

Während einige Fremdtabellen sofort eingesehen werden können (z.B. stablenet_taggable_device), benötigen andere einige obligatorische Qualifikatoren und können nicht in der Vorschau angezeigt werden. Siehe Tabelle unten für obligatorische Qualifikatoren.

Fremdtabellen

Name

Felder

Kennzeichner

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
tags 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 eine breite Palette 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.