Installation

Conditions préalables

Un serveur de base de données PostgreSQL est requis. Le wrapper de données externes doit être installé sur la même instance de serveur que celle sur laquelle s'exécute le serveur de base de données.

Veuillez conserver le répertoire PG_HOME par défaut à l'emplacement /var/lib/pgsql et éviter de le déplacer. De même, ne créez pas de points de montage supplémentaires au sein de ce répertoire (par exemple, en montant /var/lib/pgsql/17/data à partir d'un périphérique différent). Modifier ainsi la structure peut considérablement compliquer les futures mises à niveau de PostgreSQL. Montez plutôt /var/lib/pgsql directement à partir d'un autre périphérique ou utilisez des tablespaces supplémentaires comme décrit ci-dessous.

Installation standard

Installation du RPM à partir du dépôt SKOOR

Si StableNet FDW doit être installé pour une version Major spécifique de SKOOR (par exemple la version 8), utilisez

dnf install "eranger-stablenet-fdw-8.*"

Sinon, utilisez

dnf install "eranger-stablenet-fdw"

Pour configurer l’application SKOOR afin qu’elle utilise le FDW StableNet, vous pouvez utiliser le script `init-data-source.py`.

python3 /opt/stablenet-fdw/init-data-source.py -h
usage: init-data-source.py [-h] -w WEBSERVICE [-t TABLESPACE_ROOT]
                           [-d DATABASE_CONNECTION]
                           [--database-name DATABASE_NAME]
                           [--database-owner DATABASE_OWNER]
                           [--database-password DATABASE_PASSWORD]

Initializes StableNet data source in Skoor

optional arguments:
  -h, --help            show this help message and exit
  -w WEBSERVICE, --webservice WEBSERVICE
                        StableNet webservice URL (usually something like
                        https://<host>:5443/api/1)
  -t TABLESPACE_ROOT, --tablespace-root TABLESPACE_ROOT
                        Root directory for PostgreSQL tablespace folders.
  --database-name DATABASE_NAME
                        PostgreSQL database name for StableNet FDW.
  --database-owner DATABASE_OWNER
                        PostgreSQL role/user owning the StableNet database.
  --database-password DATABASE_PASSWORD
                        Password for the PostgreSQL owner role.

Le nom de la base de données, le propriétaire et le mot de passe sont par défaut « infosim », et le tablespace-root est par défaut « /var/lib/pgsql ».

Exemple d'utilisation :

sudo python3 /opt/stablenet-fdw/init-data-source.py -w https://<STABLENET_HOST>:5443/api/1

Ce script automatise le processus de configuration en effectuant les opérations suivantes :

  1. Configure SKOOR Auth et le FDW StableNet en appliquant l'argument « --webservice ».

  2. Crée un espace de tables à l'emplacement spécifié par l'argument --tablespace-root.

  3. Crée une nouvelle base de données PostgreSQL au sein de cet espace de tables.

  4. Initialise les tables externes.

  5. Connecte SKOOR à la nouvelle base de données en tant que source de données.

  6. Importe les scripts de synchronisation et les requêtes de données standard.

Configuration

Après une modification de la configuration, le server PostgreSQL doit être redémarré.

systemctl restart postgresql-17

Fichier de configuration

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

Configuration minimale

Les paramètres suivants doivent impérativement être définis pour que l'installation fonctionne correctement.

[global]
default_user =
                                        # Default user name for the StableNet® API.
                                        # This is used in case no authorization
                                        # is provided by the SQL client.
default_password =
                                        # Default password for the StableNet® API.
                                        # This is used in case no authorization
                                        # is provided by the SQL client.

Certaines anciennes versions d’Oracle nécessitent l’installation de la bibliothèque client Oracle sur le système. Installez-la à l’aide du dernier programme d’installation d’Oracle Instant Client et configurez le chemin d’accès

#oracle_client_lib_dir =
                                        # Path to the Oracle client library directory.
                                        # This is used to load the Oracle client library
                                        # for the Oracle database connection.
                                        # If omitted, the thin client is used which might have
                                        # problems connectiong to older Oracle databases.

Configurer un tunnel autossh pour accéder à MySQL via StableNet

Prérequis :

Le tunnel n'est nécessaire que si la connexion à la base de données MySQL dans /opt/stablenet/snmw/wildfly/standalone/configuration/standalone.xml pointe vers localhost. Dans ce cas, la connexion passe par le point de terminaison local du tunnel, qui est redirigé vers le server StableNet. Si l'adresse IP de StableNet y est définie directement, le tunnel est contourné et n'est pas nécessaire.

Si la base de données StableNet est configurée sur le même serveur que SKOOR, ignorez simplement cette configuration.

  1. Générez une clé SSH pour l’utilisateur skoor (ne définissez PAS de phrase de passe) :

    1. sudo -u eranger ssh-keygen -t ed25519

  2. Imprimez et copiez la clé publique :

    1. sudo -u eranger cat ~eranger/.ssh/id_ed25519.pub

  3. Connectez-vous au server cible (StableNet) et ajoutez la clé

    1. mkdir -p ~/.ssh

    2. chmod 700 ~/.ssh

    3. echo "<public-key>" >> ~/.ssh/authorized_keys

    4. chmod 600 ~/.ssh/authorized_keys

    5. puis déconnectez-vous du server cible

  4. Testez la connexion (depuis le SKOOR Server, aucun mot de passe ne vous sera demandé)

    1. sudo -u eranger ssh <user>@<stablenet-ip>

  5. Installez autossh (sur le SKOOR Server)

    1. sudo dnf install autossh

  6. Créez le fichier de service systemd

    1. Chemin d'accès : /etc/systemd/system/stablenet-mysql-tunnel.service

    2. Remarque : vérifiez d'abord le chemin d'accès à autossh à l'aide de la commande « which autossh » et insérez le résultat dans ExecStart

[Unit]
Description=SSH tunnel to StableNet MySQL Database
After=sshd.service

[Service]
ExecStart=/bin/autossh -M 22023 -N -L 3306:localhost:3306 <user>@<stablenet-ip>
Restart=always
RestartSec=10
User=eranger

[Install]
WantedBy=multi-user.target
  1. Activer et démarrer le service

    1. systemctl daemon-reload

    2. systemctl enable stablenet-mysql-tunnel

    3. systemctl start stablenet-mysql-tunnel

  2. Vérifier l'état

    1. systemctl status stablenet-mysql-tunnel

Résultat : le port local 3306 du SKOOR Server est redirigé via un tunnel SSH vers le port MySQL (3306) du server StableNet. Remplacez les espaces réservés <public-key> et <stablenet-ip> en conséquence.

Connexion à la base de données

[webservice]                            # use te form werbservice_<server_id>
                                        # to configure multiple StableNet® servers
                                        # (see below).
url =
                                        # URL of the StableNet® API
                                        # Usually something like https://<stablenet-host>:5443/api/1
database_connection =
                                        # Connection string to the StableNet® database.
                                        # This is used for the measurement data sync.
                                        # The connection string must be in the format:
                                        # MySQL: mysql+pymysql://<user>:<password>@<host>:3306/<database>
                                        # Oracle: oracle+oracledb://<user>:<password>@<host>:1521/?service_name=<service>
                                        # Connection info can be found on the StableNet server in
                                        # /opt/stablenet/snmw/wildfly/standalone/configuration/standalone.xml (<datasources>).
                                        # It's usually a good idea to use a different user and service than the one used by StableNet.

Filtrage des mesures / métriques

Pour limiter le volume de données à synchroniser depuis la base de données StableNet, il peut être utile de configurer certains filtres ou de désactiver complètement certains types de mesures.

#sync_ping_data = true
                                        # Sync ping measurement data from the StableNet® database.
                                        # Defaults to true.
#sync_snmp_data = true
                                        # Sync SNMP measurement data from the StableNet® database.
                                        # Defaults to true.
#sync_usrscript_data = true
                                        # Sync usrscript measurement data from the StableNet® database.
                                        # Defaults to true.
#sync_external_data = true
                                        # Sync external measurement data from the StableNet® database.
#sync_derived_data = false
                                        # Sync derived measurement data from the StableNet® database.
#ping_measurement_filter =
                                        # Filter for the ping measurement.
#snmp_measurement_filter =
                                        # Filter for the SNMP measurement.
#snmp_indexes =
                                        # List of SNMP indexes to be used for the SNMP measurement.
                                        # This is the number part of the metric key, e.g. #1234 -> 1234
#snmp_state_agg_measurements =
                                        # Comma separated list of template name / metric_key pairs of measurements
                                        # which should have state aggregation enabled.
                                        # Example: Interface Relative IPMPLS 64Bit#1234,template2#5678
#usrscript_measurement_filter =
                                        # Filter for the usrscript measurement.
#usrscript_indexes =
                                        # List of usrscript indexes to be used for the usrscript measurement.
                                        # This is the number part of the metric key, e.g. #1234 -> 1234
#usrscript_state_agg_measurements =
                                        # Comma separated list of template name / metric_key pairs of measurements
                                        # which should have state aggregation enabled.
                                        # Example: Interface Relative IPMPLS 64Bit#1234,template2#5678
#external_measurement_filter =
                                        # Filter for the external measurement.
#external_indexes =
                                        # List of external indexes to be used for the external measurement.
                                        # This is the number part of the metric key, e.g. #1234 -> 1234
#external_state_agg_measurements =
                                        # Comma separated list of template name / metric_key pairs of measurements
                                        # which should have state aggregation enabled.
                                        # Example: Y.1731#1234,template2#5678
#derived_measurement_filter =
                                        # Filter for the derived measurement.
#derived_indexes =
                                        # List of derived indexes to be used for the derived measurement.
                                        # This is the number part of the metric key, e.g. #1234 -> 1234
#derived_state_agg_measurements =
                                        # Comma separated list of template name / metric_key pairs of measurements
                                        # which should have state aggregation enabled.
                                        # Example: Y.1731#1234,template2#5678

Politiques de conservation

Il est possible de configurer la durée de conservation des données pour chaque agrégat.

[retention_days]

#raw = 1
#minutely = 1
#5_minutely = 14
#15_minutely = 31
                                        # ~1 month
#hourly = 93
                                        # ~3 months
#daily = 365
                                        # ~1 years
#weekly = 365
                                        # ~1 years
#monthly = 1825
                                        # ~5 years
#quarterly = 1825
                                        # ~5 years
#yearly = 3650
                                        # ~10 years

Paramètres avancés

Il existe de nombreuses autres options permettant d’affiner le fonctionnement du FDW StableNet. Ces paramètres sont décrits directement dans le fichier de configuration.

Utilisation des variables d'environnement

Les options peuvent également être fournies via des variables d’environnement en utilisant le préfixe STABLENET_FDW_WEBSERVICE_ suivi du nom de l’option en majuscules (par exemple : STABLENET_FDW_WEBSERVICE_URL). Pour les paramètres globals, il faut omettre GLOBAL de la clé ENV (par exemple : STABLENET_FDW_DEFAULT_USER).

« url » correspond à l’URL de base du service web de l’API StableNet®. Elle se présente généralement sous la forme https://<host>:5443/api/1.

Plusieurs serveurs StableNet

Il est possible de définir plusieurs instances StableNet® à l’aide de plusieurs sections « webservice » comportant des suffixes « server_id » uniques. L’server_id sert d’identifiant interne, par exemple pour récupérer la chaîne d’autorisation correspondante auprès de SKOOR Auth. Il convient de définir un server_name approprié, qui servira à identifier le server dans les tables externes et agrégées. Cela peut également être configuré à l’aide de variables d’environnement (par exemple STABLENET_FDW_WEBSERVICE_URL_TEST, STABLENET_FDW_WEBSERVICE_SERVER_NAME_TEST).

[webservice_production]
server_name = Production Server
url = https://stablenet.prod:5443/api/1
database_connection = ...

[webservice_staging]
server_name = Staging Server
url = https://stablenet.staging:5443/api/1
database_connection = ...

Entrée correspondante dans SKOOR Auth (/etc/opt/eranger/eranger-auth.conf)

[provider.1]
type = stablenet
name = StableNet®
webservice_url_production = https://stablenet.prod:5443/api/1
webservice_url_staging = https://stablenet.staging:5443/api/1

Test de la connexion

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

Cette opération devrait renvoyer le nombre de périphériques présents dans l'instance StableNet® connectée.