zoukankan      html  css  js  c++  java
  • zabbix 监控多实例mysql

    zabbix 监控多实例mysql

     一台服务器上开启了3个mysql实例进程,占用不同的端口 3306、3307、3308

    原理说明:
    通过自动发现规则来获取MySQL实例的端口,自动发现规则上的{$MYSQLPORT}是要传递给agent自动发现脚本的参数,这个值是从主机定义的宏{$MYSQLPORT}获取过来的,自动发现的脚本将其解析成{#MYSQLPORT}: 端口的形式,监控项原型再根据{#MYSQLPORT}的值来生成监控项,大致流程如下:

    主机定义宏{$MYSQLPORT}->自动发现规则键值{$MYSQLPORT}->调用agent上自动发现脚本并解析成{#MYSQLPORT} : 端口 ->监控项原型{#MYSQLPORT}->自动生成主机监控项

    以下内容需要的脚本和xml文件下载地址 链接: https://pan.baidu.com/s/1ZP1ydYwfY65PU4Z08QM6fw 提取码: 7v4h

    一、在mysql多实例服务器上的操作

     1、授权zabbix监控mysql账号,在每个实例下都需要。

      此处 账号为 zabbixagent,密码为: Zabbix131

    GRANT USAGE,PROCESS,REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'zabbixagent'@'localhost' IDENTIFIED BY 'Zabbix131';
    flush privileges;

    2、修改zabbix_agentd.conf配置文件

    最后位置增加

             UnsafeUserParameters=1
             EnableRemoteCommands=1
             Include=/etc/zabbix/etc/zabbix_agentd.conf.d/*.conf
    [root@mysql zabbix]# vi /etc/zabbix/etc/zabbix_agentd.conf
             UnsafeUserParameters=1
             EnableRemoteCommands=1
             Include=/etc/zabbix/etc/zabbix_agentd.conf.d/*.conf

    3、增加配置文件

    [root@mysql etc]# vim /etc/zabbix/etc/zabbix_agentd.conf.d/check_mysql.conf
             UserParameter=mysql_discovery[*],/etc/zabbix/bin/discovery_mysql.sh $1   ###自动发现不同端口
             UserParameter=mysql.status[*],/etc/zabbix/bin/mysql_status.sh $1 $2      ###性能监控信息
             UserParameter=mysql.ping[*],/etc/zabbix/bin/mysql_alive.sh $1            ### 是否存活
             UserParameter=mysql.ms.check[*],/etc/zabbix/bin/mysql_slave_status.sh $1 ### 从库状态是否正常
             UserParameter=mysql.ms.time[*],/etc/zabbix/bin/mysql_slave_time.sh $1    ### 从库是否有延迟
    

      

    4、增加执行脚本文件

    [root@mysql etc]# ll /etc/zabbix/bin/
    total 716
             -rwxr-xr-x 1 root root    441 Jul 22 11:36 discovery_mysql.sh
             -rwxr-xr-x 1 root root    401 Jul 22 11:36 mysql_alive.sh
             -rwxr-xr-x 1 root root    303 Jul 22 15:10 mysql_slave_status.sh
             -rwxr-xr-x 1 root root    286 Jul 22 15:10 mysql_slave_time.sh
             -rwxr-xr-x 1 root root    299 Jul 22 11:36 mysql_status.sh
             -rwxr-xr-x 1 root root    370 Jul 22 11:36 mysql_version.sh
    [root@mysql etc]# more /etc/zabbix/bin/discovery_mysql.sh
             res=`echo $1| sed "s/_/
    /g"`;
             port=($res)
             printf '{
    '
             printf '	"data":[
    '
             for key in ${!port[@]}
             do
                 if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];
             then
                     printf '	 {
    '
                     printf "			"{#MYSQLPORT}":"${port[${key}]}"},
    "
             else [[ "${key}" -eq "((${#port[@]}-1))" ]]
                     printf '	 {
    '
                     printf "			"{#MYSQLPORT}":"${port[${key}]}"}
    "
             fi
             done
             printf '	 ]
    '
             printf '}
    '
    [root@mysql etc]# more /etc/zabbix/bin/mysql_status.sh
             #!/bin/bash
             var=$1
             mysql=/usr/local/mysql/bin/mysql
             MYSQL_USER="zabbixagent"
             MYSQL_PASSWORD=Zabbix131
             MYSQL_SOCK_DIR="/tmp/mysql$2.sock"
             ${mysql} -u${MYSQL_USER} -p${MYSQL_PASSWORD} -S ${MYSQL_SOCK_DIR} -e "show global status;" 2> /dev/null |grep -v Variable_name|grep "${var}"|awk '{print $2}'
    [root@mysql etc]# more /etc/zabbix/bin/mysql_alive.sh
             #!/bin/bash
             mysqladmin=/usr/local/mysql/bin/mysqladmin
             MYSQL_USERdd="zabbixagent"
             MYSQL_PASSWORD=Zabbix131
             MYSQL_SOCK_DIR="/tmp/mysql$1.sock"
             ${mysqladmin} -u${MYSQL_USER} -p${MYSQL_PASSWORD} -S ${MYSQL_SOCK_DIR} ping|grep -c alive
    [root@mysql etc]# more /etc/zabbix/bin/mysql_slave_status.sh
             #!/bin/bash
             #var=$1
             mysql=/usr/local/mysql/bin/mysql
             MYSQL_USERdd="zabbixagent"
             MYSQL_PASSWORD=Zabbix131
             MYSQL_SOCK_DIR="/tmp/mysql$1.sock"
             ${mysql} -u${MYSQL_USER} -p${MYSQL_PASSWORD} -S ${MYSQL_SOCK_DIR} -e "show slave statusG;" 2> /dev/null|grep -E 'Slave_IO_Running: Yes|Slave_SQL_Running: Yes'|grep -c Yes
    [root@mysql etc]# more /etc/zabbix/bin/mysql_slave_time.sh
             #!/bin/bash
             #var=$1
             mysql=/usr/local/mysql/bin/mysql
             MYSQL_USERdd="zabbixagent"
             MYSQL_PASSWORD=Zabbix131
             MYSQL_SOCK_DIR="/tmp/mysql$1.sock"
             ${mysql} -u${MYSQL_USER} -p${MYSQL_PASSWORD} -S ${MYSQL_SOCK_DIR} -e "show slave statusG;" 2> /dev/null|grep -E 'Seconds_Behind_Master'|awk '{print $2}'

     5、重启 zabbix_agentd

    [root@mysql zabbix_agentd.d]# systemctl restart zabbix-agent

    二、zabbix页面上操作

    1、导入template_multi_MySQL.xml 模板信息,也可以参考xml文件手动增加。

    2、在模版上创建自动发现的规则,在自动发现规则中需要定义两个东西:
    a.键值 用来自动获取MySQL实例的端口,需要使用到主机宏{$MYSQLPORT}

     

    b.监控项原型 根据获取的端口来生成对应的监控项,需要使用到自动发现宏{#MYSQLPORT}

     

    3、在需要监控的主机上增加新创建的模板

     

    4、在需要监控的主机上定义一个宏{$MYSQLPORT},对应要监控的端口,如3306_3307_3308

    三、等待收集数据完成,如果没有数据的话,手动测试下具体

     例如在zabbixserver上执行操作,例如测试mysql 3306是否存活,1表示up,0表示down。

     

       最终的效果是

     

    Zabbix131
  • 相关阅读:
    无限维
    黎曼流形
    why we need virtual key word
    TOJ 4119 Split Equally
    TOJ 4003 Next Permutation
    TOJ 4002 Palindrome Generator
    TOJ 2749 Absent Substrings
    TOJ 2641 Gene
    TOJ 2861 Octal Fractions
    TOJ 4394 Rebuild Road
  • 原文地址:https://www.cnblogs.com/xzlive/p/13362414.html
Copyright © 2011-2022 走看看