anemometer
环境准备
1.安装percona tookit
2.安装依赖包
yum install -y php-common php-bcmath php-mysql php-dba php-cli php-gd php php-pdo
yum install -y httpd
下载anemometer代码
cd /var/www/html/
git clone git://github.com/box/Anemometer.git anemometer
这种是直接把anemometer放到/var/www/html/里,这样就不用修改/etc/httpd/conf/httpd.conf了.
貌似还得用下面的方法
不然的话,加入anemometer在/data/log/html目录下,那么修改/etc/httpd/conf/httpd.conf
vi /etc/httpd/conf/httpd.conf
Alias /anemometer "/data/log/html/anemometer"
<Directory "/data/log/html/anemometer">
AllowOverride None
Options All
Order allow,deny
Allow from all
DirectoryIndex index.php
</Directory>
chown -R apache:apache /data/log/html/
service http start
接着在存储分析数据的MySQL数据库中执行
$ mysql -h db.example.com < install.sql
$ mysql -h db.example.com -e "grant ALL ON slow_query_log.* to 'anemometer'@'%' IDENTIFIED BY 'superSecurePass';"
将要分析的数据放入分析库
pt-query-digest --user=anemometer --password=superSecurePass \
--review h=slave1,D=slow_query_log,t=global_query_review \
--history h=slave1,D=slow_query_log,t=global_query_review_history \
--no-report --limit=0% \
--filter=" \$event->{Bytes} = length(\$event->{arg}) and \$event->{hostname}=\"$HOSTNAME\"" \
/data/mysqldata/3306/slow_query.log
就是将生产库的slow log用pt-query-digest存入分析库
配置参数文件
$ cd anemometer/conf
$ cp sample.config.inc.php config.inc.php
这里有坑,按文档中示意要修改的地方实际上是被注释掉了,
且
$conf['datasources']['localhost_history'] = array(
'host' => 'localhost',
'port' => 3306,
'db' => 'slow_query_log',
'user' => 'root',
'password' => '',
'tables' => array(
'events_statements' => 'fact',
'events_statements_history' => 'dimension'
),
'source_type' => 'performance_schema_history'
);
'source_type' => 'performance_schema_history' 这个也不对
所以要么复制一下沾到下面
$conf['datasources']['localhost'] = array(
'host' => 'localhost',
'port' => 3306,
'db' => 'slow_query_log',
'user' => 'anemometer',
'password' => 'anemometer',
'tables' => array(
'global_query_review' => 'fact',
'global_query_review_history' => 'dimension'
),
'source_type' => 'slow_query_log' --这一行可以不要
);
要么直接不动这里,接着按文档修改plugins这里
$conf['plugins'] = array(
...
'explain' => function ($sample) {
$conn['user'] = 'anemometer';
$conn['password'] = 'anemometer';
return $conn;
},
);
然后在同级目录下,修改datasource_localhost.inc.php 文件.
[root@slave conf]# more datasource_localhost.inc.php
<?php
$conf['datasources']['localhost'] = array(
'host' => 'localhost',
'port' => 3306,
'db' => 'slow_query_log',
'user' => 'anemometer',
'password' => 'anemometer',
'tables' => array(
'global_query_review' => 'fact',
'global_query_review_history' => 'dimension'
),
'source_type' => 'slow_query_log'
);
修改这个是因为这一句
表示他会去读这个文件中的配置
生产中按下面这样配置
分多个datasource
存储在多个db中
启动httpd
service httpd start
查看错误日志
tail -f /var/log/httpd/error_log
发现错误
[Thu May 04 13:43:20.274054 2017] [:error] [pid 77507] [client 172.16.120.134:27807] PHP Notice: date_default_timezone_set(): Timezone ID 'CST' is invalid in /var/www/html/anemometer/lib/Anemometer.php on line 47
修改PHP时区:
PHP5.2.4之后版本必需设置时区。修改PHP时区方法如下:
vi /etc/php.ini
date.timezone = Asia/Shanghai
http://192.168.98.130/anemometer/
修改审核dba
再之后就是要部署收集脚本,将各个系统的slow log源源不断的通过pt-query-digest收集到分析库中
官方提供了一个脚本
Usage: ./scripts/anemometer_collect.sh --interval <seconds>
Options:
--socket -S The mysql socket to use
--defaults-file The defaults file to use for the client
--interval -i The collection duration
--rate Set log_slow_rate_limit (For Percona MySQL Only)
--history-db-host Hostname of anemometer database server
--history-db-port Port of anemometer database server
--history-db-name Database name of anemometer database server (Default slow_query_log)
--history-defaults-file Defaults file to pass to pt-query-digest for connecting to the remote anemometer database
这个脚本部署在源库,它会开启slow log, 收集一段时间(–interval决定),然后再关闭slow log,最后通过pt-query-digest 将slow log信息发到分析库
源库创建用户
mysql -e "GRANT SUPER ON *.* TO 'anemometer_local'@'localhost' IDENTIFIED BY 'superSecurePass'"
需要supuer权限
创建一个脚本的参数文件,来提供用户名和密码
vi etc/anemometer.local.cnf
[client]
user=anemometer_local
password=superSecurePass
上面的参数文件目的是通过源端连接数据库的用户名密码,分析库端同样也可以创建一个参数文件提供连接分析库端用户的用户名和密码,通过这个用户来向表中插入数据
vi etc/anemometer.local.cnf
[client]
user=anemometer_local
password=superSecurePass
最后的命令大致如下
sudo scripts/anemometer_collect.sh --interval 30 \
--history-db-host=anemometer.example.com \
--defaults-file=etc/anemometer.local.cnf \
--history-defaults-file=etc/anemometer.remote.cnf
写到crontab中
*/5 * * * * anemometer_collect.sh--interval 30 \
--socket=/data/mysqldata/3306/mysql.sock \
--history-db-host=anemometer.example.com \
--history-db-port=3306 \
--history-db-name=slow_query_log \
--defaults-file=etc/anemometer.local.cnf \
--history-defaults-file=etc/anemometer.remote.cnf
每个源都部署此脚本