2.8. Server Sanet¶
Contenuti
2.8.1. Introduzione¶
Il server centrale di Sanet e' composto da diversi processi eseguiti in parallelo.
I principali sono:
Agenti locali
2.8.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]
Note
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]
Note
questi script esistono per esigenze di manutenzione/debug. Non e' opportuno eseguire questi script singolarmente.
2.8.1.2. Nightly¶
Lo script di start/stop ha un comando di manutenzione periodica chiamato "nightly" :
{{SANET_INSTALL_DIR}}/scripts/server/sanet3.sh nightly
Note
questo script ferma temporaneamente alcuni sotto-sistemi di sanet (agenti locali, ecc.)
Danger
dessere 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/local/sanet/scripts/server/sanet3.sh nightly > /root/lastoutput.sanet3.nightly 2>&1 ...
2.8.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.8.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.

2.8.2.1. Configurazione¶
2.8.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 = 3
Danger
Il numero di connessioni max_connections di Postgres deve essere minimo pari a SANETD_WORKING_THREADS_NUM.
Note
Si veda anche Istanze multiple di sanetd.
2.8.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.8.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.8.3.1. Tolleranza allo startup¶
Quando Sanet viene riavviato, non tutti i processi potrebbero aver finito la fase di avvio e rispondere alle interrogazioni del processo di watchdog.
Se queste situazioni si veriifcano e' possibile impostare una tolleranza per ritardare la segnalazione di guasti.
Per farlo bisogna indicare quanti "volte"/"turni" il watchdog deve ignorare problemi dopo ogni riavvio, attraverso il parametro start_rounds. Di default, il primo turno di check viene ignorato.
Esempio: per ignorare problemi per 2 turni dopo il restart del processo:
SANETD_WATCHDOG_CONF = { ... ... "start_rounds": 2, ... ... }
2.8.3.2. 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.8.3.3. 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.8.3.4. Parametri / soglie di sicurezza del watchdog¶
2.8.3.4.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.8.3.4.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.8.4. Configurazioni avanzate¶
2.8.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.

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.8.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', ]