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

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

[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

DebugLevel=4

zabbix的所有日志级别如下:

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

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

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命令

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

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

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命令

Defaults:zabbix    !requiretty

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

#!/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

文章出处:http://www.xiaomastack.com/2015/03/18/zabbixfailed/

21 Comments

 Add your comment
  1. 博主,您好
    我要监控一个叫mrs.log的日志,现在zabbix_agentd.log出现了这样的内容:
    26402:20160820:172005.665 cannot stat ‘/mnt/hswx/mrs/logs/mrs.log’: [13] Permission denied
    26402:20160820:172015.666 cannot stat ‘/mnt/hswx/mrs/logs/mrs.log’: [13] Permission denied
    26402:20160820:172025.669 cannot stat ‘/mnt/hswx/mrs/logs/mrs.log’: [13] Permission denied
    26402:20160820:172025.669 active check “log[/mnt/hswx/mrs/logs/mrs.log,ERROR,,,,]” is not supported

    我把mrs.log给了权限666,同时sudoedit /etc/sudoers:
    ## The COMMANDS section may have other options added to it.
    ##
    ## Allow root to run any commands anywhere
    root ALL=(ALL) ALL
    zabbix ALL=(ALL) NOPASSWD:ALL
    Defaults:zabbix !requiretty

    重启了zabbix服务器之后,还是这样无法取值,请问一下我哪里出现了问题?

  2. 你可以切换到zabbix用户,然后操作那个文件看看有没有权限和有没有报其它的错误。

  3. 博主,我的zabbix是/sbin /nologin,而且公司的zabbix是走epel的路线,在安装epel源内的zabbix时,会自动创建zabbix用户、zabbix组。我根本不知道zabbix对应的账户密码,如何登陆呢?

  4. 您好,我刚刚试了一下这个:

    [root@js-online-mrs-002 logs]# su -s /bin/bash zabbix
    bash-4.1$ ls -l /mnt/hswx/mrs/logs/mrs.log
    ls: cannot access /mnt/hswx/mrs/logs/mrs.log: Permission denied

    请问这样的话,我如何解决呢?

  5. 权限不足,既然该文件是666的权限,看看上层目录的权限或者看看有没有开启selinux。

  6. [root@js-online-mrs-002 logs]# /usr/sbin/sestatus -v
    SELinux status: disabled

    然后我直接把/mnt下面直到mrs.log左右的目录都开放了777,再使用su -s /bin/bash zabbix,还是permission denied,我郁闷。。。

  7. 博主,我开放了到mrs.log所有的文件夹777,出现了这样的情况:
    [root@js-online-mrs-002 logs]# su -s /bin/bash zabbix
    bash-4.1$ ls -l /mnt
    total 20
    lrwxrwxrwx 1 root root 21 Aug 5 02:17 config -> /mnt/hswx/util/config
    drwxrwxrwx 6 root root 4096 Aug 5 02:17 hswx
    drwx—— 2 root root 16384 Apr 11 13:59 lost+found
    lrwxrwxrwx 1 root root 19 Aug 5 02:17 path -> /mnt/hswx/util/path
    lrwxrwxrwx 1 root root 27 Aug 5 02:17 service.conf -> /mnt/hswx/util/service.conf
    lrwxrwxrwx 1 root root 26 Aug 5 02:17 startAll.sh -> /mnt/hswx/util/startAll.sh
    lrwxrwxrwx 1 root root 25 Aug 5 02:17 stopAll.sh -> /mnt/hswx/util/stopAll.sh
    bash-4.1$ ls -l /mnt/hswx/
    total 24
    drwxr-xr– 3 root root 4096 Aug 5 02:17 configtool
    -rw-r–r– 1 root root 122 Aug 5 02:17 monitor.log
    drwxrwxrwx 5 root root 4096 Aug 5 02:17 mrs
    drwxr-xr– 4 root root 4096 Aug 5 02:17 util
    -rwxr-xr– 1 root root 21 Aug 5 02:17 version.txt
    drwxr-xr– 3 root root 4096 Aug 5 02:17 zkclient
    bash-4.1$ ls -l /mnt/hswx/mrs/
    total 156
    drwxr-xr– 2 root root 4096 Aug 5 02:17 lib
    drwxrwxrwx 2 root root 4096 Aug 22 10:24 logs
    -rw-r–r– 1 root root 0 Aug 5 02:17 mrsinput
    -rwxr-xr-x 1 root root 127134 Aug 5 02:17 mrs.jar
    -rwxr-xr– 1 root root 84 Aug 5 02:17 oom.sh
    -rwxr-xr– 1 root root 52 Aug 5 02:17 pci_build_cmd.sh
    drwxr-xr– 2 root root 4096 Aug 5 02:17 properties
    -rwxr-xr– 1 root root 626 Aug 5 02:17 start_mrs.sh
    -rwxr-xr– 1 root root 940 Aug 5 02:17 update_mrs_config.sh
    bash-4.1$ ls -l /mnt/hswx/mrs/logs/
    total 1864936
    -rwxrwxrwx 1 root root 22208637 Aug 22 11:13 mrs.log
    -rwxrwxrwx 1 root root 209715272 Aug 22 10:24 mrs.log.1
    -rw-r–r– 1 root root 209715380 Aug 21 18:43 mrs.log.2
    -rw-r–r– 1 root root 209715254 Aug 21 10:37 mrs.log.3
    -rw-rw-rw- 1 root root 209715419 Aug 20 18:51 mrs.log.4
    -rw-r–r– 1 root root 209715310 Aug 20 10:40 mrs.log.5
    -rw-r–r– 1 root root 209715516 Aug 19 19:03 mrs.log.6
    -rw-r–r– 1 root root 209715518 Aug 19 11:06 mrs.log.7
    -rw-r–r– 1 root root 209715608 Aug 18 19:36 mrs.log.8
    -rw-r–r– 1 root root 209715379 Aug 18 11:26 mrs.log.9
    bash-4.1$ ls -l /mnt/hswx/mrs/logs/mrs.log
    -rwxrwxrwx 1 root root 22239697 Aug 22 11:13 /mnt/hswx/mrs/logs/mrs.log

    现在貌似zabbix用户可以访问到mrs.log了,但是这样给了others 可执行权限,会不会不安全啊,我这个是实际生产的服务器

  8. 不需要递归777,这样可以定位问题说明之前有权限问题,估计是有目录other没有x权限,导致目录打不开造成的,只要目录有other有x权限,然后你监控的那个文件有r权限应该就可以了。

  9. 如果耽误您午休了,我很抱歉。
    我已经把权限更改成了755。用zabbix用户看是ok的,
    [root@js-online-mrs-002 logs]# su -s /bin/bash zabbix
    bash-4.1$ ls -l /mnt/hswx/mrs/logs/mrs.log
    -rwxr-xr-x 1 root root 58921788 Aug 22 12:38 /mnt/hswx/mrs/logs/mrs.log

    重启了zabbix-agent之后,在server端,还是无法get到这个key。
    [root@js-online-zabbixserver bin]# ./zabbix_get -s 172.31.0.41 -p 10050 -k log[/mnt/hswx/mrs/logs/mrs.log,ERROR,,,,]
    ZBX_NOTSUPPORTED

  10. 如果日志没有再报权限问题,你检查下zabbix的设置有没有问题。

  11. 26402:20160822:110846.710 cannot stat ‘/mnt/hswx/mrs/logs/mrs.log’: [13] Permission denied
    26402:20160822:110856.712 cannot stat ‘/mnt/hswx/mrs/logs/mrs.log’: [13] Permission denied
    26402:20160822:110906.713 cannot stat ‘/mnt/hswx/mrs/logs/mrs.log’: [13] Permission denied
    26402:20160822:110906.713 active check “log[/mnt/hswx/mrs/logs/mrs.log,ERROR,,,,]” is not supported
    26396:20160822:123952.602 Got signal [signal:15(SIGTERM),sender_pid:5047,sender_uid:0,reason:0]. Exiting …
    26396:20160822:123952.633 Zabbix Agent stopped. Zabbix 2.2.11 (revision 56693).
    5060:20160822:123952.724 Starting Zabbix Agent [js-online-mrs-002]. Zabbix 2.2.11 (revision 56693).
    5060:20160822:123952.724 using configuration file: /etc/zabbix_agentd.conf
    5066:20160822:123952.726 agent #4 started [active checks #1]
    5065:20160822:123952.728 agent #3 started [listener #3]
    5063:20160822:123952.728 agent #2 started [listener #2]
    5062:20160822:123952.728 agent #1 started [listener #1]
    5061:20160822:123952.728 agent #0 started [collector]
    我在12点39分的时候重启了zabbix的客户端,现在的确是不报权限错误了,但是依旧取key的时候是NOTSUPPORTED。

    如果要说zabbix_agentd.conf有问题的话,这台机器同时是在监控mrs进程的pid值和一个额外的指标,这两个值是可以被监控到的,如下:
    [root@js-online-zabbixserver bin]# ./zabbix_get -s 172.31.0.41 -p 10050 -k pid
    20161
    [root@js-online-zabbixserver bin]# ./zabbix_get -s 172.31.0.41 -p 10050 -k payload
    140
    [root@js-online-zabbixserver bin]# ./zabbix_get -s 172.31.0.41 -p 10050 -k log[/mnt/hswx/mrs/logs/mrs.log,ERROR,,,,]
    ZBX_NOTSUPPORTED
    [root@js-online-zabbixserver bin]#

  12. 额,这个格式好囧 ….看起来很不舒服…

  13. zabbix有主动和被动模式,log这个key是工作在主动模式下的,看看是不是这个问题。

  14. 现在这个状态是这样的,我的zabbix_get依旧是NOTSUPPORTED,但是在WEB界面里的latest data是可以看到ERROR的日志字样,是不是日志的监控本身就不能靠zabbix_get获取的呢?

  15. zabbix是可以监控日志文件的,你可以了解下zabbix的工作模式,主动和被动模式,你的工作模式估计是被动模式,而log这个key是工作在主动模式下,不知道是不是这个原因,仅供参考。

  16. 我这个item的type是zabbix agent(active)的。使用的版本是2.2。
    现在web界面可以正确得到error日志语句,zabbix_agentd.log也不报错,但是还是get不到这个key,提示是notsupported。
    我个人觉得可能这个key可能不是用zabbix_get得到的,但是这还是很蹊跷。

  17. 能正常监控就好了,至于get怎么取不到,可能是被动和主动key的区别吧,你get的时候不带端口试试,如果不行那我也不知道什么原因了。按道理主动的key是agent自己送过来的,不是server被动去取的。

  18. 我觉得您说得有道理,不是active模式的可能就是无法get到的。既然问题解决了,暂时也就好了。

    还有一个小小的额外问题,因为日志是自动切块的,切成mrs.log\mrs.log.1\mrs.log.2。如果我用logrt[/绝对路径/mrs.log*,ERROR]这种key能监控的到mrs.log这个文件吗?

  19. 第一个参数是文件路径,估计不支持通配符(你可以尝试下)。如果你的日志是切割的,那么rotate后的日志已经是旧的日志了,为什么还需要监控,不是很理解。

  20. 我又监控了一顿饭的功夫,日志应该是可以正常监控了,感谢博主!!

  21. 不客气:)

发表评论:

你的电子邮件地址将不会被公开.

7 + 3 =