.. _sanet-server: ****************************************************************************************** Server Sanet ****************************************************************************************** .. contents:: Contenuti Introduzione ========================================================================================== Il server centrale di Sanet e' composto da diversi processi eseguiti in parallelo. I principali sono: * :ref:`sanet-server-sanetd`. * :ref:`sanet-server-watchdog`. * Agenti locali .. _sanet-server-start-stop: 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. 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 ... 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: :ref:`config-save`. .. _sanet-server-sanetd: 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. .. image:: ../_static/web/images/sanetd_single.png :width: 500px Configurazione ---------------------------------------- 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. .. nota:: Si veda anche :ref:`sanet-server-sanetd-instances`. 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: } .. _sanet-server-watchdog: 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' 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. 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. Parametri / soglie di sicurezza del watchdog -------------------------------------------- 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, ... }) 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, }, } }) Configurazioni avanzate ========================================================================================== .. _sanet-server-sanetd-instances:: 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. .. image:: ../_static/web/images/sanetd_instances.png :width: 500px .. 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 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', ]