zabbix用户权限不够导致监控脚本执行失败

情况是这样的,用zabbix检测磁盘数目,如果数目不等于预设值则报警。安装好raid检测软件,写好脚本,手工执行脚本非常OK(正常返回1,异常返回0)

1
2
3
[root@xxxxxx bin]# ./raid.sh lsiutil
1
[root@xxxxxx bin]#

该键的键名是raid.lsiutil,在server端测用zabbix_get测试该值发现,返回的是0和agent端执行的脚本的结果不一样。
出现这个问题,开始还是摸不到头绪的,走了很多弯路,后来经过老大的协助解决问题了,zabbix agent使用的是普通用户zabbix运行的,某些操作权限不够导致脚本执行失败,整理的排错步骤如下:
1、将zabbix agent的日志级别跳到最高4,重启zabbix agent

1
DebugLevel=4

zabbix的所有日志级别如下:

1
2
3
4
5
0 - no debug 无日志
1 - critical information 灾难日志
2 - error information 错误级别
3 - warnings 告警级别
4 - for debugging (produces lots of information)调试级别

2、查看日志如下(果然有报错):

1
2
3
4
5
sh: /xxx/xxx/zabbix/bin/raid.sh: Permission denied
sh: /xxx/xxx/zabbix/bin/raid.sh: Permission denied
sh: /xxx/xxx/zabbix/bin/raid.sh: Permission denied
sh: /xxx/xxx/zabbix/bin/raid.sh: Permission denied
sh: /xxx/xxx/zabbix/bin/raid.sh: Permission denied

3、没有权限?用visudo给zabbix用户添加sudo权限,不需要密码就可以执行lsiutil或megacli命令

1
zabbix  xx-xx-xx-WEBxx= NOPASSWD:/usr/bin/lsiutil

4、再次到zabbix server端用zabbix_get取值,发现还是不对,查看agent的日志发现还是有报错:

1
2
3
4
5
sudo: sorry, you must have a tty to run sudo
sudo: sorry, you must have a tty to run sudo
sudo: sorry, you must have a tty to run sudo
sudo: sorry, you must have a tty to run sudo
sudo: sorry, you must have a tty to run sudo

5、提示运行sudo 需要一个终端,再次visudo,让zabbix用户无需登录tty就可以执行sudo命令

1
Defaults:zabbix    !requiretty

然后zabbix server端取值就正常,将agent端的日志级别调到默认级别、重启。
附上脚本,脚本内容如下(检测raid的磁盘数目,sudo命令是之后加上的):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash
megacli(){
online=`sudo megacli -PDList -aALL -NoLog | grep Online | wc -l`
if [[ "$online" -ne "$disknum" ]];then
echo 0
else
echo 1
fi
}

lsiutil(){
online=`sudo lsiutil -p1 -a 21,2,0,0 |grep online |wc -l`
if [[ "$online" -ne "$disknum" ]];then
echo 0
else
echo 1
fi
}

disknum=2
case "$1" in
lsiutil)
lsiutil
;;
megacli)
megacli
;;
esac
----------------本文结束 感谢阅读----------------