全部產品
Search
文件中心

Elasticsearch:通過自建Filebeat收集MySQL日誌

更新時間:Jun 30, 2024

如果您需要查看並分析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執行個體。

    具體操作步驟請參見通過密碼認證登入Linux執行個體

    說明

    本文檔以普通使用者權限為例。

  2. 下載並安裝MySQL源。

    wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
    sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
  3. 安裝MySQL。

    sudo yum install mysql-server
  4. 在my.cnf檔案中配置error記錄檔和慢查詢記錄檔。

    說明

    預設情況下MySQL會禁用記錄檔配置,因此您需要手動開啟。您也可通過MySQL命令開啟臨時慢日誌。

    1. 開啟my.cnf檔案。

      sudo 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. (可選)建立記錄檔。

      重要

      MySQL 5.6版本不會主動建立記錄檔,需要您手動建立對應檔案。

      sudo mkdir /var/log/mysql
      sudo touch /var/log/mysql/mysqld.log
      sudo touch /var/log/mysql/slow-mysql-query.log
    4. 為所有使用者授予記錄檔的讀寫權限。

      sudo chmod 777 /var/log/mysql/slow-mysql-query.log /var/log/mysql/mysqld.log
  5. 啟動MySQL並查看服務狀態。

    sudo systemctl start mysqld
    sudo systemctl status mysqld

步驟二:安裝並配置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檔案。

      sudo 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檔案。

      sudo 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執行個體在同一Virtual Private Cloud(Virtual Private Cloud)下,請使用私網地址;如果不在同一VPC下,請使用公網地址。使用公網地址需要配置公網地址訪問白名單,詳情請參見配置執行個體公網或私網訪問白名單

      username

      Elasticsearch執行個體的訪問使用者名稱,預設為elastic。

      password

      對應使用者的密碼,一般在建立執行個體時設定。如果忘記,可重設,重設密碼的注意事項和操作步驟請參見重設執行個體訪問密碼

  9. 執行以下命令,將Dashboard等資訊上傳到Elasticsearch和Kibana中,並啟用Filebeat服務。

    sudo filebeat setup
    sudo service filebeat start

步驟三:使用Kibana Dashboard展示MySQL日誌

  1. 在ECS中重啟MySQL資料庫,並查詢任意資料進行測試。

    重啟命令如下。

    sudo systemctl restart mysqld
  2. 查看日誌內容。

    本文檢測到的日誌內容如下。

    圖 1. 慢日誌內容慢日誌內容

    圖 2. error日誌內容error日誌內容

  3. 登入目標Elasticsearch執行個體的Kibana控制台。

    具體操作步驟請參見登入Kibana控制台

  4. 在左側導覽列,單擊Dashboard

  5. Dashboards列表中,單擊[Filebeat MySQL] Overview

  6. 在頁面右上方選取查詢時間,查看對應時間段內的日誌。

    查看日誌