Anemometer基于pt-query-digest将MySQL慢查询可视化

参考文章:

http://ourmysql.com/archives/1359?utm_source=tuicool&utm_medium=referral

官方:https://github.com/box/Anemometer

单节点Anemometer监控

1 安装anemometer

# cd /data/www/web3
# git clone https://github.com/box/Anemometer.gitanemometer && cd anemometer

2 创建表和用户名

# mysql -uroot -proot <install.sql
# mysql -uroot -proot -e"grant ALL ON slow_query_log.* to ‘anemometer‘@‘localhost‘ IDENTIFIED BY ‘123456‘;"
# mysql -uroot -proot -e"grant SELECT ON *.* to ‘anemometer‘@‘localhost‘ IDENTIFIED BY ‘123456‘;"
# mysql -uroot -proot -e"flushprivileges;"

我们可以看下表结构如下

3 分析mysql慢日志

# pt版本高于2.2的执行下面语句,将慢查询日志放入名为slow_query_log数据库中

# pt-query-digest --user=anemometer -h 127.0.0.1 --password=123456 --review h=localhost,D=slow_query_log,t=global_query_review--history h=localhost,D=slow_query_log,t=global_query_review_history--no-report --limit=0% --filter=" \$event->{Bytes} = length(\$event->{arg}) and\$event->{hostname}=\"$HOSTNAME\"" /usr/local/mariadb/var/localhost-slow.log

这时候,数据库的slow_query_log 库,里面的global_query_review_history和global_query_review这2张表已经已经有一些数据了。

4 修改anemometer配置文件及配置展示日志用的虚拟主机

# cd /data/www/web3/anemometer/conf
# cp sample.config.inc.php  config.inc.php
# vim config.inc.php  主要修改的地方如下2个:

配置nginx

# vim /usr/local/nginx/conf/vhost/anemometer.conf  内容如下:

server {
       listen   80;
       server_name  192.168.0.88;
       access_log  /home/wwwlogs/anemometer.log  access;
       index index.php index.html;
       root  /data/web3/anemometer;
       include enable-php.conf;
}
# /etc/init.d/nginx reload      重载nginx配置文件

在浏览器访问http://192.168.0.88/ 即可如下图所示(这几张图片是从别人博客摘录的,他这个截图做的特别详细)

5 自动滚动日志

# vi /etc/logrotate.d/mysql

postrotate
pt-query-digest --user=anemometer --password=123456 --review D=slow_query_log,t=global_query_review --review-history D=slow_query_log,t=global_query_review_history --no-report --limit=0% --filter=" \$event->{Bytes} = length(\$event->{arg}) and\$event->{hostname}=\"$HOSTNAME\"" /usr/local/mariadb/var/localhost-slow.log
endscript

至此,我们的anemometer算是跑通了。

但是生产环境的话,我们不可能就一个节点的啊,下面就是多节点部署的问题了。

多节点mySQL监控慢查询日志

node1:192.168.2.11   MariaDB10.0.17    还部署有nginx的anemometer web前端

node2:192.168.2.12  MariaDB10.0.17

各个节点的my.cnf里面开启慢查询,相关配置如下:

[mysqld]
innodb_file_per_table = ON
skip_name_resolve = ON
slow_query_log=ON
slow_query_log_file =localhost-slow.log
long_query_time = 2

1.   安装anemometer

node1上安装到nginx的网站目录下

# cd /home/wwwroot/
# git clonehttps://github.com/box/Anemometer.git anemometer
# cd anemometer

node2上anemometer的安装目录没什么要求

# cd /root
# git clone https://github.com/box/Anemometer.gitanemometer
# cd anemometer

2.   创建表和用户名

node1上执行:

# mysql -uroot -proot <install.sql
# mysql -uroot -proot -e"grant ALL ON slow_query_log.* to ‘anemometer‘@‘192.168.2.%‘ IDENTIFIED BY‘123456‘;"
# mysql -uroot -proot -e "grantSELECT ON *.* to ‘anemometer‘@‘192.168.2.%‘ IDENTIFIED BY ‘123456‘;"
# mysql -uroot -proot -e"flush privileges;"

node2上执行:

# mysql -uroot -proot <install.sql
# mysql -uroot -proot -e"grant ALL ON slow_query_log.* to ‘anemometer‘@‘192.168.2.%‘ IDENTIFIED BY‘123456‘;"
# mysql -uroot -proot -e"grant SELECT ON *.* to ‘anemometer‘@‘192.168.2.%‘ IDENTIFIED BY‘123456‘;"
# mysql -uroot -proot -e"flush privileges;"

3.   在两个节点执行pt命令分析慢查询日志,并写入到各自的数据库中

node1上执行:

# pt-query-digest --user=anemometer  --password=123456--host=192.168.2.11 --review h=192.168.2.11,D=slow_query_log,t=global_query_review--history h=192.168.2.11,D=slow_query_log,t=global_query_review_history--no-report --limit=0% --filter=" \$event->{Bytes} = length(\$event->{arg}) and \$event->{hostname}=\"$HOSTNAME\""localhost-slow.log

node2上执行:

# pt-query-digest --user=anemometer  --password=123456--host=192.168.2.12 --review h=192.168.2.12,D=slow_query_log,t=global_query_review --history h=192.168.2.12,D=slow_query_log,t=global_query_review_history --no-report --limit=0% --filter=" \$event->{Bytes} = length(\$event->{arg}) and\$event->{hostname}=\"$HOSTNAME\"" localhost-slow.log

4.   node1上配置前端

# cd /home/wwwroot/anemometer/conf
# cp sample.config.inc.php  config.inc.php
# vim config.inc.php  主要修改的地方如下2个【conf项,plugins项】:
$conf[‘datasources‘][‘192.168.2.11‘] = array(
        ‘host‘ => ‘192.168.2.11‘,
        ‘port‘ => 3306,
        ‘db‘   => ‘slow_query_log‘,
        ‘user‘ => ‘anemometer‘,
        ‘password‘ => ‘123456‘,
        ‘tables‘ => array(
                ‘global_query_review‘ =>‘fact‘,
                ‘global_query_review_history‘=> ‘dimension‘
        ),
        ‘source_type‘ => ‘slow_query_log‘
);
 
$conf[‘datasources‘][‘192.168.2.12‘] = array(
        ‘host‘ => ‘192.168.2.12‘,
        ‘port‘ => 3306,
        ‘db‘   => ‘slow_query_log‘,
        ‘user‘ => ‘anemometer‘,
        ‘password‘ => ‘123456‘,
        ‘tables‘ => array(
                ‘global_query_review‘ =>‘fact‘,
                ‘global_query_review_history‘=> ‘dimension‘
        ),
        ‘source_type‘ => ‘slow_query_log‘
);
 
$conf[‘plugins‘] = array(
    ...省略代码...
       $conn[‘user‘] = ‘anemometer‘;
       $conn[‘password‘] = ‘123456‘;
    ...省略代码...
# /etc/init.d/nginx restart   重启Nginx

Chrome查看http://192.168.2.11/ 如下图所示

5.   下面是我自己写pt分析慢查询日志的脚本

(anemometer提供的那个个人感觉用不惯,自己照着写了个更简单的)

vim /home/scripts/pt-digest.sh 内容如下:

#!/bin/bash
# 我这里直接把配置写死了,觉得不太好的话大家可以参考其它文章将数据库的连接配置独立出来
 
# 慢查询日志存放的目录
SQL_DATADIR="/usr/local/mariadb/var"
 
# 慢查询日志的文件名(basename)
SLOW_LOG_FILE=$( mysql -uroot -proot -e " show global variables like‘slow_query_log_file‘" -B  | tail-n1 | awk ‘{ print $2 }‘ )
 
# 获取本机IP地址
IP_ADDR=$(/sbin/ifconfig | grep‘inet addr‘  | egrep ‘172.|192.‘ | awk‘{print $2}‘ | awk -F ":" ‘{print $2}‘)
 
cp $SQL_DATADIR/$SLOW_LOG_FILE/tmp/
 
# 分析日志并存入slow_query_log这个数据库
/usr/local/bin/pt-query-digest --user=anemometer --password=123456 --host=$IP_ADDR  --review h=$IP_ADDR,D=slow_query_log,t=global_query_review --history h=$IP_ADDR,D=slow_query_log,t=global_query_review_history --no-report --limit=0% --filter="\$event->{Bytes} = length(\$event->{arg}) and\$event->{hostname}=\"$HOSTNAME\"" /tmp/$SLOW_LOG_FILE
 
rm -f /tmp/$SLOW_LOG_FILE

调试通过以后,在crontab添加如下命令实现定期采集慢查询日志到数据库存储

59 23 * * * /bin/bash /home/scripts/pt-digest.sh> /dev/null

这样每天就能自动分析采集慢查询日志了。

另外,慢查询日志建议按天切分,这样用pt-query-digest进行SQL慢查询日志统计的时候就避免重复分析了。慢查询按天切分的脚本如下:

Tips下面是慢查询日志切分脚本:

下面是一个轮询切割mySQL慢查询和错误日志的脚本(/home/scripts/mysql_log_rotate):

"/usr/local/mariadb/var/localhost-slow.log""/usr/local/mariadb/var/localhost_err" { 
    create 660 mariadb mariadb      # 这个文件权限和属主属组需要根据自己的情况修改
   dateext
   notifempty
   daily
   maxage 60
   rotate 30
   missingok
   olddir /usr/local/mariadb/var/oldlogs  # 这个目录不存在的话,要自己先新建好,并修改属主为mariadb
 
   postrotate
        if /usr/local/mariadb/bin/mysqladminping -uroot -proot &>/dev/null; then
            /usr/local/mariadb/bin/mysqladminflush-logs -uroot -proot
        fi
   endscript
}

再配置个CRONTAB

00 00 * * * (/usr/sbin/logrotate-f /home/scripts/mysql_log_rotate >/dev/null 2>&1)

这样的话,每天慢查询日志、错误日志就自动存储到/usr/local/mariadb/var/oldlogs/这个目录下了。

时间: 2024-11-06 13:08:24

Anemometer基于pt-query-digest将MySQL慢查询可视化的相关文章

【转载】 使用Anemometer基于pt-query-digest将MySQL慢查询可视化

原文地址:使用Anemometer基于pt-query-digest将MySQL慢查询可视化 作者:84223932 本文主要介绍使用Anemometer基于pt-query-digest将MySQL慢查询可视化,因为网上资料相对较少,且都是英文的,遇到报错也没有相关的参考资料,因此写此文. 欢迎转载,请注明作者.出处. 作者:张正 blog:http://space.itpub.net/26355921 QQ:176036317 如有疑问,欢迎联系. 准备条件:1.MySQL开启慢查询 2.安

十分钟部署Anemometer作为Mysql慢查询可视化系统

前言 采用Anemometer将Mysql慢查询日志可视化,可以更便捷的查询慢查询日志,并根据时间戳进行历史查询.如下是单机版Anemometer部署的演示,实际应用中,为安全起见,建议把anemometer 分开到另外的机器上. 工作原理 Anemometer: 实现日志可视化 pt-query-digest :抽取慢查询日志 环境信息 Ip 功能 软件信息 安装路径 操作系统 192.168.9.11 http服务 httpd-2.2.15-54 yum缺省路径 centos6.9 慢查询日

使用Anemometer基于pt-query-digest将MySQL慢查询可视化

If you're just completely itching to start using this tool, here's what you need: 1.a MySQL database to store query analysis data in. 2.pt-query-digest.You may as well just get the whole Percona Toolkit while you're at it :) 3.a slow query log from a

Anemometer和pt-query-digest结合将MySQL慢查询可视化

pt-query-digest虽然功能强大, 但毕竟没有web界面显示的直观,我们可以借助Anemometer作为pt-query-digest执行结果的显示端,Anemometer是专门为mysql的慢查询开发的一款开源软件,地址在http://www.oschina.net/p/anemometer 一.安装LAMP环境 1,安装 yum install httpd php *bcmath* *mysqli* -y 2,查看 [[email protected] ~]# rpm -qa|gr

Anemometer+Percona Toolki实现MySQL慢查询日志可视化功能

最近发现了一个挺好用的MySQL慢查询日志可视化的工具,网上也能找到很多资料,在这里结合自己的实际情况重新整理一下. 1. 实验环境 1.1 系统环境: 操作系统:CentOS 6.5 64位 主机地址:10.0.0.26 主机名:mysql01 mysql版本:mysql-5.6.36 1.2 可视化软件环境: http环境:LAMP 可视化软件:Anemometer-master.zip, percona-toolkit-3.0.11-1.el6.x86_64.rpm, perl-TermR

Advanced Installer 11.9基于IIS打包札记(For MySQL)

原文:Advanced Installer 11.9基于IIS打包札记(For MySQL) Mysql免安装前期部署 下载绿色命令行版本的mysql,将其放入到发布的程序发布包内,执行Update批处理,输入自定义端口号,选一个不冲突的数字,比如3310: 运行scripts启动mysql服务 准备好数据库sql脚本,并且用navcat连接后新建一个空的数据库 打开命令行窗口,进入到mysql的bin目录 首先连接mysql,运行命令语句mysql -P3310 -uroot -p --def

Linux下基于源码方式安装MySQL 5.6

MySQL为开源数据库,因此可以基于源码实现安装.基于源码安装有更多的灵活性.也就是说我们可以针对自己的硬件平台选用合适的编译器来优化编译后的二进制代码,根据不同的软件平台环境调整相关的编译参数,选择自身需要选择不同的安装组件,设定需要的字符集等等一些可以根据特定应用场景所作的各种调整.本文描述了如何在源码方式下安装MySQL. 1.安装环境及介质#安装环境SZDB:~ # cat /etc/issueWelcome to SUSE Linux Enterprise Server 10 SP3

基于Corosync + Pacemaker+DRBD实现MySQL高可用集群

前言 在众多的高可用集群解决方案中,除了Heartbeat之外,Corosync也能提供类似于Heartbeat一样的功能,而且目前RedHat官方提供的高可用集群解决方案的程序包都以Corosync为主,所以在未来的日子Corosync会逐渐取代Heartbeat.本文带来的是基于Corosync + Pacemaker+DRBD的MySQL高可用集群解决方案. 相关介绍 Corosync Corosync是从OpenAIS中分支出来的一个项目,它在传递信息的时候可以通过一个简单的配置文件来定

基于binlog二进制日志的MySQL恢复笔记

基于binlog二进制日志的MySQL恢复笔记 刚好复习到这里,顺手做个小实验,记录下. 总的操作流程: step0.关掉数据库的对外访问[防止用户操作继续写入这个库] step1.mysqlbinlog 导出相关时间段数据库的二进制日志 step2.编辑today.sql找到误操作的那几条数据,删除并保存. step3.执行全备份恢复 mysql -e 'source /root/backup.sql;' step4.用二进制日志恢复今天的修改  mysql -e 'source /root/