背景:
慢日志是分析定位问题的利器,但是在日常实际应用中,mysql自动生成的慢日志是杂乱无章的,不便于我们的使用。 这里介绍利用开源项目 Box Anemometer来搭建一个图形可视化的慢日志分析系统。
github项目地址: https://github.com/box/Anemometer
步骤过程:
一. 安装 percona-toolkit,因为其实box还是借助percona的pt-query-digest工具将慢日志的分析结果写入数据库,然后展示。
1. 获取最新的安装包 :wget percona.com/get/percona-toolkit.tar.gz
2. 解压并安装 :
tar xzvf percona-toolkit-2.2.16.tar.gz
cd percona-toolkit-2.2.16
perl Makefile.PL
make
make test
make install
二. 搭建LAMP环境并且安装Box Anemometer :
1. git clone https://github.com/box/Anemometer.git anemometer
2. 将clone的anemometer放在httpd.conf对应的DocumentRoot目录路径下。
3. 修改配置文件:
cd /anemometer/conf
cp sample.config.inc.php config.inc.php
配置项说明:
$conf['datasources']['localhost'] = array(
'host' => '127.0.0.1', //anemometer系统用来存放数据集结果的数据库服务器的host
'port' => 3307, //对应的端口
'db' => 'slow_query_log', //对应的数据库
'user' => 'root', //用户名
'password' => '123456', //密码
'tables' => array(
'global_query_review' => 'fact',
'global_query_review_history' => 'dimension'
),
'source_type' => 'slow_query_log'
);
三. 在anemometer的结果集数据库中手工倒入sql文件创建数据库以及表:
mysql -uroot -p -S /tmp/mysql3306.sock < Anemometer/install.sql
四. 配置具体的收集环境:
注: 当你要收集多个数据库服务器上的慢日志时,你有以下方式可以实现:
1、手工导入的install.sql里面的global_query_review_history表包含了hostname_max和db_max,通过hostname_max区分把多个数据源存放到一个表里.
2、每台mysql把处理后的slow log数据放到当前服务器,然后anemometer连接对应的服务器获取数据.
3、所有的mysql把处理后的slow log数据统一存放到anemometer所在的数据库上,然后通过表名或者数据库名字区分.
如果选择第二种或者第三种方案,需要定义多个数据源。我们这里以第2中方式为例:
假如我们的Box系统放在A主机上,我们要收集B与C主机的slow log来分析统计(三台主机上都有mysql实例):
第一步,首先,我们在A数据中心数据库(即存放B和C的结果集)上创建B和C对应的库和表:修改install.sql文件中的库名和表名即可:
我们将B的数据存放在A的slow_query_log_master库中,将C的数据存放在A的slow_query_log_slave数据库中。
第二步,然后修改配置文件中的数据源配置:
上面的B和C指的是界面的数据源选择,其他的都是A数据库的配置,db即B和C的数据结果集存放数据库。
第三步,在B和C上配置日志收集装置:
将/anemometer/scripts/anemometer_collect.sh放在B和C上,然后根据自己的需求进行修改,因为不同的需求要进行不同的修改,这里就不具体说明了,只是强调几点应该注意的:
1. 此程序是默认登陆机器,将mysql的slow_query_log关掉,然后mv到另外一个文件夹,然后用pt-query-digest进行分析,并将结果写入A的数据库。然后再打开slow_query_log开关,中间涉及慢日志时长long_query_time的修改,需要根据自己的需求更改。
2. 此程序默认删掉了mv过去的文件,如果你有需要需保存。
3. 为anemometer_collect.sh生成配置文件,分别为连接本地数据库的配置文件localhost.cnf(用于设置slow_query_log参数)以及远程数据库A的连接配置server.cnf 用于将pt-query-digest的结果写入A。
4. 以cron的形式每天定时执行:
30 21 * * * sh -x anemometer_collect.sh --defaults-file localhost.cnf --history-defaults-file server.cnf >>/data2/box-slow.log
第四步:这时候,应该就可以打开服务器对应的网站进行访问了.
如果发现访问不了,可以curl -v以及查看log的方式定位错误。
致此,基本上就搭建完毕,后续遇到的问题会持续更新。。。