journaux logs mariadb

Les journaux (Logs) dans MariaDB : Définitions et explications

MariaDB, tout comme d’autres systèmes de gestion de bases de données, utilise des fichiers de journalisation (ou logs) pour enregistrer différentes activités et opérations effectuées sur le serveur. Ces journaux sont essentiels pour le dépannage, l’optimisation des performances, et la surveillance des activités suspectes. Parmi les différents types de journaux disponibles dans MariaDB, le journal général (general log) et le journal des requêtes lentes (slow query log) sont particulièrement notables. Explications.

Le journal général (General Log)

Le journal général, comme son nom l’indique, enregistre toutes les activités générales sur le serveur MariaDB. Cela inclut :

  • Les connexions et déconnexions des utilisateurs ;
  • Toutes les requêtes SQL envoyées au serveur.

Ce journal est particulièrement utile pour :

  • Diagnostiquer les problèmes de connexion ;
  • Surveiller toutes les requêtes effectuées sur la base de données, ce qui peut aider à détecter des activités non autorisées.

Toutefois, étant donné le volume d’informations qu’il capture, le journal général peut rapidement devenir volumineux. Il est donc recommandé de l’activer seulement lors du dépannage spécifique ou pour des périodes de surveillance courtes.

Les commandes en rapport avec le journal général

Le journal général enregistre une variété d’informations, dont les requêtes SQL et les connexions/déconnexions. Pour activer le general log, vous pouvez utiliser la commande suivante :

SET GLOBAL general_log = 'ON';

Pour définir le chemin du fichier où les logs seront enregistrés, utilisez :

SET GLOBAL general_log_file = '/chemin/vers/le/fichier.log';

Note : Assurez-vous d’avoir les permissions nécessaires pour écrire dans le dossier spécifié.

Le journal des requêtes lentes (Slow Query Log)

Le journal des requêtes lentes, comme son nom l’indique, enregistre les requêtes qui prennent plus de temps que la valeur spécifiée pour s’exécuter. Les informations contenues dans ce journal incluent :

  • La requête elle-même ;
  • Le temps d’exécution de la requête.

Il est très utile pour :

  • Identifier les requêtes qui nécessitent une optimisation ;
  • Surveiller la performance globale du serveur et diagnostiquer les goulets d’étranglement.

La valeur par défaut du temps d’exécution qui détermine si une requête est considérée comme « lente » est de 10 secondes, mais cela peut être ajusté selon les besoins de l’administrateur.

Le journal des requêtes lentes (Slow Query Log)

Ce journal est conçu pour enregistrer les requêtes qui dépassent un certain seuil de temps d’exécution. Pour activer le slow query log, vous pouvez utiliser la commande suivante :

SET GLOBAL slow_query_log = 'ON';

Pour définir le temps en secondes après lequel une requête est considérée comme lente, utilisez :

SET GLOBAL long_query_time = X; -- Remplacez X par le nombre de secondes souhaité.

Et pour spécifier le chemin du fichier log, utilisez :

SET GLOBAL slow_query_log_file = '/chemin/vers/le/fichier.log';

Explorer les journaux est tout à fait utile

Les autres types de journaux dans MariaDB

MariaDB, tout comme d’autres systèmes de gestion de bases de données ainsi que MySQL, fournit plusieurs outils de journalisation pour aider les administrateurs à surveiller et à gérer efficacement leurs bases de données. Parmi ces outils, deux se démarquent par leur importance : le journal d’erreurs et le journal binaire. Ces journaux, bien que différents dans leur fonction, sont essentiels pour assurer la stabilité, la performance, et la sécurité d’une instance :

Le journal d’erreurs (Error Log)

Le « Error Log » de MariaDB est le principal endroit où sont consignées les erreurs et les informations diagnostiques du serveur. Tout événement anormal, que ce soit au démarrage, pendant l’exécution ou à la fermeture, est enregistré ici. Pour visualiser le chemin actuel du fichier de journal d’erreurs, utilisez la commande suivante :

SHOW VARIABLES LIKE 'log_error';

Si vous êtes confronté à des comportements inattendus ou à des erreurs avec MariaDB, le journal d’erreurs devrait être votre premier point de consultation. Il fournit des détails qui peuvent aider à identifier, comprendre et résoudre les problèmes.

Le journal binaire (Binary Log)

Le « Binary Log » est un ensemble de fichiers qui enregistrent toutes les modifications apportées à la base de données. Il joue un rôle crucial dans la réplication et la restauration des données après une panne. Pour activer le journal binaire, vous pouvez ajouter la ligne suivante à votre fichier de configuration my.cnf :

log-bin

Une fois activé, vous pouvez consulter l’état et le chemin du journal binaire avec :

SHOW BINARY LOGS;

Le journal binaire est essentiel pour garantir la synchronisation des données entre un serveur maître et ses esclaves dans un environnement de réplication. En outre, en cas de défaillance du système, il permet de restaurer les données à leur état le plus récent.

La journalisation dans MariaDB

La journalisation, bien qu’essentielle pour le monitoring et la maintenance, peut poser des défis significatifs, notamment en termes de gestion de l’espace disque. C’est là que la rotation des journaux intervient comme un mécanisme crucial pour assurer une journalisation efficace et une utilisation optimale des ressources dans les systèmes MariaDB.

La rotation des Journaux

La rotation des journaux est une pratique qui consiste à archiver les fichiers de journal actuels et à démarrer un nouveau journal frais. Cette procédure est essentielle pour plusieurs raisons, la plus évidente étant la gestion de l’espace disque. Sans une rotation régulière, les fichiers de journal peuvent rapidement grossir, consommant une grande partie de l’espace disque disponible. Cette croissance incontrôlée peut non seulement affecter les performances du serveur, mais aussi conduire à des situations où le serveur manque d’espace, entraînant des interruptions inattendues et potentiellement des pertes de données.

Pour vérifier la taille de vos fichiers de journal dans MariaDB, vous pourriez utiliser une commande système telle que :

ls -lh /chemin/vers/le/dossier/de/journal/

Les outils pour la rotation des Journaux

L’une des solutions les plus courantes pour la rotation des journaux est l’utilisation d’outils dédiés. logrotate est sans doute l’outil le plus populaire à cet effet sur les systèmes Linux. Il permet aux administrateurs de définir des règles spécifiques pour quand et comment les journaux doivent être tournés, compressés ou supprimés.

Un exemple de configuration pour logrotate pour les journaux MariaDB peut ressembler à :

/chemin/vers/le/dossier/de/journal/mariadb.log {
daily
rotate 7
compress
missingok
create 640 mysql mysql
postrotate
/etc/init.d/mariadb restart
endscript
}

Avec cette configuration, logrotate tournera les journaux quotidiennement, gardera les 7 dernières rotations, compressera les journaux archivés, et redémarrera MariaDB après la rotation.

L’analyse des journaux

L’efficacité de la journalisation ne réside pas seulement dans la capacité d’un système à enregistrer des informations, mais surtout dans la manière dont ces informations sont extraites, analysées et interprétées. Dans le contexte de MariaDB, l’analyse des journaux est vitale pour comprendre les performances, diagnostiquer les problèmes et optimiser les opérations.

Analyser des Journaux dans mariaDB

L’examen régulier des journaux de MariaDB permet d’identifier des modèles, des anomalies ou des tendances qui peuvent indiquer des problèmes ou des opportunités d’optimisation. Par exemple, un administrateur pourrait chercher des erreurs répétées, des avertissements, ou des requêtes particulièrement lentes qui pourraient affecter les performances.

Pour simplement examiner le contenu d’un journal, vous pourriez utiliser une commande telle que :

cat /chemin/vers/le/journal/mariadb.log | less

Cette commande permet de parcourir le contenu du journal de manière paginée, facilitant la lecture.

Outils d’Analyse:

Pour aller au-delà d’une simple visualisation, il existe des outils spécifiques conçus pour aider à l’analyse des journaux. L’un des plus notables pour MariaDB est mysqldumpslow, spécifiquement conçu pour analyser le journal des requêtes lentes.

Le journal des requêtes lentes trace les requêtes qui dépassent un certain temps d’exécution, permettant aux administrateurs d’identifier les requêtes qui pourraient nécessiter une optimisation. mysqldumpslow aide à trier ces requêtes, à les regrouper et à les afficher de manière plus compréhensible.

Un exemple d’utilisation de mysqldumpslow pourrait être :

mysqldumpslow -s t -t 10 /chemin/vers/le/journal/mariadb-slow.log

Cette commande affiche les 10 requêtes les plus lentes, triées par le temps total d’exécution.

La performance & l’impact sur le stockage

Chaque action dans une base de données, de la requête la plus simple à la transaction la plus complexe, nécessite une certaine quantité de ressources. Cela est également vrai pour la journalisation. Même si la journalisation offre de nombreux avantages en matière de surveillance, de dépannage et de récupération, elle n’est pas sans impact sur les performances et le stockage.

Impact de la Journalisation sur les Performances:

Lorsqu’une activité est journalisée, cela nécessite un temps d’écriture sur le disque et dans les environnements où les transactions sont nombreuses et fréquentes, ces opérations d’écriture peuvent s’accumuler, ce qui peut potentiellement ralentir le système. La journalisation intensive, en particulier lorsque plusieurs types de journaux sont activés simultanément, peut introduire des latences supplémentaires. Il est donc crucial d’évaluer le rapport entre les avantages de la journalisation et son coût en termes de performance, surtout dans des situations où la rapidité des requêtes est une priorité.

La désactivation des journaux non essentiels

Dans un environnement de production, l’efficacité est souvent une priorité. C’est pourquoi il est recommandé de désactiver les journaux qui ne sont pas essentiels. Par exemple, bien que le journal général (general log) puisse être utile pendant la phase de développement ou de débogage, il peut ne pas être nécessaire dans un environnement de production car il enregistre chaque requête envoyée au serveur, ce qui peut rapidement consommer de l’espace disque et affecter les performances.

Pour désactiver un journal spécifique, comme le journal général, vous pourriez ajouter ou modifier la ligne suivante dans le fichier de configuration my.cnf :

general_log = 0

Pensez à redémarrer le serveur MariaDB pour que les modifications prennent effet.

La sécurité des journaux

Dans un environnement de base de données comme MariaDB, la journalisation, tout en étant un outil précieux pour la surveillance et le dépannage, peut également contenir des informations sensibles. Cela peut aller des détails de requêtes spécifiques à des informations sur les opérations internes du serveur. Par conséquent, assurer la sécurité de ces journaux est d’une importance capitale pour protéger ces informations et garantir le bon fonctionnement du système.

La confidentialité et l’intégrité des journaux

La confidentialité garantit que les informations sensibles ne tombent pas entre de mauvaises mains, tandis que l’intégrité assure que les données ne sont pas altérées de manière non autorisée. Dans le contexte des journaux, cela pourrait signifier le chiffrement des fichiers de journal pour prévenir leur accès non autorisé, ou l’utilisation de sommes de contrôle pour s’assurer que le contenu du journal n’a pas été modifié.

Il est également recommandé d’éviter de consigner des informations sensibles, comme des mots de passe en clair. Si certaines informations sont essentielles pour la journalisation, elles doivent être anonymisées ou chiffrées avant d’être consignées.

La protection de l’accès aux fichiers de journal

Au-delà de la sécurisation du contenu des journaux, il est tout aussi crucial de protéger l’accès physique et logique aux fichiers de journal eux-mêmes. Cela peut être accompli en utilisant les permissions de système de fichiers appropriées.

Par exemple, pour limiter l’accès au fichier de journal uniquement à l’utilisateur et au groupe MariaDB, vous pourriez utiliser une commande comme (utilisée par ailleurs aussi sur les dossiers de FTP ) :

chmod 660 /chemin/vers/le/journal/mariadb.log
chown mysql:mysql /chemin/vers/le/journal/mariadb.log

Avec ces commandes, seul l’utilisateur mysql et les membres du groupe mysql peuvent lire et écrire dans le fichier de journal. Cela empêche les utilisateurs non autorisés d’accéder aux informations contenues dans le journal.

L’intégration avec d’autres outils

Dans des environnements informatiques complexes et étendus, la centralisation de la journalisation est souvent une nécessité plutôt qu’un luxe. Centraliser les journaux permet une meilleure surveillance, une recherche plus rapide des incidents, et une réponse plus efficace aux problèmes. MariaDB, comme la plupart des systèmes modernes, peut être configuré pour s’intégrer avec des outils populaires de centralisation et d’analyse des journaux. Parmi ces outils, l’ELK Stack (Elasticsearch, Logstash, Kibana) et Graylog sont largement reconnus.

L’intégration avec ELK Stack

Elasticsearch, Logstash et Kibana (ELK Stack) est une combinaison populaire utilisée pour centraliser et visualiser les journaux :

  • Logstash peut être configuré pour ingérer les journaux de MariaDB, les transformer si nécessaire, puis les envoyer à Elasticsearch pour l’indexation ;
  • Elasticsearch stocke les journaux et offre des capacités de recherche rapides ;
  • Kibana fournit une interface graphique pour visualiser, explorer et créer des tableaux de bord à partir des données stockées dans Elasticsearch.

L’intégration de MariaDB avec ELK nécessite généralement un agent, comme Filebeat, pour envoyer les journaux à Logstash ou directement à Elasticsearch.

L’intégration avec Graylog

Graylog est une autre plateforme puissante pour la centralisation et l’analyse des journaux. Avec sa capacité à créer des alertes basées sur des conditions spécifiques et sa puissante interface de recherche, Graylog est un choix solide pour les entreprises nécessitant une surveillance approfondie.

Pour intégrer MariaDB avec Graylog, on peut utiliser des agents comme Sidecar pour collecter les journaux de MariaDB et les transmettre à un serveur Graylog.

En conclusion du sujet : Cas d’utilisation pratiques:

L’analyse approfondie des journaux n’est pas simplement une tâche théorique ou une bonne pratique recommandée sans fondement. Dans la réalité quotidienne des administrateurs de bases de données, des ingénieurs système et d’autres professionnels de l’informatique, la capacité à parcourir, à comprendre et à agir sur la base des informations contenues dans les journaux est souvent la clé pour résoudre des problèmes complexes ou pour optimiser les systèmes. Voici quelques exemples concrets qui illustrent la valeur inestimable de la journalisation dans MariaDB :

Le diagnostic d’une panne inattendue

Imaginez qu’un serveur MariaDB cesse soudainement de répondre aux requêtes sans aucune raison apparente. Les utilisateurs signalent des temps d’arrêt, et une action rapide est nécessaire. En examinant le journal des erreurs (Error Log), un administrateur découvre que le serveur avait rencontré des problèmes de mémoire insuffisante, conduisant à son incapacité à servir des requêtes. Grâce à cette information, l’équipe IT a pu rapidement augmenter la mémoire allouée au serveur et prendre des mesures pour surveiller la consommation de mémoire à l’avenir, évitant ainsi des pannes similaires.

L’optimisation des requêtes

Dans un autre scénario, un administrateur de base de données pourrait remarquer que certaines requêtes prennent beaucoup plus de temps que d’autres à s’exécuter. En utilisant le journal des requêtes lentes (Slow Query Log), l’administrateur peut identifier précisément les requêtes qui posent problème et optimiser les index ou réécrire les requêtes pour améliorer les performances.

La prévention des attaques

Un administrateur de sécurité, en examinant régulièrement le journal général, pourrait remarquer des tentatives répétées de connexion à la base de données depuis une adresse IP inconnue. Cela pourrait indiquer une tentative d’attaque ou d’intrusion. Grâce à cette détection précoce, des mesures peuvent être prises pour bloquer cette adresse IP et renforcer la sécurité de la base de données.

Pensez à faire des tests si vous souhaitez progresser sur toutes ces questions !

R.C.