Drupal: logging su database e logging su file. Alcune considerazioni sulle prestazioni.

Il database logging in Drupal può risultare piuttosto oneroso in termini di risorse, soprattutto nel caso di siti web ad alto traffico o con un numero molto elevato di contenuti.

Un articolo di Dries pubblicato sul blog di Aquia (http://acquia.com/blog/playing-new-relic-acquia-hosting) aveva messo in risalto come il database logging da solo potesse essere responsabile del 50% del carico sul server MySQL.

Dopo aver installato New Relic su di un server che ospita per la gran parte siti Drupal, ho potuto verificare l'impatto sul db dovuto ad accesslog remposabile da solo di più del 20% di carico.

[filefield-description]

Disattivare il database logging per tutti i siti Drupal ospitati, avrebbe comportato quindi una riduzione di oltre il 20 del carico su MySQL. E' innegabile tuttavia che una qualche procedura di logging risulta di importanza vitale sia nell'ottica di monitorare la situazione del singolo sito web, sia come aiuto per la risoluzione di eventuali problemi. L'alternativa che Drupal (dalla versione 6 in su) offre al log su database effettuato tramite il modulo DBLog, è il log su file, tramite il modulo Syslog disponibile nei moduli core opzionali. Chiaramente il syslog non presenta di certo la stessa semplicità d'uso del database logging, che permette di analizzare l'output direttamente dal backend del sito, tuttavia l'utilizzo di una soluzione centralizzata di monitoraggio server quale Splunk, permette di gestire la cosa in modo estremamente  conveniente.

Un problema verificatosi recentemente a seguito di un aggiornamento in un modulo, è stato rapidamente risolto con un semplice ricerca in Splunk che ha permesso di identificare origine e tipologia del problema analizzando per l'appunto i log di sistema.

[filefield-description]

Attivare il logging su file con syslog, è relativamente semplice. Le istruzioni sono disponibili in questa pagina: http://drupal.org/documentation/modules/syslog. Syslog al pari di DBLog (Database logging) è un modulo opzionale del core di Drupal.

[filefield-description]

Attivato il modulo, si tratta di configurare a quale log facility inviare i log, direttamente nella pagina admin/settings/logging/syslog (Home » Dashboard » Configurazione del sito » Registro degli eventi e avvisi) e la stringa da inserire in ogni messaggio scritto sul log di sistema. Per ogni sito presente sul server ho utilizzato le due parole "drupal" e "nomesito", cosa che facilita successivamente le eventuali operazioni di ricerca in Splunk.

[filefield-description]

Configurato Drupal, si tratta quindi di passare sul server ed editare il file /etc/syslog.conf (questo su di un server Ubuntu Linux, per altre versioni di Linux, potrebbe essere diverso il file da editare). Se nelle impostazioni precedenti è stato scelto Local 7 come log facility (per maggiori informazioni è sufficiente consultare il manuale di syslog.conf, man syslog.conf), basterà aggiungere alla fine di syslog.conf le righe seguenti:

#
# DRUPAL SYSLOG CONFIG
#
local7.* /var/log/drupal.log

E quindi riavviare il servizio syslog (in Ubuntu Server 8.04):

service sysklogd restart

od anche

/etc/init.d/sysklogd restart

I log di Drupal verranno salvati nel file /var/log/drupal.log. Si noti che non effettuando la modifica sopra indicata a syslog.conf, le informazioni saranno inserite nel file di default /var/log/messages.log

Tale operazione di configurazione dovrà essere fatta Sarà necessario configurare la facility ed il modulo per tutti i siti Drupal che si desiderano monitorare.