工作原理: Anemometer: 实现慢查询sql可视化 pt-query-digest :抽取慢查询日志 /etc/my.cnf 开启慢查询 【 #slow_query log_queries_not_using_indexes=1 long_query_time=1 slow_query_log=1 】 部署架构(单机部署): httpd 服务【相当于是tomcat 的用途,去为Anemometer提供服务】 pt-query-digest 慢查询日志抓取导入【从慢查询日志里面提取慢sql 写入到Anemometer 自身的数据库中,后面会将它写入定时任务中】 Anemometer 可视化展示【安装目录:/var/www/htm】 搭建Anemometer框架 前置工作: 1.关闭selinux setenforce 0 sed -i 's/enforcing/disabled/g' /etc/sysconfig/selinux
2.打开防火墙的443,13306,80端口 iptables -I INPUT -p tcp --dport 443 -j ACCEPT iptables -I INPUT -p tcp --dport 80 -j ACCEPT iptables -I INPUT -p tcp --dport 13306 -j ACCEPT service iptables save
3.确保时间准确(非必须) yum install -y ntp ntpdate cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #修改时区为东8区 cp: overwrite `/etc/localtime'? y service ntpdate start [root@Master01 ~]# date -R Tue, 30 Jan 2018 14:45:34 0800# 0800是东8区 chkconfig ntpdate on 部署工作 1.安装核心组件pt_query_digest(2.2.14版本) yum install perl-DBI perl-DBD perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-TermReadKey -y wget --no-check-certificate https://www.percona.com/downloads/percona-toolkit/2.2.14/RPM/percona-toolkit-2.2.14-1.noarch.rpm yum install -y percona-toolkit-2.2.14-1.noarch.rpm
2.安装php 注意php必须是5.33以上的版本,否则报错; 安装环境的OS是CentOS6.8,所以直接yum安装的php就是5.33版本 yum install -y php php-mysql php-gd libjpeg* php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-bcmath php-mhash libmcrypt libmcrypt-devel php-fpm php-dba
3.安装httpd yum install -y httpd
4.修改配置,启动php(不修改时区的话,启动httpd时会报500的错) vim /etc/php.ini date.timezone = Asia/Shanghai service php-fpm start
5.初步配置anemometer: cp -r anemometer /var/www/html/ #anemometer项目程序自行下载 vim /etc/httpd/conf/httpd.conf 添加ServerName 192.168.214.140:80(anemometer的IP,如果不采用80端口,需要在这里配上其他端口号)
6.执行建库脚本: cd /var/www/html/anemometer mysql -uroot -p密码 < install.sql #当前主机安装了Anemometer需要使用的mysql 数据库 备注:为了简单直接使用了root 账号进行授权
7.进一步配置anemometer
cd /var/www/html/anemometer/conf/
修改第一处:
cp sample.config.inc.php config.inc.php
vim /var/www/html/anemometer/conf/config.inc.php
【$conf['datasources']['mysql56'],$conf['datasources']['localhost_history'],$conf['plugins'] 三处的内容】
$conn['user'] = 'anemometer';
$conn['password'] = '密码';
修改第二处:
vim /var/www/html/anemometer/conf/datasource_localhost.inc.php
$conf['datasources']['localhost'] = array(
'host' => '192.168.214.140', #根据实际情况进行修改
'port' => 3306,
'db' => 'slow_query_log',
'user' => 'backend',
'password' => 'backend',
'tables' => array(
'global_query_review' => 'fact',
'global_query_review_history' => 'dimension'
),
'source_type' => 'slow_query_log'
);
8.启动apache:
service httpd start
打开刚才发布的网页http://192.168.214.140/anemometer
9.添加定时任务:
定时任务脚本如下:
[root@localhost test]# more fetch-slowlog.sh
#!/bin/sh
# turn on debug
set -x
current_host=`/usr/sbin/ip add show eth0 | grep inet | grep -v "inet6" | awk '{print $2}' | cut -d / -f 1`
mysql_cmd=" mysql -uroot -proot -NB "
project=azure-qa-qyd # 项目名称
hostip=${current_host} #target db IP
#db_name=$3 #数据库名称, this can be ignored
#慢查询文件的绝对路径
slowfile=`$mysql_cmd -e "show variables like 'slow_query_log_file'" 2>/dev/null | cut -f2`
# the db host where review and history of slow log store
db_host=192.168.214.140
db_port=3306
pt-query-digest --user=root --password=root
--review h=${db_host},P=${db_port},D=slow_query_log,t=global_query_review
--history h=${db_host},P=${db_port},D=slow_query_log,t=global_query_review_history
--charset=utf8
--no-report --limit=0%
--filter="$event->{Bytes} = length($event->{arg}) and $event->{hostname}="${project}" and $event->{hostip}="${hostip}" "
"${slowfile}"
#clear slow log
echo > $slowfile
$mysql_cmd -e "flush slow logs"
echo "slow log processed!"
[root@localhost test]# crontab -l
*/5 * * * * /opt/test/fetch-slowlog.sh > /tmp/fetch-slowlog.log 2>&1 #每五分钟运行一次