[Zabbix问题解决]自定义脚本获取key失败怎么办?

之前在http://chenx1242.blog.51cto.com/10430133/1839829 这篇文章里写了如何创建一个自定义的key来让zabbix进行实时的监控。但是也会有这样一种情况,那就是脚本在客户端上是可以跑通而且可以得到结果,但是在zabbix_get却死活无法正确的得到脚本结果,得到的是空值。如下图:

注意一下,ZBX_NOTSUPPORTED是key不对的意思,而下面那个就是得到空值的意思。

一般来说这种情况非常蛋疼,zabbix就是这么一个缺点:出问题不表现出来,但是zabbix还有一个优点,那就是问题都会在日志文件里,于是我们就在控制端打开zabbix_agentd.log,查看一下情况,结果日志如图:

看见了吧,在取key的时候,各种权限拒绝。这是因为zabbix_agent是由zabbix这个账户操作的,而这个用户本身是没有很多权限的,所以我们要给zabbix一些权限,让它可以成功的访问文件。于是我们#sudoedit /etc/sudoers,把原来的文件改成这样:

把zabbix跟root的权限平起平坐,而且还nopasswd,这样sudo的时候就不用每次都输入一次root的密码了,然后在不需要tty,文件改好了之后保存退出。

这个时候我们来写一个小脚本,这个脚本名叫get-payload,目的是要从/tmp/zksync/pms这个文件里取到一个payload的值。我们先看一下/tmp/zksync/pms这个文件内容,以及脚本里要使用的语句:

可以看到我们可以截取到8这个payload,然后脚本也就很好写了,脚本如下:

#!/bin/bash
payload=$(cat /tmp/zksync/pms | perl -n -e‘/.*payload\":(\d+)\}\}/ && print $1‘) #这里我用正则匹配的,不是用上面的cut,效果一样的
echo $payload

然后把这个脚本的绝对路径放在zabbix_agentd.conf里,如图:

注意哦注意哦,脚本的绝对路径前面是有sudo这四个字母的!:wq保存退出,并且重启zabbix_agent之后,来到zabbix_server端去get一下,看一下效果:

无论是pid还是payload都能成功获取到数值,成功!!!

问题至此得到了解决,我们就可以在监控奇葩的项目的道路上越走越远了...

时间: 2024-10-02 10:12:01

[Zabbix问题解决]自定义脚本获取key失败怎么办?的相关文章

【Zabbix】自定义监控项 key 值。

zabbix自带的默认模版里包括了很多监控项,有时候为了满足业务需求,需要根据自己的监控项目自定义监控项,这里介绍一种自定义监控项的方式. 1,首先编写自定义监控脚本,本文以监控httpd进程是否存在为例. 脚本名字:check_httpd.sh 脚本目录(这个目录可以自定义):/usr/local/etc/zabbix_scripts 脚本内容: 脚本说明:通过ps检查httpd进程是否存在,如果存在则脚本反馈1,如果不存在则返回0 2,修改zabbix_agentd.conf配置文件. 说明

zabbix通过自定义脚本监控nginx,php-fpm和mysql占用内存数和进程的个数

首先,在zabbix脚本目录下添加一个脚本,写入如下代码 #!/bin/bash #license:GPL #mail:[email protected] #date:2015.04.16 top -bn1>/usr/local/zabbix-2.4.4/scripts/process.log LOG=/usr/local/zabbix-2.4.4/scripts/process.log php_fpm(){ grep "php-fpm" $LOG |awk '{sum+=$6}

zabbix使用自定义脚本监控内存

我这里的脚本是监控centos7系统的内存.centos7系统的内存如何查看我之前的博客都是有的.这里直接写了监控步骤 1.首先是编写脚本. #!/bin/bash mem_total(){ TOTAL=`free |grep -i mem |awk '{print $2}'` echo ${TOTAL} } mem_use(){ USE=`free |grep -i mem | awk '{print $3}'` echo ${USE} } mem_free(){ FREE=`free |gr

zabbix自定义脚本做监控及自制模板初探

一.说明 zabbix监控支持自定义脚本以及自制模板来扩展监控,换句话说就是对业务自定义监控;因此通过撰写脚本完成自定义监控十分有必要;这里的脚本既可以用shell也可以用python等语言;另外自定义了脚本主要目的是获取业务相关的监控数据;还需要结合zabbix web GUI上的模板才能生效;本文的目的就是基于之前的zabbix相关部署操作之后的补充! 任务:通过撰写脚本获取tcp 的各种状态,添加tcp状态模板,添加触发器;添加图形:完整实现脚本自定义监控的整个步聚流程! 二.agent端

zabbix 获取不到自定义脚本的值解决

agent端: zabbix 自定义脚本 [[email protected] script]# cat check_ping.sh #!/bin/bash result=$(/usr/local/nagios/libexec/check_icmp -s $1 $2) a=$(echo $result | awk '{print $1}') if [ $a == "OK" ];then echo "0000" else echo "2222" f

zabbix 自定义脚本监控配置之网卡

注:要添加自定义脚本监控,必须升级zabbix agent版本至2.0.0以上, 一:配置步骤 1. 完成自定义监控脚本的编写(windows或linux脚本) 脚本要求: (1)既然是监控,那必然要有输出结果值(字符串,数字皆可) (2)必须要求zabbix用户有执行权限,当然可以直接设置所有用户都有执行权限(chmod 777 脚本文件) (3)若脚本需要传入参数,按照参数传入的顺序,在脚本中可用$1-$9来引用传入的参数 2 找到zabbix agent的配置文件zabbix_agentd

Zabbix的通知功能以及自定义脚本告警

本节内容: Zabbix的通知功能 定义接收告警的用户 定义Action Zabbix自定义脚本发送报警邮件 一.Zabbix的通知功能 在配置好监控项和触发器之后,一旦正常工作中的某触发器状态发生改变,一般意味着有异常情况发生,此时通常需要采取一定的动作(action),如告警或者执行远程命令. 实现zabbix的通知功能,一般需要两个步骤:定义所需的"媒介"和配置一个"动作". 媒介类型有:E-mail,SMS,Jabber和自定义的通知脚本.我这里就使用E-m

Zabbix 之自定义Key

1.监控进程/usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -k "net.tcp.service[http]" 2.监控端口/usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -k "net.tcp.port[,80]" 结果:1存在,0不存在: 3.进程数量/usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -k "proc.nu

L15.3 zabbix自定义脚本执行与报警配置(辅助5.4)

zabbix脚本报警配置 注:此文是5.4配置的一些关键配置说明,非完整步骤 zabbix-agent要配置为支持执行远程命令: vim /etc/zabbix/zabbix_agentd.conf EnableRemoteCommands=1 #Defaults    requiretty 注意 (1) 如果用到以其它用户身份执行命令的话,那么命令本身要以sudo方式运行: sudo /etc/rc.d/init.d/httpd restart (2) 在各agent上的sudoers文件: