• Zabbix 3.2.6-Mysql多实例监控-Percona Monitoring Plugins自动发现


    mysql多实例监控实录
     
    系统环境:
    cat /etc/redhat-release
    CentOS Linux release 7.3.1611 (Core)
    内核版本:
    uname -r
    3.10.0-514.el7.x86_64
    docker版本:
    docker -v
    Docker version 1.12.6, build 3a094bd/1.12.6
    docker 相关镜像版本:
    docker.io/zabbix/zabbix-web-nginx-mysql latest
    docker.io/zabbix/zabbix-server-mysql latest
    docker.io/mysql 5.7
    被监控mysql应用版本:
    mysql-5.7.17-linux-glibc2.5-x86_64
    Percona Monitoring Plugins版本:
     
    写在最前:如果zabbix server和zabbix agent已经通过其他方式安装,可以直接跳过1、2步,直接从第3步开始看。
     
    1、zabbix服务端我们运行在docker容器内
    所以服务器端先安装docker服务
    yum install -y epel-release
    yum install -y docker #centos6.x版本的命令是yum install -y docker-io
     
    然后运行docker服务
    systemctl start docker
    docker加入开机自启动
    systemctl enable docker
    查看docker是否成功启动
    systemctl status docker
    注:使用docker需要使用加速器,否则那龟速,自己体会吧。加速器daocloud和阿里云都可以,我使用的前者。
     
    2.安装相关容器
    2.1. mysql 容器
    docker run --name mysql-server -t
          -e MYSQL_DATABASE="zabbix"
          -e MYSQL_USER="zabbix"
          -e MYSQL_PASSWORD="ywwd.net"
          -e MYSQL_ROOT_PASSWORD="ywwd.net"
          -v /data/container/mysql/zabbix:/var/lib/mysql
          -v /etc/localtime:/etc/localtime:ro
          --restart=always
          -d mysql:5.7
          --character-set-server=utf8 --collation-server=utf8_general_ci --sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
     
    2.2. zabbix-server 容器
    docker run --name zabbix-server-mysql -t
          -e DB_SERVER_HOST="mysql-server"
          -e MYSQL_DATABASE="zabbix"
          -e MYSQL_USER="zabbix"
          -e MYSQL_PASSWORD="ywwd.net"
          -e MYSQL_ROOT_PASSWORD="ywwd.net"
          --link mysql-server:mysql
          -p 10051:10051 --restart=always
          -v /etc/localtime:/etc/localtime:ro
          -d zabbix/zabbix-server-mysql:latest
     
    2.3. zabbix-web 容器(nginx)
    docker run --name zabbix-web-nginx-mysql -t
          -e DB_SERVER_HOST="mysql-server"
          -e MYSQL_DATABASE="zabbix"
          -e MYSQL_USER="zabbix"
          -e MYSQL_PASSWORD="ywwd.net"
          -e MYSQL_ROOT_PASSWORD="ywwd.net"
          --link mysql-server:mysql
          --link zabbix-server-mysql:zabbix-server
          -v /etc/localtime:/etc/localtime:ro
          -p 80:80
          --restart=always
          -d zabbix/zabbix-web-nginx-mysql:latest
     
    注意:这里有个小问题,zabbix-web-nginx-mysql的启动脚本/run_zabbix_component.sh中,指定了时区,不是中国的Asia/Shanghai,所以我们要进入zabbix-web-nginx-mysql进行修改
    2.4. 修改zabbix-web的时区
    docker exec -it zabbix-web-nginx-mysql /bin/bash
    TZ=${TZ:-"Asia/Shanghai"} 这里改为Asia/Shanghai,否则zabbix-web端的时间会慢5个小时
    sed -in 's#Europe/Riga#Asia/Shanghai#g' /run_zabbix_component.sh
    修改时区后,需要重启容器
    docker restart zabbix-web-nginx-mysql
    2.5. 在firewall防火墙放开zabbix-server和zabbix-agent的服务端口号
    firewall-cmd --permanent --add-port=10050-10051/tcp
    #--permanent永久生效,10050zabbix-agent服务端口,10051zabbix-server服务端口
    firewall-cmd --reload
    #更改后需要重新加载firewall防火墙
    firewall-cmd --list-all
    #最后查看配置是否生效
     
    这样zabbix-server端就已经安装完毕
    接下来客户端我们采用rpm包进行安装
    rpm -ivh zabbix-agent-3.2.6-1.el7.x86_64.rpm
    同样需要放开zabbix-agent端口
    firewall-cmd --permanent --add-port=10050/tcp
    firewall-cmd --reload
     
    然后对zabbix-agent端进行配置
    egrep -v '^$|^#' /etc/zabbix/zabbix_agentd.conf
    PidFile=/var/run/zabbix/zabbix_agentd.pid
    LogFile=/var/log/zabbix/zabbix_agentd.log
    Server=10.0.0.106 # <====zabbix-server端的IP地址
    ServerActive=10.0.0.106 #<====zabbix-server端的IP地址,主动方式
    Hostname=10.0.0.107 #<====zabbix-agent端的IP地址或者主机名
    Include=/etc/zabbix/zabbix_agentd.d/*.conf
     
    然后在zabbix-server端的web界面进行主机添加
     
    1)修改主机名称,要跟zabbix-agent的配置文件中的Hostname相对应
    2)选择你想设置的群组,如果群组不存在,可以在下面一栏新的群组中进行添加
    3)指定zabbix-agent端的IP地址或者域名(端口号一般变)
    其他保持默认,点击添加即可
     
    3、利用Percona Monitoring Plugins插件进行MySQL多实例的监控
    1)percona监控zabbix的脚本是使用php写的,所以需要准备好php运行环境,这里直接用yum安装就可以满足要求了:
    yum install -y php php-mysql
    2)安装percona-zabbix-templates
     
    也可配置Percona yum仓库后安装,建议配置percona的yum源,因为作为一个DBA你肯定会用到percona toolkit套件。 注:我没有用这种方式,percona toolkit我是通过源码包安装的。
    yum install -y https://www.percona.com/redir/downloads/percona-release/redhat/latest/percona-release-0.1-3.noarch.rpm
    yum install -y percona-zabbix-templates
     
    4、yum安装的shell为单实例版,所以我们要进行相关修改,这里已经有小伙伴进行了修改,我们直接克隆,进行对比,需要先安装git
     
    1)对比后,我们发现在get_mysql_stats_wrapper.sh脚本中,添加了相关参数
    PORT=$2
    HOST=127.0.0.1
     
    2)CMD="/usr/bin/php -q $DIR/ss_get_mysql_stats.php --host $HOST --items $ITEM --port $PORT"
    CMD变量的php路径一定要指定正确,否则会报错,我们在后面添加了 --port $PORT
    CACHEFILE改为判断
    if [ $PORT == 3306 ];then
    CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt"
    else
    CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt":$PORT
    fi
     
    3)running-slave进行如下修改,此处报警跟模板中的另一个Slave Stopped是重叠的,不过这个比Slave Stopped要灵敏,大概提前3分钟左右报警,不过需要在/etc/my.cnf以及脚本中添加mysql的账号和密码等信息,各有利弊吧
     
    if [ "$ITEM" = "running-slave" ]; then
    # Check for running slave
    RES=`HOME=~zabbix /usr/local/mysql/bin/mysql -P$PORT -h127.0.0.1 -uzabbix -e 'SHOW SLAVE STATUSG' | egrep '(Slave_IO_Running|Slave_SQL_Running):' | grep -i yes|wc -l `
    if [ "$RES" -ne 2 ]; then
    echo 1
    else
    echo 0
    fi
    exit
    并在/etc/my.cnf中添加
    [mysql]
    password=123456 #存在安全隐患,但是如果把权限改小,可能会获取不到值,因为是通过zabbix用户去运行的脚本,里面只是密码,而且账号只能本机登录,所以问题也不大,但是要严格控制其他3个shell脚本的权限。
     
    4)#cat $CACHEFILE | sed 's/ / /g; s/-1/0/g'| grep $ITEM | awk -F: '{print $2}'
    这一列改为:
    cat $CACHEFILE | sed 's/ / /g'| grep $ITEM | awk -F: '{print $2}' 或者
    cat $CACHEFILE | sed 's/ / /g; s/-1/1/g'| grep $ITEM | awk -F: '{print $2}'
    改为第一个,在zabbix-server的web端配置报警阈值为小于0,或者等于1的时候报警,
    改为第二行,可以统一设置报警阈值为等于1,因为这个问题,困扰了我好久
     
    5、修改自动发现脚本
    cat mysql_low_discovery.sh
    #!/bin/bash
    #Fucation:mysql low-level discovery
    #Script_name mysql_low_discovery.sh
    discovery() {
    port=($(sudo ss -tpln | awk -F "[ :]+" '/[m]ysql/ {print $4}'))
    printf '{ '
    printf ' "data":[ '
    for key in ${!port[@]}
    do
    if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
    socket=`ps aux|grep ${port[${key}]}|grep -v grep|awk -F '=' '{print $9}'|cut -d ' ' -f 1`
    printf ' { '
    printf " "{#MYSQLPORT}":"${port[${key}]}"}, "
    else [[ "${key}" -eq "((${#port[@]}-1))" ]]
    socket=`ps aux|grep ${port[${key}]}|grep -v grep|awk -F '=' '{print $9}'|cut -d ' ' -f 1`
    printf ' { '
    printf " "{#MYSQLPORT}":"${port[${key}]}"} "
    fi
    done
    printf ' ] '
    printf '} '
    }
    discovery
     
    注意:由于此处使用了 sudo ,所以要把zabbix用户加上sudo权限,且只能执行 ss命令
    echo 'zabbix ALL=(ALL) NOPASSWD:/usr/sbin/ss'>>/etc/sudoers
     
    修改ss_get_mysql_stats.php脚本
    $mysql_user = 'zabbix'; <=====此为php登录mysql的用户
    $mysql_pass = 123456; <=====此为php登录mysql的密码
    $mysql_port = NULL; <=====端口和socket要改为NULL
    $mysql_socket = NULL;
     
    修改userparameter_percona_mysql.conf 配置文件
    把每行中的逗号',' 替换为[*],
    sed -in 's#,#[*],#g' userparameter_percona_mysql.conf
    在每行后面添加 $1
    sed -in 's#$#$1#g' userparameter_percona_mysql.conf
    最后在首行添加端口自动发现脚本
    sed -in '1i UserParameter=MySQL.discovery,/bin/bash /var/lib/zabbix/percona/scripts/mysql_low_discovery.sh' userparameter_percona_mysql.conf
     
    6、复制脚本文件并执行权限
    mkdir -p /var/lib/zabbix/percona/scripts/
    cp userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
    cp get_mysql_stats_wrapper.sh /var/lib/zabbix/percona/scripts/
    cp mysql_low_discovery.sh /var/lib/zabbix/percona/scripts/
    cp ss_get_mysql_stats.php /var/lib/zabbix/percona/scripts/
    chmod 700 /var/lib/zabbix/percona/scripts/*
    chown -R zabbix. /var/lib/zabbix/
    7、最后一定要在所有的库上面做授权操作,否则拿不到监控数据
    GRANT SELECT, PROCESS, SUPER, REPLICATION CLIENT ON *.* TO 'zabbix'@'localhost' identified by '123456';
    flush privileges;
     
    8、最后把模板Mysql_Multiport.xml导入到zabbix-server内,所有用到的脚本文件都已经添加到附件中,大家可以下载使用。
    创建触发器原型
     
    在zabbix-server端,添加触发器
    依次点击 主机===>自动发现===>触发器类型===>点击右上角的创建触发器原型
    分配报警级别,点击表达式栏的添加,选择选择原型
    然后选择 例如:MySQL.slave-stopped[{#MYSQLPORT}]
    选择最新的T值小于N
    N为0
    注:如果在第4.4中指定的是cat $CACHEFILE | sed 's/ / /g; s/-1/1/g'| grep $ITEM | awk -F: '{print $2}'
    选择最新的T值等于N
    N为1
     
    然后我们可以手动停止主从复制,稍等片刻,就会发了报警信息
     
    博客园不允许放附件,所以我只能把附件放在百度云了
    http://pan.baidu.com/s/1slFGVoT
     
    参考文章:
    https://github.com/hc-dba/Mysql_Multiport_monitor_used_zabbix
     
    另外可以添加微信和邮件告警,这里推荐下面的博文
     
  • 相关阅读:
    《Programming WPF》翻译 第8章 1.动画基础
    一些被遗忘的设计模式
    《Programming WPF》翻译 第4章 数据绑定
    《Programming WPF》翻译 第3章 控件
    《Programming WPF》翻译 第5章 样式和控件模板
    《Programming WPF》翻译 第7章 绘图
    《Programming WPF》翻译 第9章 自定义控件
    《Programming WPF》翻译 第7章 绘图 (2)
    《Programming WPF》翻译 第8章 前言
    关于Debug和Release之本质区别
  • 原文地址:https://www.cnblogs.com/guoyishen/p/6891953.html
Copyright © 2020-2023  润新知