Filebeat を使用して、スロークエリログやエラーログなどの MySQL ログを収集し、Alibaba Cloud Elasticsearch インスタンスに送信して、Kibana でクエリ、分析、可視化できます。
手順
-
ログを受信するための Alibaba Cloud Elasticsearch インスタンスと分析用の Kibana コンソール、および MySQL と Filebeat をホストするための Elastic Compute Service (ECS) インスタンスを作成します。
-
MySQL をインストールし、MySQL の設定ファイルでエラーログとスロークエリログを有効にします。これらのログを有効にしないと、Filebeat は収集できません。
-
Filebeat をインストールして MySQL ログを収集し、Alibaba Cloud Elasticsearch インスタンスに送信します。Filebeat の設定ファイルで MySQL モジュールを有効にし、Kibana と Alibaba Cloud Elasticsearch のアクセスアドレスを指定します。
-
テストクエリを実行し、Kibana ダッシュボードでエラーログとスロークエリログを表示します。
前提条件
-
Alibaba Cloud Elasticsearch インスタンスが作成されていること。
詳細については、「Alibaba Cloud Elasticsearch インスタンスの作成」をご参照ください。このガイドでは、汎用 (v6.7.0) インスタンスを例として使用します。
-
ECS インスタンスが作成されていること。
詳細については、「カスタム起動タブを使用したインスタンスの作成」をご参照ください。このガイドでは、CentOS ベースの ECS インスタンスを例として使用します。
ステップ 1:MySQL のインストールと設定
-
ECS インスタンスに接続します。
詳細については、「パスワードを使用した Linux インスタンスへの接続」をご参照ください。
説明このガイドのコマンドは、root 以外のユーザーで実行してください。
-
MySQL リポジトリをダウンロードしてインストールします。
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm -
MySQL をインストールします。
sudo yum install mysql-server -
my.cnf ファイルでエラーログファイルとスロークエリログファイルを設定します。
説明デフォルトでは、MySQL ログファイルは無効になっています。手動で有効にする必要があります。MySQL コマンドを実行して、スロークエリログを一時的に有効にすることもできます。
-
my.cnf ファイルを開きます。
sudo vim /etc/my.cnf -
ログファイルを設定します。
[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に設定しています。本番環境では、ビジネス要件に基づいて値を設定してください。 -
(オプション) ログファイルを作成します。
重要MySQL 5.6 ではログファイルが自動的に作成されません。手動で作成する必要があります。
sudo mkdir /var/log/mysql sudo touch /var/log/mysql/mysqld.log sudo touch /var/log/mysql/slow-mysql-query.log -
すべてのユーザーにログファイルの読み書き権限を付与します。
sudo chmod 777 /var/log/mysql/slow-mysql-query.log /var/log/mysql/mysqld.log
-
-
MySQL を起動し、そのステータスを確認します。
sudo systemctl start mysqld sudo systemctl status mysqld
ステップ 2:Filebeat のインストールと設定
-
Alibaba Cloud Elasticsearch インスタンスの Kibana コンソールにログインします。
詳細については、「Kibana コンソールへのログイン」をご参照ください。
-
左側のナビゲーションペインで、[ログ] をクリックします。
-
[セットアップ手順を表示] をクリックします。
-
[Kibana にデータを追加] ページで、[MySQL ログ] をクリックします。
-
[セルフマネージド] ページで、[RPM] をクリックします。
説明このガイドでは Linux ベースのインスタンスを使用しているため、[RPM] が選択されています。ご使用のオペレーティングシステムに適したインストール方法を選択してください。
-
画面の指示に従って、ECS インスタンスに Filebeat をインストールします。
-
MySQL モジュールの設定を変更して、エラーログファイルとスロークエリログファイルのパスを指定します。
-
MySQL モジュールを有効にします。
sudo filebeat modules enable mysql -
mysql.yml ファイルを開きます。
sudo vim /etc/filebeat/modules.d/mysql.yml -
MySQL モジュールの設定を変更します。
- module: mysql # Error logs error: enabled: true var.paths: ["/var/log/mysql/mysqld.log"] # ログファイルのカスタムパスを設定します。空のままにすると、 # Filebeat は OS に応じてパスを選択します。 #var.paths: # Slow logs slowlog: enabled: true var.paths: ["/var/log/mysql/slow-mysql-query.log"] # ログファイルのカスタムパスを設定します。空のままにすると、 # Filebeat は OS に応じてパスを選択します。 #var.paths:パラメーター
説明
enabled値を
trueに設定します。var.pathsログファイルのパスです。このパスは、MySQL 設定ファイルで指定されたパスと一致する必要があります。詳細については、「ステップ 1:MySQL のインストールと設定」をご参照ください。
-
-
filebeat.yml ファイルを設定します。
-
filebeat.yml ファイルを開きます。
sudo vim /etc/filebeat/filebeat.yml -
Filebeat モジュールの設定を変更します。
filebeat.config.modules: # 設定読み込み用のグロブパターン path: /etc/filebeat/modules.d/mysql.yml # 設定のリロードを有効にするには true に設定します reload.enabled: true # path 配下のファイルの変更をチェックする期間 reload.period: 1s -
Kibana の設定を変更します。
#================================ Kibana ===================================== # Beats バージョン 6.0.0 以降、ダッシュボードは Kibana API を介してロードされます。 # これには Kibana エンドポイントの設定が必要です。 setup.kibana: # Kibana ホスト # スキームとポートは省略でき、デフォルト (http および 5601) に設定されます。 # 追加のパスを指定する場合、スキームが必要です:http://localhost:5601/path # IPv6 アドレスは常に次のように定義する必要があります:https://[2001:db8::1]:5601 host: "https://es-cn-xxx.kibana.elasticsearch.aliyuncs.com:5601"host:Kibana コンソールのアクセスアドレスです。Kibana 設定ページから取得できます。 詳細については、「Kibana コンソールのパブリックエンドポイントを表示する」をご参照ください。 形式は<Kibana パブリックエンドポイント>:5601です。 -
Elasticsearch の出力設定を変更します。
output.elasticsearch: # 接続するホストの配列。 hosts: ["es-cn-0pp1jxvcl000*****.elasticsearch.aliyuncs.com:9200"] # オプションのプロトコルと基本認証情報。 #protocol: "https" username: "elastic" password: "<your_password>"パラメーター
説明
hostsAlibaba Cloud Elasticsearch インスタンスのアクセスアドレス (
<インスタンスのプライベート IP アドレスまたはパブリック IP アドレス>:9200形式) は、インスタンスの「基本情報」ページで確認できます。詳細については、「インスタンスの基本情報を表示する」をご参照ください。説明ECS インスタンスと Alibaba Cloud Elasticsearch インスタンスが同じ Virtual Private Cloud (VPC) 内にある場合は、プライベート IP アドレスを使用します。それ以外の場合は、パブリック IP アドレスを使用し、IP ホワイトリストを設定します。詳細については、「インスタンスのパブリックまたはプライベート IP ホワイトリストの設定」をご参照ください。
usernameAlibaba Cloud Elasticsearch インスタンスにアクセスするためのユーザー名です。デフォルト値は
elasticです。password指定したユーザー名のパスワードです。インスタンス作成時に設定したものを指定します。忘れた場合は、リセットできます。詳細については、「インスタンスのアクセスパスワードのリセット」をご参照ください。
-
-
次のコマンドを実行して、ダッシュボードやその他のアセットを Elasticsearch と Kibana にアップロードし、Filebeat サービスを開始します。
sudo filebeat setup sudo service filebeat start
ステップ 3:Kibana での MySQL ログの可視化
-
ECS インスタンスで MySQL を再起動し、テストクエリを実行します。
次のコマンドを実行して MySQL を再起動します。
sudo systemctl restart mysqld -
ログの内容を表示します。
次の例は、ログエントリのサンプルを示しています。
[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) -
宛先の Alibaba Cloud Elasticsearch インスタンスの Kibana コンソールにログインします。
詳細については、「Kibana コンソールへのログイン」をご参照ください。
-
左側のナビゲーションペインで、Dashboard をクリックします。
-
[ダッシュボード] リストで、[[Filebeat MySQL] 概要] をクリックします。
-
ページの右上隅で、時間範囲を選択してログを表示します。
