扩展 Zabbix agent
本节提供了使用用户参数扩展 Zabbix agent 功能的分步说明。
以下示例用于获取 MySQL 服务器执行的语句数量。 这些步骤同时适用于 Zabbix agent 和 Zabbix agent 2。
本示例说明了用户参数的工作方式。 对于生产环境中的 MySQL 监控,请考虑使用预定义的 MySQL 模板,这些模板不需要用户参数。
步骤 1:准备 MySQL 访问权限
agent 以操作系统用户 zabbix 身份运行。
不要使用 MySQL 的 root 账户,因为它可能使用基于套接字的身份验证,从而导致 agent 无法连接。
请改为创建专用的 MySQL 用户:
CREATE USER 'zbx_monitor'@'localhost' IDENTIFIED BY '<password>';
将凭据存储在只有 zabbix 用户可读取的文件中,例如 /etc/zabbix/mysql_monitor.cnf(路径取决于操作系统和 Zabbix 的安装方式):
[client]
user=zbx_monitor
password=<strong password>
设置文件的所有者和权限:
sudo chown zabbix:zabbix /etc/zabbix/mysql_monitor.cnf
sudo chmod 600 /etc/zabbix/mysql_monitor.cnf
使用 --defaults-extra-file 显式传递此文件(它必须是传递给 MySQL 客户端的第一个选项),而不要依赖 ~/.my.cnf,因为守护进程的 HOME 环境变量可能未设置,或者与您预期的值不同。
如果 MySQL 使用非默认套接字路径,请在同一文件中添加一行 socket=。
步骤 2:编写命令
编写自定义脚本或命令以获取所需的参数,并确保它在与 agent 守护进程相同的条件下正常运行。
以下命令返回 MySQL 服务器执行的语句数量:
/usr/bin/mysql --defaults-extra-file=/etc/zabbix/mysql_monitor.cnf -N -B -e "SHOW GLOBAL STATUS LIKE 'Questions'" | /usr/bin/awk '{print $2}'
您可以以 zabbix 用户身份测试该命令;它应输出一个数字:
sudo -u zabbix sh -c "/usr/bin/mysql --defaults-extra-file=/etc/zabbix/mysql_monitor.cnf -N -B -e \"SHOW GLOBAL STATUS LIKE 'Questions'\" | /usr/bin/awk '{print \$2}'"
步骤 3:将命令添加到 Zabbix agent 配置中
不要编辑主 agent 配置文件(zabbix_agentd.conf 或 zabbix_agent2.conf),而应在 Include 参数所包含的目录中创建单独的文件。
单独的文件更易于管理,也不太可能受到软件包升级的影响。
例如,创建 /etc/zabbix/zabbix_agentd.d/mysql.conf(对于 Zabbix agent 2,则创建 /etc/zabbix/zabbix_agent2.d/mysql.conf),内容如下:
UserParameter=mysql.questions,/usr/bin/mysql --defaults-extra-file=/etc/zabbix/mysql_monitor.cnf -N -B -e "SHOW GLOBAL STATUS LIKE 'Questions'" | /usr/bin/awk '{print $2}'
mysql.questions 是唯一的监控项键值。
它在 agent 配置中必须是唯一的。
您可以通过使用 -t 标志运行 Zabbix agent 来测试该参数。
请以 zabbix 用户身份运行测试;如果配置文件不在默认位置,请指定配置文件:
对于 Zabbix agent:
sudo -u zabbix zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t mysql.questions
对于 Zabbix agent 2:
sudo -u zabbix zabbix_agent2 -c /etc/zabbix/zabbix_agent2.conf -t mysql.questions
预期输出中包含一个数字,例如:
mysql.questions [t|4567]
步骤 4:重新加载并测试用户参数
通过运行以下命令,从配置文件重新加载用户参数:
对于 Zabbix agent:
sudo zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -R userparameter_reload
对于 Zabbix agent 2:
sudo zabbix_agent2 -c /etc/zabbix/zabbix_agent2.conf -R userparameter_reload
以 root 身份或运行 agent 的操作系统用户身份运行该命令。
或者,重启 agent 以应用配置更改。
您可以使用 zabbix_get 工具测试正在运行的 agent 上的参数,例如,从 Zabbix 服务器运行:
zabbix_get -s <IP address> -k mysql.questions
此处,<IP address> 是运行 agent 的主机的 IP 地址,zabbix_get 将连接到该地址。
运行 zabbix_get 的主机的 IP 地址必须列在 agent 的 Server 参数中。
要使此测试正常工作,agent 必须接受被动检查(对于 Zabbix agent,StartAgents 不能设置为 0)。
如果 agent 仅配置为执行主动检查,请跳过此测试,并在完成最后一步后,在监控 > 最新数据中验证监控项。
步骤 5:创建监控项
在受监控的主机上使用 mysql.questions 监控项键创建新的监控项。
选择监控项类型:Zabbix agent 或 Zabbix agent(主动式)。
对于 Zabbix agent(被动式),Zabbix 服务器或 proxy 的地址必须列在 agent 的 Server 参数中。
对于 Zabbix agent(主动式),ServerActive 参数必须指定 Zabbix 服务器或 proxy,并且 agent 的 Hostname 参数必须与前端中配置的主机名完全匹配。
选择监控项的信息类型。 agent 始终以文本形式返回值;信息类型定义了 Zabbix 在执行所有预处理步骤后如何解释和存储该值。
对于原始累计计数器,请选择数值(无符号)。 要测量每秒的语句数,请选择数值(浮点),并添加每秒变化预处理步骤。