zabbix5.0.4自定义监控mysql5.7

1.登录agent服务器,创建zabbix的mysql用户

grant all on *.* to zabbix@"127.0.0.1" identified by "zabbix123456";flush privileges;

2.创建监控脚本

mkdir /etc/zabbix/script
vim /etc/zabbix/script/mysql_status.sh

脚本内容:

#!/bin/bash 
#Desc:zabbix 监控 MySQL 状态
#Date:2020-3-2
#by:unhejing

#主机
HOST="127.0.0.1"
#用户
USER="zabbix"
#密码
PASSWORD="zabbix123456"
#端口
PORT="3306"
#MySQL连接
CONNECTION="mysqladmin -h ${HOST} -u ${USER} -P ${PORT} -p${PASSWORD}"

if [ $# -ne "1" ];then
    echo "arg error!"
fi

case $1 in
    Uptime)
        result=`${CONNECTION} status 2>/dev/null |awk '{print $2}'`
        echo $result
        ;;
    Questions)
        result=`${CONNECTION} status 2>/dev/null |awk '{print $6}'`
        echo $result
        ;;
    Com_update)
        result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Com_update" |awk '{print $4}'`
        echo $result
        ;;
    Slow_queries)
        result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Slow_queries" |awk '{print $4}'`
        echo $result
        ;;
    Com_select)
        result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Com_select" |awk '{print $4}'`
        echo $result
        ;;
    Com_rollback)
        result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Com_rollback" |awk '{print $4}'`
        echo $result
        ;;
    Com_insert)
        result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Com_insert" |awk '{print $4}'`
        echo $result
        ;;
    Com_delete)
        result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Com_delete" |awk '{print $4}'`
        echo $result
        ;;
    Com_commit)
        result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Com_commit" |awk '{print $4}'`
        echo $result
        ;;
    Bytes_sent)
        result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Bytes_sent" |awk '{print $4}'`
        echo $result
        ;;
    Bytes_received)
        result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Bytes_received" |awk '{print $4}'`
        echo $result
        ;;
    Com_begin)
        result=`${CONNECTION} extended-status 2>/dev/null |grep -w "Com_begin" |awk '{print $4}'`
        echo $result
        ;;*)
        echo "Usage:$0(Uptime|Questions|Com_update|Slow_queries|Com_select|Com_rollback|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)"
        ;;
esac

3.赋权限

chmod +x /etc/zabbix/script/mysql_status.sh 

4.修改zabbix-agent配置文件

vim /etc/zabbix/zabbix_agentd.conf 

文件最后追加:

#获取MySQL性能指标,这个是上一步编辑好的脚本
UserParameter=mysql.status[*],/etc/zabbix/script/mysql_status.sh $1
#获取MySQL运行状态
UserParameter=mysql.ping,mysqladmin -u root -h 127.0.0.1 -pM9Ncehx92haser3r8usxx1qaz\!QAZ ping 2>/dev/null | grep -c alive
#获取MySQL版本
UserParameter=mysql.version,mysql -V
#慢查询sql数量
UserParameter=mysql.slow,export MYSQL_PWD=zabbix123456;mysql -uzabbix -h127.0.0.1 -P3306 -sN -e "select count(1) from information_schema.innodb_trx ORDER BY trx_started asc;"

5.重启 zabbix-agent 

service zabbix-agent restart

6.关闭selinux防火墙

setenforce 0

7.创建mysql软连接(否者到时候获取数据会报错 sh: mysql: 未找到命令)

ln -s /usr/local/mysql/bin/* /usr/bin

8.配置web页面

(1)创建模版

(2)创建触发器

(3)添加主机关联模版(template custom MYSQL是自己的自定义的模版)

(4)模版文件如下,可直接导入到模版库(zbx_export_templates.xml)

<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
    <version>5.0</version>
    <date>2021-03-04T02:46:34Z</date>
    <groups>
        <group>
            <name>htflsys</name>
        </group>
    </groups>
    <templates>
        <template>
            <template>Template custom MYSQL</template>
            <name>Template custom MYSQL</name>
            <description>自定义mysql监控</description>
            <groups>
                <group>
                    <name>htflsys</name>
                </group>
            </groups>
            <items>
                <item>
                    <name>mysql.Com_insert</name>
                    <key>mysq.status[Com_insert]</key>
                    <delay>10s</delay>
                </item>
                <item>
                    <name>mysql.ping</name>
                    <key>mysql.ping</key>
                    <delay>10s</delay>
                    <triggers>
                        <trigger>
                            <expression>{last()}=0</expression>
                            <name>数据库存活状态</name>
                            <priority>HIGH</priority>
                        </trigger>
                    </triggers>
                </item>
                <item>
                    <name>mysql.slow</name>
                    <key>mysql.slow</key>
                    <triggers>
                        <trigger>
                            <expression>{last()}&gt;10</expression>
                            <name>慢查询</name>
                            <priority>HIGH</priority>
                        </trigger>
                    </triggers>
                </item>
                <item>
                    <name>mysql.Com_delete</name>
                    <key>mysql.status[Com_delete]</key>
                    <delay>10s</delay>
                </item>
                <item>
                    <name>mysql.Com_rollback</name>
                    <key>mysql.status[Com_rollback]</key>
                    <delay>10s</delay>
                </item>
                <item>
                    <name>mysql.Com_select</name>
                    <key>mysql.status[Com_select]</key>
                    <delay>10s</delay>
                </item>
                <item>
                    <name>mysql.Com_update</name>
                    <key>mysql.status[Com_update]</key>
                    <delay>10s</delay>
                </item>
                <item>
                    <name>mysql.Questions</name>
                    <key>mysql.status[Questions]</key>
                    <delay>10s</delay>
                </item>
                <item>
                    <name>mysql.Slow_queries</name>
                    <key>mysql.status[Slow_queries]</key>
                    <delay>10s</delay>
                </item>
                <item>
                    <name>mysql.uptime</name>
                    <key>mysql.status[Uptime]</key>
                    <delay>10s</delay>
                </item>
                <item>
                    <name>mysql.version</name>
                    <key>mysql.version</key>
                    <delay>10s</delay>
                    <trends>0</trends>
                    <value_type>CHAR</value_type>
                </item>
            </items>
        </template>
    </templates>
    <graphs>
        <graph>
            <name>慢查询</name>
            <ymin_type_1>FIXED</ymin_type_1>
            <ymax_type_1>FIXED</ymax_type_1>
            <graph_items>
                <graph_item>
                    <sortorder>1</sortorder>
                    <color>1A7C11</color>
                    <item>
                        <host>Template custom MYSQL</host>
                        <key>mysql.slow</key>
                    </item>
                </graph_item>
            </graph_items>
        </graph>
    </graphs>
</zabbix_export>

(5)配置成功以后查看最新数据

备注:

1.脚本里面使用mysql和mysqladmin时,host的地址使用127.0.0.1不要使用localhost,我遇到了此问题 研究了很久才找到这bug,所以我在开始赋予权限时也改成了127.0.0.1

2.如果127.0.0.1还是访问不到,则建议取消-h合格参数,脚本也可以执行成功

3.如果mysql一直没响应,可以在agent服务器上先执行脚本看是否成功 

sh /etc/zabbix/script/mysql_status.sh Uptime

如果返回有数字,则执行成功,如果返回为空,则脚本执行失败,换用mysqladmin原命令执行验证用户名密码是否能登录

mysqladmin  -u zabbix -P 3306 -pzabbix123456 status

如果上面两个指令都正常。则去zabbix-server服务器上执行远程命令

zabbix_get -s 192.168.31.57 -k mysql.status[Uptime]

以上三条命令大致能排查出问题所在。如果agent服务器上Uptime有值,server服务器上没值,则是linux防火墙的问题,即在agent服务器上执行:setenforce 0 即可

 

篇末赋上自动化脚本:

#!/bin/bash 
#Desc:自动部署zabbix 监控 MySQL 状态 agent端 说明执行改脚本需要传入主机、用户名、密码、端口信息。
#Date:2020-3-2
#by:unhejing


#MySQL连接信息
function MySQLInfo {
    read -p "主机:" HOST
    read -p "用户:" USER
    read -p "密码:" PASSWORD
    read -p "端口:" PORT
}

#创建mysql_status脚本
function MySQLScript {
cat >>/etc/zabbix/script/mysql_status.sh<<EOF
#!/bin/bash 
#Desc:zabbix 监控 MySQL 状态
#Date:2020-3-2
#by:unhejing

#主机
HOST=$HOST
#用户
USER=$USER
#密码
PASSWORD=$PASSWORD
#端口
PORT=$PORT
#MySQL连接
CONNECTION="mysqladmin -h ${HOST} -u ${USER} -P ${PORT} -p${PASSWORD}"

if [ \$# -ne "1" ];then
    echo "arg error!"
fi

case \$1 in
    Uptime)
        result=\`\${CONNECTION} status 2>/dev/null |awk '{print \$2}'\`
        echo \$result
        ;;
    Questions)
        result=\`\${CONNECTION} status 2>/dev/null |awk '{print \$6}'\`
        echo \$result
        ;;
    Com_update)
        result=\`\${CONNECTION} extended-status 2>/dev/null |grep -w "Com_update" |awk '{print \$4}'\`
        echo \$result
        ;;
    Slow_queries)
        result=\`\${CONNECTION} extended-status 2>/dev/null |grep -w "Slow_queries" |awk '{print \$4}'\`
        echo \$result
        ;;
    Com_select)
        result=\`\${CONNECTION} extended-status 2>/dev/null |grep -w "Com_select" |awk '{print \$4}'\`
        echo \$result
        ;;
    Com_rollback)
        result=\`\${CONNECTION} extended-status 2>/dev/null |grep -w "Com_rollback" |awk '{print \$4}'\`
        echo \$result
        ;;
    Com_insert)
        result=\`\${CONNECTION} extended-status 2>/dev/null |grep -w "Com_insert" |awk '{print \$4}'\`
        echo \$result
        ;;
    Com_delete)
        result=\`\${CONNECTION} extended-status 2>/dev/null |grep -w "Com_delete" |awk '{print \$4}'\`
        echo \$result
        ;;
    Com_commit)
        result=\`\${CONNECTION} extended-status 2>/dev/null |grep -w "Com_commit" |awk '{print \$4}'\`
        echo \$result
        ;;
    Bytes_sent)
        result=\`\${CONNECTION} extended-status 2>/dev/null |grep -w "Bytes_sent" |awk '{print \$4}'\`
        echo \$result
        ;;
    Bytes_received)
        result=\`\${CONNECTION} extended-status 2>/dev/null |grep -w "Bytes_received" |awk '{print \$4}'\`
        echo \$result
        ;;
    Com_begin)
        result=\`\${CONNECTION} extended-status 2>/dev/null |grep -w "Com_begin" |awk '{print \$4}'\`
        echo \$result
        ;;
    *)
        echo "Usage:\$0(Uptime|Questions|Com_update|Slow_queries|Com_select|Com_rollback|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)"
        ;;
esac
EOF
    chmod +x /etc/zabbix/script/mysql_status.sh
}

#配置agent mysql配置文件
function Config {
cp /etc/zabbix/zabbix_agentd.conf{,back}
cat >>/etc/zabbix/zabbix_agentd.conf<<EOF
# 获取MySQL性能指标,这个是上一步编辑好的脚本
UserParameter=mysql.status[*],/etc/zabbix/script/mysql_status.sh \$1
# 获取MySQL运行状态
UserParameter=mysql.ping,mysqladmin -u $USER -h $HOST -p$PASSWORD ping 2>/dev/null | grep -c alive
# 获取MySQL版本
UserParameter=mysql.version,mysql -V
#慢查询sql数量
UserParameter=mysql.slow,export MYSQL_PWD=$PASSWORD;mysql -uzabbix -h$HOST -P3306 -sN -e "select count(1) from information_schema.innodb_trx ORDER BY trx_started asc;"
EOF
}

function main {
#创建脚本存放路径
mkdir /etc/zabbix/script
MySQLInfo
MySQLScript
Config
#重启zabbix-agent
service zabbix-agent restart
setenforce 0
}

main

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值