准备两台机器:
zabbix server: 192.168.158.131 <----> server端
mysql: 192.168.158.141 <----> agent端
创建mysql登录用户并授权 (agent端执行):
mysql> grant usage on *.* to zabbix@'192.168.158.131' identified by '9527';
Query OK, 0 rows affected, 1 warning (0.02 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
官方对usage的解释:
usage “无权限” 的同义词
当您想创建一个没有权限的用户时,可以指定usage
要看自己有哪些权限,使用该用户登录mysql,执行sql: show grants;[root@zabbix_nginx ~]# mysql -uzabbix -h192.168.158.141 -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 10 Server version: 5.7.22-log MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> show grants; +--------------------------------------------------+ | Grants for zabbix@192.168.158.131 | +--------------------------------------------------+ | GRANT USAGE ON *.* TO 'zabbix'@'192.168.158.131' | +--------------------------------------------------+ 1 row in set (0.001 sec) MySQL [(none)]>
usage的字面意思就是用法,其实就是让你这个用户可以像个用户似的登录,但是除了能看到有哪些数据库外,什么权限也没有,比如:
MySQL [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | +--------------------+ 1 row in set (0.001 sec) MySQL [(none)]> use infomation_schema; ERROR 1044 (42000): Access denied for user 'zabbix'@'192.168.158.131' to database 'infomation_schema' MySQL [(none)]>
如果创建并授权用户时报错:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements。
就先更改策略,再创建并授权用户,代码如下:
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.01 sec)
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)
mysql> grant usage on *.* to zabbix@'192.168.158.131' identified by '9527';
Query OK, 0 rows affected, 1 warning (0.02 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
在安装了mariadb或mysql的zabbix服务端执行:
[root@zabbix_nginx ~]# mysqladmin -uzabbix -p9527 -h192.168.158.141 ping 2>/dev/null
mysqld is alive
如果 mysql 状态正常,会显示 mysqld is alive,否则会提示连接不上。对于服务器端,mysqld is alive 这样的句子不好理解,服务器端最好只接收1和0,1表示服务可用,0表示服务不可用。那么再改进一下这个命令,如下:
[root@zabbix_nginx sbin]# mysqladmin -uzabbix -p9527 -h192.168.158.141 ping 2>/dev/null | grep -c alive
1
用户名和密码放在命令中对于以后的维护不好,所以我们创建一个目录 /sugar,在该目录下创建一个包含mysql用户名和密码的配置文件 ".zm",如下:(我这里没这么做。这种做法在远程机器上好使,在mysql本机上不好使)
mkdir /sugar
touch /sugar/.zm
vi /sugar/.zm 进行编辑,内容如下
[client]
user=zabbix
host=192.168.158.141
password=9527
有了这个文件后的命令变更为:
[root@zabbix_nginx ~]# HOME=/sugar mysqladmin ping 2>/dev/null | grep -c alive
1
或
[root@zabbix_nginx ~]# HOME=/sugar mysqladmin ping | grep -c alive
1
注意:
HOME=/sugar 必须写在 msqladmin 前面,否则会查不出数据,并报错:
做完这一步后需要做的就是,将这个监控命令添加到zabbix agent 中,并与一个item key 对应,这样 zabbix server 就能通过这个key 获取 mysql 状态了。我们使用 mysql.ping 作为mysql状态的key。
在 /etc/zabbix/下除了zabbix_agentd.conf外,通常还会有一个目录 zabbix_agentd.d
检查 zabbix_agentd.conf 文件中有没有 include zabbix_agentd.d。如果注释掉的话就解除注释
在/etc/zabbix/zabbix_agentd.d/下默认已经有一个 userparameter_mysql.conf
修改文件 userparameter_mysql.conf ,添加或修改为如下命令(默认给的mysql.ping 不对,需要改动下):
UserParameter=mysql.ping,mysqladmin -uzabbix -p9527 ping 2>/dev/null | grep -c alive
UserParameter=mysql.version,mysql -V
在 mysql所在agent端测试是否可用:
[root@mysql-master ~]# zabbix_agentd -t mysql.ping
mysql.ping [t|1]
[root@mysql-master ~]#
在 zabbix server端测试是否可用:
[root@zabbix_nginx ~]# zabbix_get -s 192.168.158.141 -k mysql.ping
1
zabbix 监控web端配置
配置 > 主机 > 创建 主机 192.168.158.141
给 192.168.158.141 链接监控自带模板 Template DB MySQL
链接模板后,自带一个监控mysql 状态的监控项和 触发器,都不用修改
自带的监控项
自带的触发器
我们需要创建一个图形,关于mysql状态的图形
图形 > 创建图形
查看监控图像
监测 > 图形 ,通过检索条件 “群组:Templates/Databases: 主机:192.168.158.141 图形: mysql status” 检索出mysql status图形