SlowQuery を検知して Explain で解析し Slack へ通知
fluentd でエラーログを Slack へ通知 の続きです。
エラーログをSlack通知する
環境 CentOS Linux release 7.1.1503 (Core) td-agent: 0.12.12 Nginx: 1.8.0  概要社内で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/
