怎么使用zabbix监控多个mysql

网友投稿 619 2023-07-02

怎么使用zabbix监控多个mysql

怎么使用zabbix监控多个mysql

用到的主要工具: 宏(分为模板宏,主机宏,自动发现宏)

主机宏格式:$MACRO (直接就可以 填 值) 自动发现宏:#MACRO (需要配合 创建的 key 取值)登录后复制

大体架构

1.agent主机 — agent 主机创建 宏变量 $MYSQLPORT ,宏变量的值为 Discovery rules的 自动发现脚本参数 2.模板 — 模板里创建自动发现规则,靠的是自动发现脚本,得到自动发现宏变量。 3.监控项– 在Discovery rules 里创建监控项,监控项名称和key值里都有自动发现宏变量,会自动生成相关端口的监控项 4.客户端 脚本和键创建,来支持整个架构运行

搭建步骤

1.创建模板

可以忽略这个模板的 items 和 triggers,因为它是默认的克隆 mysql 监控模板。 监控项都在 Discovery rules 里。

在上面的图中,mysql.discovery指的是获取自动发现宏的脚本,该脚本位于代理端。

后面的 为此脚本执行时带的参数,MYSQLPORT 是主机宏。

discovery rule 右边的 filters 是过滤规则的意思,比方你 只想取脚本里的 某某 自动发现宏,就可以在里面设置。 这里就只有一个自动发现宏,所有不做 配置。

3.创建监控项(监控项和监控的脚本都是要改的,因为自动发现功能,至少脚本会多了一个参数)

4.创建 主机宏

点开主机,添加主机宏,宏名称是 自动发现脚本里的 参数, 宏的值就是 此 主机上需要监控的端口。

这样就实现了 只要改动主机宏的 值,就可以改变主机宏的监控项。

脚本展示

1.discovery_mysql.sh 自动发现端口脚本 (网上抄的脚本做了修改)

res=`echo $1| sed "s/_/\n/g"`;port=($res)printf '{\n'printf '\t"data":[\n'for key in ${!port[@]}do if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then printf '\t {\n' printf "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"},\n" else [[ "${key}" -eq "((${#port[@]}-1))" ]] printf '\t {\n' printf "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"}\n"fidoneprintf '\t ]\n'printf '}\n'登录后复制

执行实例: 以_ 为分隔符,格式化输出 自动发现宏 ./discovery_mysql.sh 3306_3307_3308

{ "data":[ { "{#MYSQLPORT}":"3306"}, { "{#MYSQLPORT}":"3307"}, { "{#MYSQLPORT}":"3308"} ]}登录后复制

2.mysql_filestype.sh 监控mysql的一些挂载盘

var=$1MYSQL_PORT=$2MYSQL_NAME=`ps -ef |grep '/mysql/app/bin/mysqld'| grep "$MYSQL_PORT" |grep -v grep | awk -F" " '{print $11}' |awk -F"/" '{print $2}'` ;MYSQL_SOCk_DIR="/$MYSQL_NAME/" ;df -h "${MYSQL_SOCk_DIR}${var}" |grep -v Filesystem |awk -F" " '{print $5}' | awk -F"%" '{print $1}' ;登录后复制

3.mysql_ping.sh 监控mysql状态

MYSQL_PORT=$1;[ "${MYSQL_USER}" = '' ] && MYSQL_USER=xxx[ "${MYSQL_PASSWORD}" = '' ] && MYSQL_PASSWORD=xxxxxmysqladmin=/mysql/app/bin/mysqladmin ;MYSQL_SOCk_DIR=`ps -ef |grep 'mysql'| grep "${MYSQL_PORT}" |grep -v 'grep' | awk -F" " '{print $16}'` ;${mysqladmin} -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_SOCk_DIR} ping 2> /dev/null |grep 'alive'|wc -l ;登录后复制

注意: 这边连接实例 都是 mysql -u -p -S /xxx/mysql.sock

但是后来发现部分客户端总是无法正确显示值,而且就是这条 语句报错, 感觉是环境变量的问题

所以拿 –socket=/xxx/mysql.sock 来代替 -S/xxx/mysql.sock 。 这里的变量${MYSQL_SOCk_DIR} 就是–socket=/xxx/mysql.sock 。

4.mysql_repl.sh mysql主从状态监控

var=$1MYSQL_PORT=$2MYSQL_SOCk_DIR=`ps -ef |grep 'mysql'| grep "${MYSQL_PORT}" |grep -v 'grep' | awk -F" " '{print $16}'` ;mysql=/mysql/app/bin/mysql[ "${MYSQL_USER}" = '' ] && MYSQL_USER=xxx[ "${MYSQL_PASSWORD}" = '' ] && MYSQL_PASSWORD=xxxx${mysql} -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_SOCk_DIR} -e "show slave status\G;" 2> /dev/null |grep "\b${var}\b"|awk -F" " '{print $2}' ;登录后复制

主从状态 有几个端口的值是 空的, 这个得 具体问题具体设置

5.mysql_status2 mysql性能之类的监控

mysql=/mysql/app/bin/mysqlvar=$1MYSQL_PORT=$2[ "${MYSQL_USER}" = '' ] && MYSQL_USER=xxx[ "${MYSQL_PASSWORD}" = '' ] && MYSQL_PASSWORD=xxxxxMYSQL_SOCk_DIR=`ps -ef |grep 'mysql'| grep "${MYSQL_PORT}" |grep -v 'grep' | awk -F" " '{print $16}'` ;${mysql} -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_SOCk_DIR} -e "show global status;" 2> /dev/null |grep -v Variable_name|grep "\b${var}\b"|awk '{print $2}' ;登录后复制

发现有些监控项 或因为数字过长而无法显示,待解决

6.mysql_version.sh mysql版本监控

MYSQL_PORT=$1;MYSQL_SOCk_DIR=`ps -ef |grep 'mysql'| grep "${MYSQL_PORT}" |grep -v 'grep' | awk -F" " '{print $16}'` ;mysql=/mysql/app/bin/mysql ;[ "${MYSQL_USER}" = '' ] && MYSQL_USER=xxx[ "${MYSQL_PASSWORD}" = '' ] && MYSQL_PASSWORD=xxxx${mysql} -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_SOCk_DIR} -e "select version();" 2> /dev/null |awk 'END {print}'登录后复制

7.mysql_status_many.conf 生成可用键 配置文件

UserParameter=mysql.discovery[*],/patrol/zabbix/bin/duoshili_discovery/discovery_mysql.sh $1 UserParameter=mysql.status_many[*],/patrol/zabbix/bin/duoshili_discovery/mysql_status2 $1 $2UserParameter=mysql.ping_many[*],/patrol/zabbix/bin/duoshili_discovery/mysql_ping.sh $1UserParameter=mysql.version_many[*],/patrol/zabbix/bin/duoshili_discovery/mysql_version.sh $1UserParameter=mysqlcheck_repl[*],/patrol/zabbix/bin/duoshili_discovery/mysql_repl.sh $1 $2UserParameter=mysql.filestyle_many[*],/patrol/zabbix/bin/duoshili_discovery/mysql_filestype登录后复制

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:怎么让spark sql写mysql时支持update操作
下一篇:MySQL优化及索引的方法
相关文章