Installation

Conditions préalables

Une base de données PostgreSQL avec un utilisateur autorisé à modifier les objets de la base de données est requise. Le wrapper de données externes doit être installé sur la même instance de server que celle sur laquelle s'exécute le serveur de base de données.

Veuillez conserver le répertoire par défaut PG_HOME à l'adresse /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. À la place, montez /var/lib/pgsql directement à partir d'un autre périphérique ou utilisez des tablespaces supplémentaires comme décrit ci-dessous.

Exemple : création de la base de données infosim appartenant au rôle 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';"

Installation standard

Installez le RPM à partir du dépôt SKOOR

Si le FDW StableNet 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"

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 l'accès à StableNet MySQL

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 server que SKOOR, ignorez simplement cette étape.

  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 un 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 variables <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 des 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 « global », il faut omettre « GLOBAL » de la clé ENV (par exemple : STABLENET_FDW_DEFAULT_USER).

url est 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 est utilisé comme identifiant interne pour, par exemple, récupérer la chaîne d’autorisation correspondante depuis SKOOR Auth. Il convient de définir une valeur appropriée pour server_name, qui sert à identifier le server dans les tables « foreign » et « aggregated ». 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

Initialisation des tables externes

Initialisez les tables externes requises par le wrapper de données externes.

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

Par exemple

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

Cette commande doit être exécutée après chaque mise à jour de eranger-stablenet-fdw afin d’obtenir les nouvelles définitions de tables.

Test de la connexion

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

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