2.7. Server Sanet

2.7.1. Introduzione

Il server centrale di Sanet e’ composto da diversi processi eseguiti in parallelo.

I principali sono:

2.7.1.1. Comandi di Start/Stop

Lo script principale di start/stop globale e’:

{{SANET_INSTALL_DIR}}/scripts/server/sanet3.sh  [start|stop|restart|nightly|cli-save]

NOTA: questo e’ lo script che deve essere utilizzato dal sistema di init.d per l’avvio automoatico dei servizi di sistema.

E’ possibile lanciare/interrompere i diversi subprocessi di sistema con gli script:

{{SANET_INSTALL_DIR}}/scripts/server/sanetd.sh   [start|stop|restart]
{{SANET_INSTALL_DIR}}/scripts/server/poller.sh   [start|stop|restart]
{{SANET_INSTALL_DIR}}/scripts/server/entables.sh [start|stop|restart]

NOTA: questi script esistono per esigenze di manutenzione/debug. Non e’ opportuno eseguire questi script singolarmente.

2.7.1.2. Nightly

Lo script di start/stop ha un comando di manutenzione periodica chiamato “nightly” :

{{SANET_INSTALL_DIR}}/scripts/server/sanet3.sh  nightly

NOTA: questo script ferma temporaneamente alcuni sotto-sistemi di sanet (agenti locali, ecc.)

Deve essere eseguito periodicamente tramite contrab. Poiche’ alcune operazioni effettuate dallo script potrebbero richiedere alcuni minuti di esecuzione e’ opportuno valutare con attenzione l’orario migliore per eseguire questo comando.

Esempio:

# crontab -e
...
59 23 * * * /usr/share/sanet/scripts/server/sanet3.sh nightly  >  /root/lastoutput.sanet3.nightly 2>&1
...

2.7.1.3. cli-save

Per ragioni storiche lo script principale di start/stop prevede anche il comando “cli-save”.

Questo comando e’ equivalente al comando descritto nella sezione: Dump della configurazione.

2.7.2. Sanetd

E’ il processo principale di Sanet e si occupa di comunicare con i processi agenti (locali e remoti) per aggiornare i dati del monitoraggio.

administration/sanetd/../_static/web/images/sanetd_single.png

2.7.2.1. Configurazione

2.7.2.1.1. Numero di thread di elaborazione

L’elaborazione dei dati avviene in parallelo.

Il numero di thread paralleli di elaborazione e’ regolato dal parametro nel file di configurazione:

SANETD_WORKING_THREADS_NUM

Danger

Il numero di connessioni max_connections di Postgres deve essere minimo pari a SANETD_WORKING_THREADS_NUM.

2.7.2.1.2. Parametri SMTP

Il server centrale invia notifiche tramite email.

Di default le mail vengono inviate appoggiandosi all’SMTP locale (localhost:25).

I parametri di default sono specificati nel file di configurazione dal parametro SANETD_MAIL_HANDLER_PARAMS:

SANETD_MAIL_HANDLER_PARAMS = {
        'HOST'               : 'localhost',
        'PORT'               : 25,
        'DEFAULT_DOMAIN_NAME': None,           # Use default full qualified domain name for this host
        'ENVELOPE_SENDER'    : 'noc@labs.it',  # Return-Path:
}

2.7.3. Watchdog: processo di diagnostica

Sanet esegue un proprio processo di diagnostica che ha il compito di controllare lo stato dei diversi componenti del sistema (server, agenti, entables)

Questo processo e’ chiamatro processo di watchdog.

Lo stato dei singoli componenti (sanetd, entables, agenti) viene controllato periodicamente in base ad un intervallo di tempo regolabile.

Tutti i parametri di configurazione del watchdog sono gestiti nella sezione SANETD_WATCHDOG_CONF del file di configurazione. Si rimanda al file {{SANET_INSTALL_DIR}}/conf/default_settings.py per maggiori dettagli.

Esempio non completo di configurazione del watchdog:

SANETD_WATCHDOG_CONF = {

        # 1 = Watchdog process active
        # 0 = Watchdog process not active. YOU SHOULD NEVER DISABLE THIS
        "enabled" : 1,

        # Check system status every "inverval" seconds.
        "interval"      : 60,
        ...
        ...
        ...
        ...
}

Per cambiare i parametri bisogna inserire in conf/settings.py le opportune modifiche. Ad esempio:

SANETD_WATCHDOG_CONF['to'] = 'foo@bar.com'

2.7.3.1. Notifica dello stato via MAIL

Lo stato del sistema puo’ essere notificato dal processo di watchdog via email. E’ possibile modificare alcuni parametri di invio SMTP.

IMPORTANTE: Solitamente, in caso di malfunzionamenti, le mail di watchdog non devono essere inviate. Di default, Sanet non invia mail in caso il processo di watchdog noti delle anomalie. Questo comportamento e’ modificabile con il parametro send_notification_on_errors (Vedi file di configurazione).

DEAULT: Il parametro to e’ impostato di default a root@localhost. Se il paraemtro viene valorizzato con stringa vuota (‘’) le mail non vengono inviate e viene sollevato un warning nel file di log {{LOG}}/wdog_log.

2.7.3.2. Notifica dello stato via WEB

Le informazioni di stato sono consultabili da interfaccia web.

Lo stato memorizzato in un certo istante resta valido per un tempo prefissato (vedi parametro valid_interval).

Superato questo limite, se lo stato non e’ stato aggiornato, il dato viene considerato troppo vecchio e il sistema mostra via WEB questa anomalia.

2.7.3.3. Parametri / soglie di sicurezza del watchdog

2.7.3.3.1. Server centrale

I seguenti parametri sono configurabili per indicare soglie:

Parametro Descrizione
sanetd_event_queue_max_size Numero massimo di pacchetti dati provenienti dagli agenti che possono essere presenti nella coda di aggiornamento di sanet.

Danger

La soglia di default per ‘sanetd_event_queue_max_size’ e’ 1000.

Esempio 1: Lunghezza massima coda dati non processati = 6666

SANETD_WATCHDOG_CONF.update({
        ...
        "sanetd_event_queue_max_size": 6666,
        ...
})

2.7.3.3.2. Agenti

E’ possibile specificare parametri di configurazione per ogni agente di montiraggio.

Parametro Descrizione
min_check_per_second Rate minimo di datagroup controllati al secondo.
wait_queue_max_size Numero di datagroup in coda attesa di essere controllati.

Per specificare questi parametri bisogna creare una entry nella sezione agents, con nome corrispondente al nome dell’agente di interesse.

Note

Se non vengono specificate valori per un agente, i controlli su queste soglie vengono ignorati.

Important

IL rate di datagorup eseguiti al secondo (min_check_per_second) potrebbe essere inferiore a 1, in base a min-period di configurazione.

Danger

Il numero di check in attesa di esecuzione (wait_queue_max_size) non dovrebbe mai superare i 1000. Il numero di thread per agente e i timeout configurati dovrebbero sempre garantire che tutti i controlli vengano eseguiti il piu’ velocemente possibile una volta arrivato il momento, senza attese in coda.

Esempio 1: sezione di configurazione per due agenti:

SANETD_WATCHDOG_CONF['agents'].update({

        "agents": {

                "main-agent": {
                        "min_check_per_second": 0,
                        "wait_queue_max_size" : 1000,
                },

                "aggressive-agent": {
                        "min_check_per_second": 10,
                        "wait_queue_max_size" : 5,
                },
        }
})

2.7.4. Configurazioni avanzate

2.7.4.1. Istanze multiple di sanetd

La configurazione di Sanet di default prevede che ci sia un solo processo, chiamato sanetd, che si occupa della ricezione ed elaborazione dei dei dati di monitoraggio prodotti dagli agenti.

E’ possibile eseguire piu’ “istanze” del processo sanetd sulla stessa macchina.

administration/sanetd/../_static/web/images/sanetd_instances.png

Warning

Questa modalita’ di configurazione richiede piu’ risorse software e una gestione/analisi della diagnostica piu’ elaborata.

Ogni istanza viene identificata da un nome logico. Di default, esiste una sola istanza, chiamata main:

Le istanze vengono specificate dal parametro di configurazione:

SANETD_INSTANCES = [
        'main',
]

Eseguire piu’ istanze di sanetd permette di aumentare il parallelismo di elaborazione e sfruttare meglio le risorse hardware (CPU/core) di sistema.

Important

Ogni istanza di sanetd ha un suo file di log separato.

Danger

ogni istanza di sanetd ha bisogno di aprire un certo numero di connessione Postgres.

Postgres dovrebbe essere configurato con max_connections almeno pari a:

numero di istanzee SANETD_INSTANCES  *  SANETD_WORKING_THREADS_NUM

2.7.4.2. Modificare il numero di istanze

Per modificare il numero di istanze bisogna aggiungere delle entry a questo parametro:

Esempio: Il server istanziera 4 processi sanetd chiamati main, second, third e instance5.

SANETD_INSTANCES = [
        'main',
        'second',
        'third',
        'instance5',
]