• 关于Box Anemometer的安装配置遇到的几个坑


     Box Anemometer是一个非常不错的MySQL慢查询可视化工具平台,具体就不多详述了,官网是https://github.com/box/Anemometer

    最近动自己动手搭了一个,具体搭建过程,参考了http://www.cnblogs.com/xuanzhi201111/p/4128894.html以及官网的说明文档

    下面把其中遇到的一些坑记录于此:

    1、.资源规划:

    192.168.17.205  Box Anemometer服务器,安装httpd服务、php、用于存储Anemometer慢查询数据的MySQL服务。

    192.168.16.21/22/23/24/25/**** 需要被监控的MySQL服务器,需要安装percona-toolkit,并配置使用pt-query-digest收集数据的相关脚本任务。

    2、安装过程及遇到的坑:2.1、之前192.168.17.205上就编译安装过一个MySQL5.7.20服务

    于是按照网上的教程先yum 安装了httpd,再yum安装php,然后配置Anemometer。

    结果一直报错,连接不上MySQL服务器。我怀疑是yum安装php默认的Mysql客户端驱动太低导致的。所以重新采用编译安装php,编译配置如下:

    ./configure 
    --prefix=/data/php 
    --enable-fpm 
    --with-fpm-user=daemon 
    --with-fpm-group=daemon 
    --with-config-file-path=/usr/local/php/etc 
    --with-mysql=mysqlnd 
    --with-mysqli=mysqlnd 
    --with-pdo-mysql=mysqlnd 
    --with-iconv --with-iconv-dir 
    --with-freetype-dir 
    --with-jpeg-dir 
    --with-png-dir 
    --with-gd 
    --with-zlib 
    --with-libxml-dir 
    --with-curl 
    --with-mhash 
    --with-xmlrpc 
    --with-mcrypt 
    --with-openssl 
    --with-apxs2=/usr/sbin/apxs 
    --enable-xml 
    --disable-rpath 
    --enable-bcmath 
    --enable-shmop 
    --enable-sysvsem 
    --enable-inline-optimization 
    --enable-mbregex 
    --enable-mbstring 
    --enable-gd-native-ttf 
    --enable-ftp 
    --enable-pcntl 
    --enable-sockets 
    --enable-zip 
    --enable-soap 
    --disable-debug 
    --disable-ipv6 
    --with-gettext 
    --enable-calendar 
    --enable-dom 
    --enable-opcache=no  

    结果还是报错,仍然连接不上mysql服务器。但错误信息有所变化,最终解决方案是:关闭Selinux。

    2.2、关于Anemometer数据库的授权以及被监控数据库的用户授权:

    2.2.1、Anemometer用于保存收集过来的慢查询数据的MySQL数据库192.168.17.205的授权如下:

    GRANT SELECT, UPDATE ON `slow_query_log`.* TO 'app_anemometer_rw'@'localhost'

    对应的配置如下:

    [root@oracle conf]# pwd
    /var/www/html/anemometer/conf
    [root@oracle conf]# vi config.inc.php 
    
    <?php
    $conf['datasources']['localhost'] = array(
            'host'  => '127.0.0.1',
            'port'  => 3306,
            'db'    => 'slow_query_log',
            'user'  => 'app_anemometer_r',
            'password' => 'Your@StrongPassword',
            'tables' => array(
                    'global_query_review' => 'fact',
                    'global_query_review_history' => 'dimension'
            ),
            'source_type' => 'slow_query_log'
    );

    2.2.2、另外该数据库还需要给各被监控数据库的脚本程序授权:

    GRANT SELECT, INSERT, UPDATE, DELETE ON `slow_query_log`.* TO 'app_anemometer_rw'@'192.168.16.2%'

    2.2.3、各被监控的数据库需要授权Anemometer程序访问,用来获取执行计划等数据:

    GRANT SELECT, SUPER ON *.* TO 'app_anemometer_r'@'192.168.17.205'

    对应的配置(/var/www/html/anemometer/conf/config.inc.php)如下:

    3、通过配置,终于能打开首页了,但首页显示的SQL长度实在是太短,只有20个字符,导致没法从这个列表上清楚的知道到底是哪个查询:

    这个也可以通过修改/var/www/html/anemometer/conf/config.inc.php文件来配置:

    默认是取最左边20位,改成想要的长度即可。

    4、最后附上各MySQL服务器中用于收集慢查询日志的python脚本:

    #!/usr/bin/env python2
    #-*- coding: utf-8 -*-
    import subprocess
    
    PATH='/bin:/usr/bin'
    LOG='/log/slow.log'
    SERVER_HOST='192.168.17.205'
    DB='slow_query_log'
    TAB1='global_query_review'
    TAB2='global_query_review_history'
    MYSQL_USER='app_anemometer_rw'
    MYSQL_PASSWD='Your@StrongPassword'
    hostname='MySQL-M-16-21'
    print MYSQL_PASSWD
    cmd='pt-query-digest --user='+MYSQL_USER+' --password='+ MYSQL_PASSWD + ' --port=3306 --review h='+SERVER_HOST+',D='+DB+',t='+TAB1+'  --history h='+SERVER_HOST+',D='+DB+',t='+TAB2 +' --no-report --limit=0% --filter=" $event->{Bytes} = length($event->{arg}) and $event->{hostname}=\"'+hostname+'\"" ' +LOG
    
    print cmd
    subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)

    4.1 由于anemometer服务器是通过上面python脚本所配置的hostname定义来反过来访问各被监控的服务器,用于获取执行计划等相关信息。

    所以,如果hostname如果配置的不是Ip,那么还需在anemometer服务器192.168.17.205上配置hosts文件:

    [root@oracle conf]# vi /etc/hosts
    
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.16.21 MySQL-M-16-21

    4.2 可能默认配置下,该平台所显示的内容并不是自己想要的

    例如单个查询的过去90天历史记录里,它是以ts_min为group by的,这会只显示一条数据,而不是每天的数据,我改成了ts_max。

    另外,ts_cnt也是Sum出来的,如果我们5分钟收集一次日志,这个结果完全不是想要的,我这里添加了一行配置:'query_cnt' => 'MAX(ts_cnt)',

    并且将history_defaults和report_defaults的table_fields配置中将ts_cnt改为了query_cnt:

    通过以上配置,系统所显示的值基本与预期相符。

    本文链接:http://www.cnblogs.com/ajiangg/p/8258926.html

  • 相关阅读:
    【题解】Atcoder ARC#76 F-Exhausted?
    【题解】SCOI2006萌萌哒
    【题解】51nod1967 路径定向
    巧克力之树 [点分治+树状数组]
    thr [树链剖分+dp]
    [bzoj4361] isn [树状数组+dp+容斥原理]
    [POI2015][bzoj4383] Pustynia [线段树优化建图+拓扑排序]
    [HNOI2015][bzoj4011] 落叶枫音 [拓扑DP]
    [Atcoder Grand Contest 006 F][AGC006F] Blackout [染色]
    [bzoj4712] 洪水 [树链剖分+线段树+dp]
  • 原文地址:https://www.cnblogs.com/ajiangg/p/8258926.html
Copyright © 2020-2023  润新知