Installazione

Prerequisiti

È necessario un database PostgreSQL con un utente autorizzato a modificare gli oggetti del database. Il wrapper per dati esterni deve essere installato sulla stessa istanza del server su cui è in esecuzione il server del database.

Si prega di mantenere la directory predefinita di PG_HOME all'indirizzo /var/lib/pgsql ed evitare di spostarla. Inoltre, non creare punti di montaggio aggiuntivi all'interno di questa directory (ad esempio, montando /var/lib/pgsql/17/data da un dispositivo diverso). Modificare la struttura in questo modo può complicare significativamente i futuri aggiornamenti di PostgreSQL. Montare invece /var/lib/pgsql direttamente da un altro dispositivo oppure utilizzare tablespace aggiuntivi come descritto di seguito.

Esempio: Creare il database infosim di proprietà del ruolo 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';"

Installazione standard

Installare il pacchetto RPM dal repository SKOOR

Se è necessario installare StableNet FDW per una versione Major specifica di SKOOR (ad es. 8), utilizzare

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

Altrimenti utilizzare

dnf install "eranger-stablenet-fdw"

Configurazione

Dopo una modifica alla configurazione, è necessario riavviare il server PostgreSQL.

systemctl restart postgresql-17

File di configurazione

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

Configurazione minima

Per garantire il corretto funzionamento dell'installazione, è obbligatorio impostare le seguenti opzioni.

[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.

Alcune versioni precedenti di Oracle richiedono che la libreria client Oracle sia installata sul sistema. Installarla utilizzando il programma di installazione più recente di Oracle Instant Client e configurare il percorso

#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.

Configurare il tunnel autossh per l'accesso a MySQL su StableNet

Prerequisito:

Il tunnel è necessario solo se la connessione al database MySQL in /opt/stablenet/snmw/wildfly/standalone/configuration/standalone.xml punta a localhost. In tal caso, la connessione passa attraverso l’endpoint locale del tunnel, che viene inoltrato al server StableNet. Se l’IP di StableNet è impostato direttamente in quella posizione, il tunnel viene bypassato e non è necessario.

Se il database StableNet è configurato sullo stesso server di SKOOR, saltare semplicemente questa configurazione.

  1. Generare la chiave SSH per l’utente skoor (NON impostare una passphrase):

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

  2. Stampa e copia la chiave pubblica:

    1. sudo -u skoor cat /home/skoor/.ssh/id_ed25519.pub

  3. Accedere al server di destinazione (StableNet) e aggiungere la chiave

    1. mkdir -p ~/.ssh

    2. chmod 700 ~/.ssh

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

    4. chmod 600 ~/.ssh/authorized_keys

    5. quindi disconnettersi dal server di destinazione

  4. Verifica l'accesso (dal SKOOR Server, senza richiesta di password)

    1. sudo -u skoor ssh guest@<stablenet-ip>

  5. Installare autossh (sul SKOOR Server)

    1. sudo dnf install autossh

  6. Crea il file di servizio systemd

    1. Percorso: /etc/systemd/system/stablenet-mysql-tunnel.service

    2. Nota: verificare prima il percorso di autossh con which autossh e inserire il risultato in 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=skoor

[Install]
WantedBy=multi-user.target
  1. Abilitare e avviare il servizio

    1. systemctl daemon-reload

    2. systemctl enable stablenet-mysql-tunnel

    3. systemctl start stablenet-mysql-tunnel

  2. Verifica dello stato

    1. systemctl status stablenet-mysql-tunnel

Risultato: la porta locale 3306 sul SKOOR Server viene inoltrata tramite tunnel SSH alla porta MySQL (3306) del server StableNet. Sostituire i segnaposto <public-key> e <stablenet-ip> di conseguenza.

Connessione al database

[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.

Filtraggio delle misurazioni / metriche

Per limitare la quantità di dati da sincronizzare dal database di StableNet, potrebbe essere utile configurare alcuni filtri o disattivare completamente alcuni tipi di misurazione.

#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

Politiche di conservazione

È possibile configurare per quanto tempo i dati vengono conservati per ciascun aggregato.

[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

Impostazioni avanzate

Esistono diverse altre opzioni che possono essere utilizzate per ottimizzare il FDW di StableNet. Tali impostazioni sono descritte direttamente nel file di configurazione.

Utilizzo delle variabili d’ambiente

Le opzioni possono essere specificate anche tramite variabili d’ambiente utilizzando il prefisso STABLENET_FDW_WEBSERVICE_ e il nome dell’opzione in maiuscolo (ad es. STABLENET_FDW_WEBSERVICE_URL). Per le impostazioni relative a global, è necessario omettere GLOBAL dalla chiave ENV (ad es. STABLENET_FDW_DEFAULT_USER).

url è l’URL di base del servizio web dell’API StableNet®. Di solito ha la forma https://<host>:5443/api/1.

Più server StableNet

È possibile definire più istanze di StableNet® utilizzando più sezioni webservice con suffissi server_id univoci. L’server_id viene utilizzato come identificatore interno, ad esempio per ottenere la stringa di autorizzazione corrispondente da SKOOR Auth. È necessario impostare un server_name appropriato, che viene utilizzato per identificare il server nelle tabelle esterne e aggregate. Ciò può essere configurato anche tramite variabili d’ambiente (ad es. 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 = ...

Voce corrispondente in 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

Inizializzazione delle tabelle esterne

Inizializzare le tabelle esterne richieste dal wrapper dei dati esterni.

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

Ad es.

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

Questo comando deve essere eseguito dopo ogni aggiornamento di eranger-stablenet-fdw per ottenere le nuove definizioni delle tabelle.

Verifica della connessione

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

Questo comando dovrebbe restituire il numero di dispositivi presenti nell’istanza di StableNet® connessa.