扩展 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 在执行所有预处理步骤后如何解释和存储该值。

对于原始累计计数器,请选择数值(无符号)。 要测量每秒的语句数,请选择数值(浮点),并添加每秒变化预处理步骤。