8 mars 2012
Optimisations LogAnalyser
Dans un billet précédent je parlais de mon installation d’un serveur de logs centralisé avec rsyslog et LogAnalyser. Après quelques mois d’exploitation, les requêtes lancées depuis LogAnalyser sont devenues de plus en plus lentes, rendant l’outil pénible à utiliser. Il y a une bonne raison à ça : Avec la version actuelle du plugin MySQL de rsyslog (v 4.6.4) les index ne sont pas créés dans la table SystemEvents à l’installation. Au début ça va, mais quand on a 25 millions d’enregistrements dans la table c’est pas vraiment optimal!
La solution est d’indexer les champs qui serviront le plus souvent dans les requêtes, dans mon cas j’ai choisi Facility, Priority, FromHost, SysLogTag et DeviceReportedTime.
Voici les requêtes que j’ai exécutées sur la base Syslog :
ALTER TABLE `SystemEvents` ADD INDEX(`Facility`); ALTER TABLE `SystemEvents` ADD INDEX(`Priority`); ALTER TABLE `SystemEvents` ADD INDEX(`FromHost`); ALTER TABLE `SystemEvents` ADD INDEX(`SysLogTag`); ALTER TABLE `SystemEvents` ADD INDEX(`DeviceReportedTime`); |
Autant dire qu’il vaut mieux créer les index à l’installation, j’ai perdu une bonne demie-heure de logs à faire la manip sur un serveur en prod 🙁
Ça augmente la taille de la base d’environ 15%, mais les temps de réponse de LogAnalyser sont nettement améliorés.