Zabbix 可以创建告警动作执行远程命令或者脚本,但是 Zabbix 默认是使用 zabbix 用户来维护的,所以它没有权限去执行大部分命令,例如杀死进程、清理系统文件等。通过搜索引擎得到解决方案是,编辑 sudoers 文件,给予 zabbix 用户权限

# chmod 640 /etc/sudoers
# vim /etc/sudoers    #编辑 sudoers 文件,根据需要增加

# Allow 'zabbix' user to run all commands without password.
zabbix  ALL=NOPASSWD: ALL
# Allow 'zabbix' user to restart nginx without password.
zabbix  ALL=NOPASSWD: /etc/init.d/nginx restart

我尝试下来,依旧提示权限不足,后来查找官方手册终于找到了100%能解决此问题的方法,使用 root 用户运行 Zabbix Agent。需要注意,我使用的系统是CentOS 7,其他 Linux 分支系统操作方法可能不太一样。

  1. 首先关闭 SELinux,这一步很重要,否则无法启动 Zabbix Agent。
# 查看 SELinux 状态
getenforce

# 临时关闭(不用重启)
setenforce 0  # 设置 SELinux 为 permissive 模式

# 永久关闭
vim /etc/selinux/config  # 将 SELINUX=enforcing 改为 SELINUX=disabled,重启即可
  1. 新建 /etc/systemd/system/zabbix-agent.service.d/override.conf 文件,内容如下
[Service]
User=root
Group=root
  1. 修改 /etc/zabbix/zabbix_agentd.conf 文件,找到 UserAllowRoot,去掉注释改为 User=rootAllowRoot=1

  2. 最后重启 Zabbix Agent 即可。

systemctl daemon-reload
systemctl restart zabbix-agent

Never give up your dreams.