本文以及实践过程中,基本上参考并抄写了以下 2 篇博文

https://www.jb51.net/article/197255.htm

https://www.cnblogs.com/daofaziran/p/12559948.html

先感谢以上 2 位博主,并表示惭愧!抄作业了!

被控端(azbbix-agent)准备数据库

$ mysql -u root -p

#创建数据库zabbix,用于存储收集的数据

CREATE DATABASE zabbix CHARACTER SET utf8 COLLATE utf8_bin;

用户名zabbix,假设密码 Zabbix@1234567890
grant all on . to ‘zabbix’@‘localhost’ identified by ‘Zabbix@1234567890’;

被控端(azbbix-agent)创建配置文件

$ sudo vim /etc/zabbix/.my.cnf

	[mysql]
	host=localhost
	user=zabbix
	password=123456
	socket=/data/mysql/mysql.sock
	[mysqladmin]
	host=localhost
	user=zabbix
	password=Zabbix@1234567890
	socket=/data/mysql/mysql.sock
	
	# mysql.sock文件通过find / -name mysql.sock找出路径

被控端(azbbix-agent)创建mysql监控脚本

$ whereis zabbix

$ cd /etc/zabbix

$ sudo mkdir scripts/

$ sudo vim mysql_check.sh

#!/bin/bash
mysql="mysql -uzabbix -pzabbix@88553212#068"
case $1 in
 # mysql主从状态
 slave_status)
  $mysql -e "show slave status\G" |grep "Yes" |wc -l
 ;; 
 # mysql流量 接受
 Bytes_received)
  mysqladmin extended-status |grep "Bytes_received" |awk '{print $4}'
 ;;
 # mysql流量 发送
 Bytes_sent)
  mysqladmin extended-status |grep "Bytes_sent" |awk '{print $4}'
 ;;
 # mysql常规操作 增
 Com_insert)
  mysqladmin extended-status |grep -w "Com_insert" |awk '{print $4}'
 ;;
 # mysql常规操作 删
 Com_delete)
  mysqladmin extended-status |grep -w "Com_delete" |awk '{print $4}'
 ;;
 # mysql常规操作 改
 Com_update)
  mysqladmin extended-status |grep -w "Com_update" |awk '{print $4}'
        ;;
 # mysql常规操作 查
 Com_select)
  mysqladmin extended-status |grep -w "Com_select" |awk '{print $4}'
 ;;
 # mysql tps
 tps)
  mysqladmin status |awk '{print $6/$2}'
 ;;
 # mysql qps=(rollback+commit)/uptime
 qps)
  rollback=$(mysqladmin extended-status |grep -w "Com_rollback" |awk '{print $4}')
  commit=$(mysqladmin extended-status |grep -w "Com_commit" |awk '{print $4}')
  uptime=$(mysqladmin status |awk '{print $2}')
  count=$[$rollback+$commit]
  echo "$count $uptime" > /tmp/a.txt
  cat /tmp/a.txt |awk '{print $1/$2}'
 ;;
 # 库大小 我们这里拿mysql库举例
 db)
  $mysql -e "select sum(data_length) from information_schema.tables where table_schema='mysql'" |sed -n '2p'
 ;;
 # 表大小 我们这里拿mysql下面的user表举例
 tb)
  $mysql -e "select sum(data_length) from information_schema.tables where table_schema='mysql' and table_name='user'" |sed -n '2p'
 ;;
esac

$ sudo chmod +x mysql_check.sh

被控端(azbbix-agent)创建agent监测key

$ cd /etc/zabbix/zabbix_agentd.conf.d

$ sudo vim mysql_check.conf

UserParameter=mysql.check[*],/etc/zabbix/scripts/mysql_check.sh $1

监测key : mysql.check,并带上一个参数
对应的shell 脚本 /etc/zabbix/scripts/mysql_check.sh
需要一个参数 $1

重启 zabbix-agent 服务

$ sudo service zabbix-agent restart

主控端(Zabbix-server)验证

假设以上被控端内网 ip : 192.168.0.123

$ zabbix_get -s 192.168.0.123 -k mysql.check[db]

mysql: [Warning] Using a password on the command line interface can be insecure.
465855

$ zabbix_get -s 192.168.0.123 -k nginx.status[active]

1

出现过的错误
$ zabbix_get -s 192.168.0.123 -k mysql.check[slave_status]

mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1227 (42000) at line 1: Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation
0

过程中没有注意到,有的 mysql 设置的密码规则比较严格
重新设置一下

GRANT ALL PRIVILEGES ON zabbix.* TO zabbix@’%’ IDENTIFIED BY ‘Zabbix@1234567890’;

grant all on . to ‘zabbix’@‘localhost’ identified by ‘Zabbix@1234567890’;

Zabbix WEB控制台增加监控模版

  1. 先计划好需要加上 mysql 监测的主机,建立一个主机群组(模版必须对应一个主机群组)

  1. 创建应用集

  1. 创建监控项
    mysql.check[Bytes_received]

在这里插入图片描述

  1. 克隆并创建其他监控项
    在这里插入图片描述

  2. 创建图形

这里我只创建了一个图形,就是表示流量的 2 个监控项

  1. 查看mysql流量数据

在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐