当您需要查看并分析MySQL的日志信息(例如慢日志、error日志等)时,可通过Filebeat采集MySQL日志并发送到阿里云Elasticsearch中,然后在Kibana控制台中完成可视化查询、分析和展示。本文介绍具体的实现方法。

操作流程

  1. 准备工作
    创建阿里云Elasticsearch和ECS实例。Elasticsearch实例用来接收Filebeat采集的MySQL日志,并提供一个Kibana控制台进行可视化查询、分析与展示;ECS实例用来安装MySQL和Filebeat。
  2. 步骤一:安装并配置MySQL
    安装MySQL,并在MySQL的配置文件中开启error和慢查询日志文件配置。开启后,Filebeat才可采集到对应的日志。
  3. 步骤二:安装并配置Filebeat
    安装Filebeat,用来将MySQL中的日志采集到阿里云Elasticsearch集群中。需要启用Filebeat的MySQL模块,并在配置文件中指定Kibana和阿里云Elasticsearch的访问地址。
  4. 步骤三:使用Kibana Dashboard展示MySQL日志
    进行查询测试,并通过Kibana Dashboard展示对应的error和慢查询日志。

准备工作

步骤一:安装并配置MySQL

  1. 连接ECS实例。
    具体操作步骤请参见 通过VNC远程连接登录Linux实例
  2. 下载并安装MySQL源。
    wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
    rpm -ivh mysql-community-release-el7-5.noarch.rpm
  3. 安装MySQL。
    yum install mysql-server
  4. 启动MySQL并查看服务状态。
    systemctl start mysqld
    systemctl status mysqld
  5. 在my.cnf文件中配置error日志文件和慢查询日志文件。
    说明 默认情况下MySQL会禁用日志文件配置,因此您需要手动开启。您也可通过MySQL命令开启临时慢日志。
    1. 打开my.cnf文件。
      vim /etc/my.cnf
    2. 配置日志文件。
      [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.log
      参数 说明
      log_queries_not_using_indexes 是否将未使用索引的查询记录到慢查询日志中。1表示记录,0表示不记录。
      slow_query_log 是否开启慢查询日志。on表示开启,off表示关闭。
      slow_query_log_file 指定慢查询日志的存储路径。
      long_query_time 慢查询阈值,单位为秒。当查询时间超过设定的阈值时,MySQL会将日志写入slow_query_log_file指定的文件中。
      注意 本文为方便测试,将该参数值设置为0,实际情况中请根据业务需要合理设置该参数值。
    3. 创建日志文件。
      mkdir /var/log/mysql
      touch /var/log/mysql/mysqld.log
      touch /var/log/mysql/slow-mysql-query.log
      注意 MySQL不会主动创建日志文件,所以您需要手动创建对应文件。
    4. 为所有用户授予日志文件的读写权限。
      chmod 777 /var/log/mysql/slow-mysql-query.log /var/log/mysql/mysqld.log

步骤二:安装并配置Filebeat

  1. 登录目标阿里云Elasticsearch实例的Kibana控制台。
    具体操作步骤请参见 登录Kibana控制台
  2. 在左侧导航栏,单击Logs
  3. 单击View setup instructions
  4. Add Data to Kibana页面,单击MySQL logs
  5. Self managed页面,单击RPM
    说明 由于本文使用的是Linux系统,因此选择 RPM。实际情况中,请根据您的操作系统类型选择合适的安装方式。
  6. 按照页面提示,在ECS中安装Filebeat。
  7. 修改MySQL模块配置,分别指定待采集的error和slow日志文件。
    1. 启用MySQL模块。
      sudo filebeat modules enable mysql
    2. 打开mysql.yml文件。
      vim /etc/filebeat/modules.d/mysql.yml
    3. 修改MySQL模块配置。
      修改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:
      参数 说明
      enabled 设置为true
      var.paths 设置为对应日志文件的路径。需要与MySQL配置文件中设置的路径保持一致,详情请参见步骤一:安装并配置MySQL
  8. 配置filebeat.yml文件。
    1. 打开filebeat.yml文件。
      vim /etc/filebeat/filebeat.yml
    2. 修改Filebeat modules配置。
      Filebeat modules配置
      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
    3. 修改Kibana配置。
      修改Kibana配置
      setup.kibana:
      host: "https://es-cn-0pp1jxvcl000*****.kibana.elasticsearch.aliyuncs.com:5601"

      host:Kibana的访问地址。可在Kibana配置页面获取,详情请参见查看Kibana公网地址,格式为<Kibana公网地址>:5601

    4. 修改Elasticsearch output配置。
      修改ES配置
      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>"
      参数 说明
      hosts 阿里云Elasticsearch的访问地址,格式为<实例的内网或公网地址>:9200。Elasticsearch实例的内网或公网地址可在实例的基本信息页面获取,详情请参见查看实例的基本信息
      说明 如果ECS和Elasticsearch实例在同一专有网络VPC(Virtual Private Cloud)下,请使用内网地址;如果不在同一VPC下,请使用公网地址。使用公网地址需要配置公网地址访问白名单,详情请参见 配置ES公网或私网访问白名单
      username 阿里云Elasticsearch实例的访问用户名,默认为elastic。
      password 对应用户的密码,一般在创建实例时设定。如果忘记,可重置,重置密码的注意事项和操作步骤请参见重置实例访问密码
  9. 执行以下命令,将Dashboard等信息上传到Elasticsearch和Kibana中,并启用Filebeat服务。
    sudo filebeat setup
    sudo service filebeat start

步骤三:使用Kibana Dashboard展示MySQL日志

  1. 在ECS中重启MySQL数据库,并查询任意数据进行测试。
    重启命令如下。
    systemctl restart mysqld
  2. 查看日志内容。
    本文检测到的日志内容如下。
    图 1. 慢日志内容
    慢日志内容
    图 2. error日志内容
    error日志内容
  3. 登录目标Elasticsearch实例的Kibana控制台。
    具体操作步骤请参见 登录Kibana控制台
  4. 在左侧导航栏,单击Dashboard
  5. Dashboards列表中,单击[Filebeat MySQL] Overview
  6. 在页面右上角选择查询时间,查看对应时间段内的日志。
    查看日志