Utilisez Filebeat pour collecter les journaux MySQL, tels que le journal des requêtes lentes et le journal des erreurs, puis envoyez-les vers une instance Alibaba Cloud Elasticsearch afin de les interroger, les analyser et les visualiser dans Kibana.
Procédure
-
Créez une instance Alibaba Cloud Elasticsearch pour recevoir les journaux et une console Kibana pour l'analyse, ainsi qu'une instance ECS pour héberger MySQL et Filebeat.
-
Étape 1 : Installer et configurer MySQL
Installez MySQL et activez le journal des erreurs ainsi que le journal des requêtes lentes dans le fichier de configuration MySQL. Filebeat ne peut collecter ces journaux qu'une fois activés.
-
Étape 2 : Installer et configurer Filebeat
Installez Filebeat pour collecter les journaux MySQL et les envoyer vers une instance Alibaba Cloud Elasticsearch. Activez le module MySQL et spécifiez les adresses d'accès à Kibana et à Alibaba Cloud Elasticsearch dans le fichier de configuration de Filebeat.
-
Étape 3 : Visualiser les journaux MySQL dans Kibana
Exécutez une requête de test et consultez le journal des erreurs ainsi que le journal des requêtes lentes sur un tableau de bord Kibana.
Prérequis
-
Une instance Alibaba Cloud Elasticsearch est créée.
Pour plus d'informations, consultez la rubrique Créer une instance Alibaba Cloud Elasticsearch. Ce guide utilise une instance General-purpose (v6.7.0) à titre d'exemple.
-
Une instance ECS est créée.
Pour plus d'informations, consultez la rubrique Créer une instance à l'aide de l'onglet de lancement personnalisé. Ce guide utilise une instance ECS basée sur CentOS à titre d'exemple.
Étape 1 : Installer et configurer MySQL
-
Connectez-vous à l'instance ECS.
Pour plus d'informations, consultez la rubrique Se connecter à une instance Linux à l'aide d'un mot de passe.
RemarqueLes commandes de ce guide sont exécutées en tant qu'utilisateur non root.
-
Téléchargez et installez le dépôt MySQL.
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm -
Installez MySQL.
sudo yum install mysql-server -
Configurez le fichier du journal des erreurs et le fichier du journal des requêtes lentes dans le fichier my.cnf.
RemarquePar défaut, les fichiers journaux MySQL sont désactivés. Vous devez les activer manuellement. Vous pouvez également exécuter une commande MySQL pour activer temporairement le journal des requêtes lentes.
-
Ouvrez le fichier my.cnf.
sudo vim /etc/my.cnf -
Configurez les fichiers journaux.
[mysqld] log_queries_not_using_indexes = 1 slow_query_log=on slow_query_log_file=/var/log/mysql/slow-mysql-query.log long_query_time=0 [mysqld_safe] log-error=/var/log/mysql/mysqld.logParamètre
Description
log_queries_not_using_indexesIndique s'il faut enregistrer les requêtes n'utilisant pas d'index dans le journal des requêtes lentes. La valeur
1active l'enregistrement et la valeur0le désactive.slow_query_logActive ou désactive le journal des requêtes lentes. La valeur
onactive le journal et la valeuroffle désactive.slow_query_log_fileChemin de stockage du journal des requêtes lentes.
long_query_timeSeuil de lenteur des requêtes en secondes. MySQL enregistre dans le fichier spécifié par
slow_query_log_fileles requêtes dépassant ce seuil.ImportantÀ des fins de test, ce paramètre est défini sur
0dans cette rubrique. Dans un environnement de production, définissez la valeur en fonction de vos besoins métier. -
(Facultatif) Créez les fichiers journaux.
ImportantMySQL 5.6 ne crée pas automatiquement les fichiers journaux. Vous devez les créer manuellement.
sudo mkdir /var/log/mysql sudo touch /var/log/mysql/mysqld.log sudo touch /var/log/mysql/slow-mysql-query.log -
Accordez à tous les utilisateurs les permissions de lecture et d'écriture sur les fichiers journaux.
sudo chmod 777 /var/log/mysql/slow-mysql-query.log /var/log/mysql/mysqld.log
-
-
Démarrez MySQL et vérifiez son état.
sudo systemctl start mysqld sudo systemctl status mysqld
Étape 2 : Installer et configurer Filebeat
-
Connectez-vous à la console Kibana de votre instance Alibaba Cloud Elasticsearch.
Pour plus d'informations, consultez la rubrique Se connecter à la console Kibana.
Dans le volet de navigation de gauche, cliquez sur Logs.
Cliquez sur View setup instructions.
Sur la page Add Data to Kibana, cliquez sur MySQL logs.
-
Sur la page Self managed, cliquez sur RPM.
RemarqueCe guide utilise une instance basée sur Linux, c'est pourquoi l'option RPM est sélectionnée. Choisissez la méthode d'installation adaptée à votre système d'exploitation.
Suivez les instructions affichées à l'écran pour installer Filebeat sur votre instance ECS.
-
Modifiez la configuration du module MySQL pour spécifier les chemins d'accès aux fichiers du journal des erreurs et du journal des requêtes lentes.
-
Activez le module MySQL.
sudo filebeat modules enable mysql -
Ouvrez le fichier mysql.yml.
sudo vim /etc/filebeat/modules.d/mysql.yml -
Modifiez la configuration du module MySQL.
- module: mysql # Error logs error: enabled: true var.paths: ["/var/log/mysql/mysqld.log"] # Set custom paths for the log files. If left empty, # Filebeat will choose the paths depending on your OS. #var.paths: # Slow logs slowlog: enabled: true var.paths: ["/var/log/mysql/slow-mysql-query.log"] # Set custom paths for the log files. If left empty, # Filebeat will choose the paths depending on your OS. #var.paths:Paramètre
Description
enabledDéfinissez la valeur sur
true.var.pathsChemin d'accès au fichier journal. Ce chemin doit correspondre à celui spécifié dans le fichier de configuration MySQL. Pour plus d'informations, consultez la rubrique Étape 1 : Installer et configurer MySQL.
-
-
Configurez le fichier filebeat.yml.
-
Ouvrez le fichier filebeat.yml.
sudo vim /etc/filebeat/filebeat.yml -
Modifiez la configuration des modules Filebeat.
filebeat.config.modules: # Glob pattern for configuration loading path: /etc/filebeat/modules.d/mysql.yml # Set to true to enable config reloading reload.enabled: true # Period on which files under path should be checked for changes reload.period: 1s -
Modifiez la configuration Kibana.
#================================ Kibana ===================================== # Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. # This requires a Kibana endpoint configuration. setup.kibana: # Kibana Host # Scheme and port can be left out and will be set to the default (http and 5601) # In case you specify and additional path, the scheme is required: http://localhost:5601/path # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601 host: "https://es-cn-xxx.kibana.elasticsearch.aliyuncs.com:5601"host: Adresse d'accès à la console Kibana, que vous pouvez obtenir depuis la page de configuration Kibana. Pour plus d'informations, consultez la rubrique Afficher le point de terminaison public de la console Kibana. Le format est le suivant :<point de terminaison public Kibana>:5601. -
Modifiez la configuration de sortie Elasticsearch.
output.elasticsearch: # Array of hosts to connect to. hosts: ["es-cn-0pp1jxvcl000*****.elasticsearch.aliyuncs.com:9200"] # Optional protocol and basic auth credentials. #protocol: "https" username: "elastic" password: "<your_password>"Paramètre
Description
hostsAdresse d'accès à votre instance Alibaba Cloud Elasticsearch, au format
<Adresse IP privée ou publique de l'instance>:9200. Vous trouverez cette adresse sur la page Informations de base de l'instance. Pour plus d'informations, consultez la rubrique Afficher les informations de base d'une instance.RemarqueUtilisez l'adresse IP privée si vos instances ECS et Alibaba Cloud Elasticsearch se trouvent dans le même Virtual Private Cloud (VPC). Sinon, utilisez l'adresse IP publique et configurez une liste d'autorisation d'adresses IP. Pour plus d'informations, consultez la rubrique Configurer une liste d'autorisation d'adresses IP publiques ou privées pour une instance.
usernameNom d'utilisateur pour accéder à l'instance Alibaba Cloud Elasticsearch. Valeur par défaut : elastic.
passwordMot de passe associé au nom d'utilisateur spécifié, défini lors de la création de l'instance. Si vous l'avez oublié, vous pouvez le réinitialiser. Pour plus d'informations, consultez la rubrique Réinitialiser le mot de passe d'accès d'une instance.
-
-
Exécutez les commandes suivantes pour charger les tableaux de bord et autres ressources dans Elasticsearch et Kibana, puis démarrez le service Filebeat.
sudo filebeat setup sudo service filebeat start
Étape 3 : Visualiser les journaux MySQL dans Kibana
-
Sur l'instance ECS, redémarrez MySQL et exécutez une requête de test.
Exécutez la commande suivante pour redémarrer MySQL :
sudo systemctl restart mysqld -
Consultez le contenu des journaux.
Les exemples suivants présentent des entrées de journal types.
[root@zl-test003 ~]# tail -50 /var/log/mysql/slow-mysql-query.log # Query_time: 0.000385 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0 SET timestamp=1590720469; ; # User@Host: root[root] @ localhost [] Id: 2 # Query_time: 0.000138 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0 SET timestamp=1590720469; ; # User@Host: root[root] @ localhost [] Id: 2 # Query_time: 0.000214 Lock_time: 0.000048 Rows_sent: 5 Rows_examined: 5 SET timestamp=1590720469; SELECT * from student; # Time: 200529 10:47:52 # User@Host: root[root] @ localhost [] Id: 2 # Query_time: 0.000231 Lock_time: 0.000117 Rows_sent: 2 Rows_examined: 10 SET timestamp=1590720472; SELECT * from runoob_tbl WHERE runoob_author='xxx'; # User@Host: root[root] @ localhost [] Id: 2 # Query_time: 0.000171 Lock_time: 0.000075 Rows_sent: 2 Rows_examined: 10 SET timestamp=1590720472; SELECT * from runoob_tbl WHERE runoob_author='xxx'; # Time: 200529 10:47:53 # User@Host: root[root] @ localhost [] Id: 2 # Query_time: 0.000149 Lock_time: 0.000075 Rows_sent: 2 Rows_examined: 10 SET timestamp=1590720473; SELECT * from runoob_tbl WHERE runoob_author='xxx'; # Time: 200529 10:47:56 # User@Host: root[root] @ localhost [] Id: 2 # Query_time: 0.000039 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0 SET timestamp=1590720476; sleep(4);[root@zl-test003 ~]# tail -50 /var/log/mysql/mysqld.log 2020-05-29 10:47:43 4240 [Note] Shutting down plugin 'INNODB_LOCKS' 2020-05-29 10:47:43 4240 [Note] Shutting down plugin 'INNODB_TRX' 2020-05-29 10:47:43 4240 [Note] Shutting down plugin 'InnoDB' 2020-05-29 10:47:43 4240 [Note] InnoDB: FTS optimize thread exiting. 2020-05-29 10:47:43 4240 [Note] InnoDB: Starting shutdown... 2020-05-29 10:47:45 4240 [Note] InnoDB: Shutdown completed; log sequence number 1666138 2020-05-29 10:47:45 4240 [Note] Shutting down plugin 'BLACKHOLE' 2020-05-29 10:47:45 4240 [Note] Shutting down plugin 'ARCHIVE' 2020-05-29 10:47:45 4240 [Note] Shutting down plugin 'MRG_MYISAM' 2020-05-29 10:47:45 4240 [Note] Shutting down plugin 'MyISAM' 2020-05-29 10:47:45 4240 [Note] Shutting down plugin 'MEMORY' 2020-05-29 10:47:45 4240 [Note] Shutting down plugin 'CSV' 2020-05-29 10:47:45 4240 [Note] Shutting down plugin 'sha256_password' 2020-05-29 10:47:45 4240 [Note] Shutting down plugin 'mysql_native_password' 2020-05-29 10:47:45 4240 [Note] Shutting down plugin 'mysql_old_password' 2020-05-29 10:47:45 4240 [Note] Shutting down plugin 'binlog' 2020-05-29 10:47:45 4240 [Note] /usr/sbin/mysqld: Shutdown complete 200529 10:47:45 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended 200529 10:47:45 mysqld_safe Logging to '/var/log/mysql/mysqld.log'. 200529 10:47:45 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql 2020-05-29 10:47:45 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_def_timestamp server option (see documentation for more details). 2020-05-29 10:47:45 0 [Note] /usr/sbin/mysqld (mysqld 5.6.48-log) starting as process 21710 ... 2020-05-29 10:47:45 21710 [Warning] Buffered warning: Changed limits: max_open_files: 1024 (requested 5000) -
Connectez-vous à la console Kibana de l'instance Alibaba Cloud Elasticsearch de destination.
Pour plus d'informations, consultez la rubrique Se connecter à la console Kibana.
Dans le volet de navigation de gauche, cliquez sur Dashboard.
Dans la liste dashboards, cliquez sur [Filebeat MySQL] Overview.
-
Dans le coin supérieur droit de la page, sélectionnez une plage de temps pour afficher les journaux.
