User Tools

Site Tools


doc:appunti:linux:sa:cacti

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
doc:appunti:linux:sa:cacti [2011/02/15 16:29] – [Bug Debian Lenny] niccolodoc:appunti:linux:sa:cacti [2021/02/26 12:44] (current) – [Grafici dello spazio disco occupato] niccolo
Line 4: Line 4:
  
 Per eccedere come utente guest basta puntare il browser su **%%http://hostname/cacti/graph_view.php%%**, mentre per avere la richiesta di login si punta solo alla directory **/cacti/**. Per eccedere come utente guest basta puntare il browser su **%%http://hostname/cacti/graph_view.php%%**, mentre per avere la richiesta di login si punta solo alla directory **/cacti/**.
 +
 +Per resettare la password di admin bisogna collegarsi al database //cacti// ed eseguire:
 +
 +<code sql>
 +UPDATE user_auth SET password=md5('admin') WHERE username='admin';
 +</code>
  
 **ATTENZIONE:** prima di creare un grafico si deve aggiungere il **device** da cui il grafico dipende. Un device sarà identificato almeno dall'hostname, inoltre - se si sceglie il tipo di device tra quelli predefiniti - saranno disponibili automaticamente alcuni //data source// e //graph template// che aiuteranno a creare i grafici. **ATTENZIONE:** prima di creare un grafico si deve aggiungere il **device** da cui il grafico dipende. Un device sarà identificato almeno dall'hostname, inoltre - se si sceglie il tipo di device tra quelli predefiniti - saranno disponibili automaticamente alcuni //data source// e //graph template// che aiuteranno a creare i grafici.
Line 146: Line 152:
   - Si potrebbe definire un **Data Input Method**, cioè uno script che riceve come parametro (**Input Field**) il nome della partizione da monitorare e restituisce il valore. Lo script potrebbe utilizzare SNMP o altri metodi a piacimento.   - Si potrebbe definire un **Data Input Method**, cioè uno script che riceve come parametro (**Input Field**) il nome della partizione da monitorare e restituisce il valore. Lo script potrebbe utilizzare SNMP o altri metodi a piacimento.
  
-La **soluzione migliore** prevista da Cacti è tuttavia diversa, consente di scegliere la partizione da un elenco e sa automaticamente quele Data Template e Graph Template utilizzare. Il tutto si realizza tramite una **Data Query**. Una Data Query è uno di script oppure una interrogazione SNMP che restituisce un elenco di chiavi univoche e le associa ai rispettivi OID automaticamente.+La **soluzione migliore** prevista da Cacti è tuttavia diversa, consente di scegliere la partizione da un elenco e automaticamente viene determinato quele Data Template e Graph Template utilizzare. Il tutto si realizza tramite una **Data Query**. Una Data Query è uno di script oppure una interrogazione SNMP che restituisce un elenco di chiavi univoche e le associa ai rispettivi OID automaticamente.
  
 Ad esempio la Data Query **SNMP - Get Mounted Partitions** esegue uno script che determina tutte le partizioni montate su un server SNMP. Internamente utilizza qualcosa di simile a snmpwalk: Ad esempio la Data Query **SNMP - Get Mounted Partitions** esegue uno script che determina tutte le partizioni montate su un server SNMP. Internamente utilizza qualcosa di simile a snmpwalk:
Line 163: Line 169:
 **NOTA 2:** Nel caso in cui si vuole monitorare lo stesso host Linux su cui gira Cacti, la Data Query **Unix - Get Mounted Partitions** probabilmente è **più adatta** perché riporta solo le partizioni fisiche montate, con il punto di montaggio e il nome del device. Ovviamente **non funziona in remoto** via SNMP. **NOTA 2:** Nel caso in cui si vuole monitorare lo stesso host Linux su cui gira Cacti, la Data Query **Unix - Get Mounted Partitions** probabilmente è **più adatta** perché riporta solo le partizioni fisiche montate, con il punto di montaggio e il nome del device. Ovviamente **non funziona in remoto** via SNMP.
  
 +===== "Get Mounted Partitions" vs "Get Monitored Partitions" =====
 +
 +Cacti fornisce due diverse Data Query per monitorare lo spazio occupato sul disco:
 +
 +  * **SNMP - Get Mounted Partitions**
 +  * **Net-SNMP - Get Monitored Partitions**
 +
 +Le due query si basano su altrettanti script che vanno a interrogare OID diversi:
 +
 +^ Script Cacti                                   ^ MIB OID (numeric)        ^ Radice MIB (textual)           |
 +| cacti/resource/snmp_queries/host_disk.xml      | .1.3.6.1.2.1.25.2.3.1.1  | HOST-RESOURCES-MIB::hrStorage  |
 +| cacti/resource/snmp_queries/net-snmp_disk.xml  | .1.3.6.1.4.1.2021.9.1.1  | UCD-SNMP-MIB::dskTable         |
 +
 +Risulta che la prima forma sia supportata sia su Debian 10 che CentOS 7, mentre la seconda forma non lo è su CentOS. In Cacti, aprendo la schermata del **Device Management**, è possibile verificare nella sezione **Associated Data Queries** quali delle due query sono state attivate per l'host ed eventualmente se hanno dato esito negativo (viene indicato **%%[0 Items, 0 Rows]%%** come risultato della query).
 ===== Cache di valori errati ===== ===== Cache di valori errati =====
  
Line 171: Line 191:
 Per calcolare correttamente alcuni valori (ad esempio per convertire lo spazio disco da blocchi a byte) Cacti richiede via SNMP altri parametri, ad esempio lo **''hrStorageAllocationUnits''**. Questi parametri vengono memorizzati in modo permanente nel database. Nel caso dovessero risultare corrotti è sufficiente aggiornare il risultato della data query: dal menu //Devices// si sceglie l'host interessato, nella sezione //Associated Data Queries// si clicca su //Verbose Query//. Per calcolare correttamente alcuni valori (ad esempio per convertire lo spazio disco da blocchi a byte) Cacti richiede via SNMP altri parametri, ad esempio lo **''hrStorageAllocationUnits''**. Questi parametri vengono memorizzati in modo permanente nel database. Nel caso dovessero risultare corrotti è sufficiente aggiornare il risultato della data query: dal menu //Devices// si sceglie l'host interessato, nella sezione //Associated Data Queries// si clicca su //Verbose Query//.
  
 +A partire dalla **versione 0.8.7g** c'è anche lo script rebuild_poller_cache.php che dovrebbe sistemare le cose:
 +
 +<code>
 +cd /usr/share/cacti/cli
 +php ./rebuild_poller_cache.php -d
 +</code>
 ===== Modifica parametri archivio RRD ===== ===== Modifica parametri archivio RRD =====
  
Line 192: Line 218:
  
 Attenzione a ripristinare i permessi originali dell'archivio rrd. Attenzione a ripristinare i permessi originali dell'archivio rrd.
 +
 +====== Grafico attività disco ======
 +
 +Si può utilizzare il template [[http://docs.cacti.net/usertemplate:data:host_mib:diskio|Disk I/O Usage]], testato sulla **versione 0.8.7g**, sebbene sia dichiarato per la 0.8.7d. Qui una copia dell'archivio: {{diskio087d.tar.gz}}.
 +
 +  - Dall'archivio estrarre il file **''disk_io.xml''** e copiarlo in ''/usr/share/cacti/resource/snmp_queries''.
 +  - Estrarre il file **''cacti087d_data_query_snmp_-_get_disk_io.xml''** e importarlo nell'interfaccia web: //Console// => //Import Templates//.
 +  - Aprire il device (host) interessato e cliccare su //Add Data Query// => //SNMP - Get Disk IO//.
 +  - Aggiungere un grafico per quell'host, indicando il disco o la partizione da monitorare.
 +
 +====== Migrazione di Cacti su altro host ======
 +
 +Si vuole migrare l'intera installazione tra due host che hanno la stessa versione di Cacti e MySQL. Queste le operazioni necessarie:
 +
 +  * Installare il pacchetto **cacti** sul nuovo host, seguire la procedura di installazione Debian in modo che venga creato il database ed eseguire la procedura di setup via web (questo secondo passaggio non è strettamente necessario, in quanto il restore del database sovrascrive tutte le impostazioni).
 +  * Fermare il cronjob **''/etc/cron.d/cacti''** sull'host vecchio e sul nuovo.
 +  * Effettuare il dump del database **cacti** (le credenziali si trovano in ''/etc/cacti/debian.php''): <code>mysqldump -u cacti -p cacti > cacti.dump</code>
 +  * Copiare tutti i file in **''/var/lib/cacti/rra/''** sul nuovo server mantenendo i permessi.
 +  * Effettuare il restore del database sul nuovo server (per le credenziali vedi sopra): <code>mysql -u cacti -p cacti < cacti.dump</code>
 +  * Ripristinare il cronjob sul nuovo host.
 +
 +====== Problema con nsExtendOutput1Line ======
 +
 +Le estensioni SNMP ottenute con il parametro **extend** di **''/etc/snmp/snmpd.conf''** creano qualche problema in Cacti, almeno con la versione 0.8.8a di Debian 7 Wheezy.
 +
 +Quando viene creata il **Data Template** si deve indicare il parametro **OID** che deve essere qualcosa del tipo:
 +
 +<code>
 +NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."pm2.5"
 +</code>
 +
 +Purtroppo la pagina web di Cacti aggiunge dei backslash alle doppie virgolette, quindi il parametro viene memorizzato male nel database. Ecco come cercare le chiavi sbagliate nel database:
 +
 +<code sql>
 +SELECT * FROM data_input_data WHERE value LIKE '%nsExtendOutput1Line%';
 +SELECT local_data_id, arg1 FROM poller_item WHERE arg1 LIKE '%nsExtendOutput1Line%';
 +</code>
 +
 +Questo un esempio di come correggere (modificare ovviamente il valore e gli ID):
 +
 +<code sql>
 +UPDATE data_input_data SET value = 'NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."pm2.5"'
 +    WHERE data_input_field_id = 6 AND data_template_data_id = 178;
 +UPDATE poller_item SET arg1 = 'NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."pm2.5"'
 +    WHERE local_data_id = 103;
 +</code>
 +
 +====== Problema con UTF-8 ======
 +
 +Alcuni caratteri speciali (ad esmempio il simbolo di grado Celsius) non vengono mostrati nei grafici RRD. Secondo questo [[http://bugs.cacti.net/view.php?id=2533|bug report]] si tratta della funzione ''escapeshellarg()'' di PHP invocata senza aver prima invocato un opportuno ''setlocale()''. Come workaround si consiglia di aggiungere tale chiamata di funzione nel file ''/usr/share/cacti/site/lib/auth.php'', ma per una installazione Debian ha più senso aggiungerlo nel file **''/etc/cacti/debian.php''**.
 +
 +====== Percentuale CPU e multi-core ======
 +
 +L'installazione predefinita di Cacti mette a disposizione il template di grafico **ucd/net - CPU Usage**, che si basa sui seguenti OIDs:
 +
 +  * 1.3.6.1.4.1.2021.11.50.0 => **ssCpuRawUser**
 +  * 1.3.6.1.4.1.2021.11.51.0 => **ssCpuRawNice**
 +  * 1.3.6.1.4.1.2021.11.52.0 => **ssCpuRawSystem**
 +
 +Il risultato è abbastanza approssimativo, anzitutto perché mancano alcune metriche (ad esempio **ssCpuRawKernel**, **ssCpuRawInterrupt**, ecc.), ma soprattutto **non tiene conto dei sitemi multiprocessore** o dei processori multicore. In effetti il valore complessivo ottenuto andrebbe diviso per il numero totale di CPU del sistema, altrimenti si ottiene un **valore sovrastimato del carico percentuale**. Vedere in proposito il post **[[https://serverfault.com/questions/441897/how-to-calculate-cpu-based-on-raw-cpu-ticks-in-snmp|How to calculate CPU % based on raw CPU ticks in SNMP]]**.
 +
 +Una soluzione è quella proposta dall'utente **Instigater** nel **[[https://forums.cacti.net/viewtopic.php?p=190739|forum di Cacti]]**, si basa sui seguenti OIDs:
 +
 +  * 1.3.6.1.4.1.2021.11.50.0 => **ssCpuRawUser**
 +  * 1.3.6.1.4.1.2021.11.51.0 => **ssCpuRawNice**
 +  * 1.3.6.1.4.1.2021.11.52.0 => **ssCpuRawSystem**
 +  * 1.3.6.1.4.1.2021.11.53.0 => **ssCpuRawIdle**
 +  * 1.3.6.1.4.1.2021.11.54.0 => **ssCpuRawWait**
 +  * 1.3.6.1.4.1.2021.11.55.0 => **ssCpuRawKernel**
 +  * 1.3.6.1.4.1.2021.11.56.0 => **ssCpuRawInterrupt**
 +  * 1.3.6.1.4.1.2021.11.61.0 => **ssCpuRawSoftIRQ**
 +
 +inoltre sono definite due funzioni CDEFs che si occupano di normalizzare il valore rispetto al numero di CPU:
 +
 +  * **Full ucd/net CPU Usage - Get percentage**
 +  * **Full ucd/net CPU Usage - Total CPU Usage**
 +
 +Il file con il template [[https://forums.cacti.net/download/file.php?id=20704|cacti_graph_template_ucdnet_-_full_cpu_usage.zip]] ha però **un bug**, l'**Item #12** usa la funzione CDEF sbagliata: //Total CPU Usage// invece di //Get percentage//.
 +
 +Il template include le seguenti **due funzioni CDEF**:
 +
 +<file>
 +Full ucd/net CPU Usage - Get percentage
 +cdef=CURRENT_DATA_SOURCE,ALL_DATA_SOURCES_NODUPS,/,100,*
 +
 +Full ucd/net CPU Usage - Total CPU Usage
 +cdef=ALL_DATA_SOURCES_NODUPS,h,-,ALL_DATA_SOURCES_NODUPS,/,100,*
 +</file>
 +
 +La prima calcola la **percentuale di ciascuna grandezza** rispetto alla somma di tutte le altre (somma che include anche //Idle//, quindi ottiene effettivamente una percentuale). La seconda funzione esegue la somma di tutte le grandezze, quindi sottrae l'ottava (contrassegnata dalla lettera **h**, si tratta del tempo //Idle//) e calcola la percentuale rispetto alla somma di tutte. Questo produce la **percentuale totale** dell'uso della CPU. Tutti i calcoli producono una **percentuale corretta rispetto al numero di CPU**.
doc/appunti/linux/sa/cacti.1297783751.txt.gz · Last modified: 2011/02/15 16:29 by niccolo