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 分支系统操作方法可能不太一样。
- 首先关闭 SELinux,这一步很重要,否则无法启动 Zabbix Agent。
# 查看 SELinux 状态
getenforce
# 临时关闭(不用重启)
setenforce 0 # 设置 SELinux 为 permissive 模式
# 永久关闭
vim /etc/selinux/config # 将 SELINUX=enforcing 改为 SELINUX=disabled,重启即可
- 新建
/etc/systemd/system/zabbix-agent.service.d/override.conf
文件,内容如下
[Service]
User=root
Group=root
修改
/etc/zabbix/zabbix_agentd.conf
文件,找到 User 和 AllowRoot,去掉注释改为User=root
和AllowRoot=1
。最后重启 Zabbix Agent 即可。
systemctl daemon-reload
systemctl restart zabbix-agent
Comments | NOTHING