SlowQuery を検知して Explain で解析し Slack へ通知
fluentd でエラーログを Slack へ通知 の続きです。
概要
MySQL DB サーバ の SlowQuery 状況を
リアルタイムに Slack で確認できるようにする為に導入しました。
環境
- CentOS 6.5
- td-agent 0.12.26
Fluent Plugin インストール
今回必要モジュールをインストールします。
1 | # td-agent-gem install fluent-plugin-nata2 |
fluent-plugin-nata2
- SET timestamp をあらかじめ除外しアクセスしている DB 情報も保持してくれる
- [https://github.com/studio3104/fluent-plugin-nata2]
fluent-plugin-mysql_explain
- in_mysqlslowquery_ex で取得した JSON の sql 属性に EXPLAIN 実行結果を取得
- [https://github.com/kikumoto/fluent-plugin-mysql_explain]
[https://github.com/kikumoto/fluent-plugin-sql_fingerprint]
fluent-plugin-sql_fingerprint
- SQL のパラメータにマスクをする
- [https://github.com/kikumoto/fluent-plugin-sql_fingerprint]
Percona Tool Kit インストール
fluent-plugin-sql_fingerprint で利用する fingersprint をインストールします。
1 | # rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm |
fluentd 設定ファイル作成
以下ファイル設定するとします。
- /etc/td-agent/conf.d/mysql.conf
1 | <source> |
※slowquery のパス、DB のアクセスアカウントなどは各環境により変更してください。
td-agent 再起動
1 | # service td-agent restart |
確認
SlowQuery を発行し、Slack に通知されるか確認します。
- 3 秒 sleep させ、my.cnf に設定されている long-query-time の閾値の秒数を超えるようにしています。
1 | mysql > SELECT count(*), sleep(3) FROM <table>; |
- Slack 通知確認
Slack に通知されました!
show more をクリックすると Explain が通知されているのがわかる。
総評
リアルタイム通知は
特に新規開発時に効果的でした。
また
ElasticSearch へ蓄積し時間軸で分析するのは
サイトのイベントとの相関性が見え面白いです。
その環境と状況により発生するスロークエリが見えてきます。
以上です。
SlowQuery を検知して Explain で解析し Slack へ通知
https://kenzo0107.github.io/2016/08/23/2016-08-24-detect-slowquery-to-slack/