Beats:如何使用 Filebeat 将 MySQL 日志发送到 Elasticsearch

在今天的文章中,我们来详细地描述如果使用 Filebeat 把 MySQL 的日志信息传输到 Elasticsearch中。为了说明问题的方便,我们的测试系统的配置是这样的:

 

 

我有一台 MacOS 机器。在上面我安装了 Elasticsearch 及 Kibana。在这个机器里,我同时安装了一个 Ubuntu 18.04 的虚拟机。在这个 Ubunutu 机器上,我安装了 MySQL 及Filebeat。它们的IP地址分别显示如上。针对你们自己的测试环境,你们的IP地址可能和我的不太一样。

 

准备工作

安装 Elasticsearch

如果大家还没安装好自己的 Elastic Stack的话,那么请按照我之前的教程 “如何在Linux,MacOS及Windows上进行安装Elasticsearch”  安装好自己的 Elasticsearch。由于我们的 Elastic Stack 需要被另外一个 Ubuntu VM 来访问,我们需要对我们的 Elasticsearch 进行配置。首先使用一个编辑器打开在 config 目录下的 elasticsearch.yml 配置文件。我们需要修改 network.host 的IP地址。在你的 MacOS 及 Linux 机器上,我们可以使用:

$ ifconfig

来查看到我们的机器的 IP 地址。针对我的情况,我的机器的 IP 地址是:192.168.0.100。

我们也必须在 elasticsearch.yml 的最后加上 discovery.type: single-node,表明我们是单个 node。

等修改完我们的 IP 地址后,我们保存 elasticsearch.yml 文件。然后重新运行我们的 elasticsearch。我们可以在一个浏览器中输入刚才输入的IP地址并加上端口号9200。这样可以查看一下我们的 elasticsearch 是否已经正常运行了。

安装 Kibana

我们可以按照 “如何在Linux,MacOS及Windows上安装Elastic栈中的Kibana” 中介绍的那样来安装我们的 Kibana。由于我们的 Elasticsearch 的 IP 地址已经改变,所以我们必须修改我们的 Kibana 的配置文件。我们使用自己喜欢的编辑器打开在 config 目录下的 kibana.yml 文件,并找到 server.host。把它的值修改为自己的电脑的 IP 地址。针对我的情况是:

同时找到elasticsearch.hosts,并把自己的IP地址输入进去:

保存我们的 kibana.yml 文件,并运行我们的 Kibana。同时在浏览器的地址中输入自己的IP地址及 5601 端口:

如果配置成功的话,我们就可以看到上面的画面。

 

安装 Ubuntu 虚拟机

这个不在我的这个教程之内。在网上我们可以找到许多的教程教我们如何安装 Ubuntu 虚拟机。

 

在 Ubuntu 上安装 MySQL

我们可以按照链接 https://vitux.com/how-to-install-and-configure-mysql-in-ubuntu-18-04-lts/ 来安装 MySQL。简单地说,安装步骤如下:

如果尚未安装 MySQL,则可以使用以下步骤安装和配置它。 你需要做的第一件事就是更新系统。

sudo apt-get update

然后像这样安装 MySQL:

sudo apt-get install mysql-server

在安装过程中,系统将提示你设置 root 密码。 记下它,因为管理 MySQL 数据库将需要它。或者,你通过如下的方法来设置 MySQL 的密码:

sudo mysql

等进入到 MySQL 后,打入如下的指令来创建你的 root 用户的密码:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

在上面的句子里,使用自己喜欢的密码来代替 password。

下一步是配置 MySQL 以写入常规查询日志文件和慢速查询日志文件,因为默认情况下会禁用这些配置。 要更改配置,你将需要编辑包含用户数据库设置的 my.cnf 文件。

sudo vi /etc/mysql/my.cnf

常规查询和慢速查询的有效配置应如下所示:

[mysqld]
general_log = 1
general_log_file = /var/log/mysql/mysql.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log_queries_not_using_indexes = 1

我们可以把上面的配置添加到我们的 my.cnf 文件当中去:

请注意,在低于 5.1.29 的 MySQL 版本中,使用了变量 log_slow_queries 而不是 slow_query_log。

进行以下更改后,请确保重新启动 MySQL:

sudo service mysql restart

现在,你的 MySQL 已准备好编写慢速查询,这些查询将通过 Filebeat 传送到你的 Elasticsearch 集群中。我们可以检查一下我们的 MySQL 是否已经成功运行:

systemctl status mysql.service

等我们成功配置后我们的 MySQL,我们可以开始对我们的 MySQL 进行一些操作,然后你可以在如下的目录中查看到相应的 log 文件:

ls /var/log/mysql/

 

安装 Filebeat

在 Ubuntu 上安装 Filebeat 也是非常直接的。我们可以先打开我们的 Kibana。

点击上面的 “Add log data” 按钮:

点击上面的 “MySQL logs” 按钮:

 

选择上面的操作系统。针对我们的 Ubuntu 系统,它是一个 DEB 格式的安装文件。我们按照上面的要求一步一步地进行安装和修改。在修改 filebeat.yml 文件时,我们需要注意的三点:

1)填入 Kibana 的地址:

2)填入 Elasticsearch 的地址及端口号:

我们需要运行如下的命令来把相应的 dashboard,pipeline 及 template 信息上传到 Elasticsearch 和 Kibana 中。

sudo filebeat modules enable mysql
sudo filebeat setup
sudo service filebeat start

等我们启动我们的 filebeat 后,我们可以通过如下的命令来检查filebeat服务是否运行正常:

sudo systemctl status filebeat

 

Kibana

我们可以打开 Kibana,并在 Kibana 中查看由 filebeat 发送过来的 MySQL 的数据:

在上面,我们可以看到MySQL的dashboard:

至此,我们可以看到所有的关于 MySQL 的信息,这里包括以下 queries 及 error logs 等。

上面我们显示了如何直接把 MySQL 的信息发送到 Elasticsearch,并对数据进行分析。当然,我们也可以把数据发送到logstash来对数据进行处理,然后再发送到 Elasticsearch 中。我们的 filebeat.yml 文件的配置文件可以这么写:

filebeat.prospectors:
- input_type: log
 paths:
 - /var/log/mysql/*.log
 document_type: syslog
 registry: /var/lib/filebeat/registry
output.logstash:
 hosts: ["mylogstashurl.example.com:5044"]

总结

如本教程所示,Filebeat 是用于 MySQL 数据库和 Elasticsearch 集群的出色日志传送解决方案。 与以前的版本相比,它非常轻巧,可以有效地发送日志事件。 Filebeat 支持压缩,并且可以通过单个 yaml 文件轻松配置。 使用 Filebeat,你可以轻松地管理日志文件,跟踪日志注册表,创建自定义字段以在日志中启用细化过滤和发现,以及使用 Kibana 可视化功能立即为日志数据进行展示。

已标记关键词 清除标记
相关推荐