zabbix_get获取数据和脚本、命令输出数据不一致


前言

近期在为php-fpm 做自定义监控的时候,发现数据获取有异常,和往常遇到权限问题的异常不同,因此记录一下。可能有些大神一看我的UserParameter 写法就知道问题所在

提示:以下是本篇文章正文内容,下面案例可供参考

一、异常展示

配置文件

UserParameter=php-fpm.status[*],/usr/bin/curl -s "http://127.0.0.1/status?xml" | grep "<$1>"| awk -F '>|<' '{ print $3 }'

执行命令输出,原本怀疑是权限问题,但测试显示zabbix用户执行的时候获取数据是正常的

[zabbix@new-center vhost]$ /usr/bin/curl -s "http://127.0.0.1/status?xml" | grep "<max-listen-queue>"| awk -F '>|<' '{ print $3 }'
0

[root@new-center vhost]# sudo -u zabbix /usr/bin/curl -s "http://127.0.0.1/status?xml" | grep "<max-listen-queue>"| awk -F '>|<' '{ print $3 }'
0

zabbix_get输出

[root@zabbix bin]# ./zabbix_get -s *.*.*.* -p 10050 -k "php-fpm.status[max-listen-queue]"
<max-listen-queue>0</max-listen-queue>

二、排查思路

1、网上查到说有可能是selinux 未关闭导致的,但测试后并没有效果

selinux关闭。开启selinux会引起一连串问题,甚至zabbix的discovery功能也不能正常使用
关闭SELinux的方法:
修改/etc/selinux/config文件中的SELINUX="" 为 disabled ,然后重启。
如果不想重启系统,使用命令setenforce 0

2、查看错误zabbix_server错误日志发现以下异常

30653:20210414:161542.580 error reason for "252:php-fpm.status[idle-processes]" changed: Value "<idle-processes>510</idle-processes>" of type "string" is not suitable for value type "Numeric (unsigned)"

看异常信息,属于正常现象,因为我zabbix监控项设置获取的数据为数字(无正负)。但zabbix_get 获取结果显示是字符串。关闭相关监控想,用zabbix_get 获取数据并未发现异常或者有用的日志信息

3、查看错误zabbix_agentd日志 也并未发现什么问题

4、思来想去再一次回到权限问题上
为命令添加sudo

UserParameter=php-fpm.status[*],sudo /usr/bin/curl -s "http://127.0.0.1/status?xml" | grep "<$1>"| /usr/bin/awk -F '>|<' '{ print $3 }'

但执行zabbix_get 命令获取到空值,查看错误zabbix_agentd日志 发现异常

sudo: no tty present and no askpass program specified

给zabbix用户添加不用密码使用sudo的权限。

sudo vi /etc/sudoers

在sudoers文件中加一行:

zabbix ALL=(ALL) NOPASSWD:ALL

再次执行zabbix_get 获取数据, 发现依然是百搭

[root@zabbix bin]# ./zabbix_get -s 192.168.7.1 -p 10050 -k "php-fpm.status[max-listen-queue]"
<max-listen-queue>1</max-listen-queue>

5、正当我把头都挠破的时候,突然想试一下 不传参会不会正常

## 配置文件
UserParameter=demo1,sudo /usr/bin/curl -s "http://127.0.0.1/status?xml" | grep "<max-listen-queue>"| awk -F '>|<'  '{ print $3 }'
## 输出

[root@zabbix bin]# ./zabbix_get -s 192.168.7.1  -p 10050 -k "demo1"
1

再次测试了几次发现如下区别

配置文件

UserParameter=php-fpm.status[*],sudo /usr/bin/curl -s "http://127.0.0.1/status?xml" | grep "<max-listen-queue>"| awk -F  '>|<' '{ print $3 }'
UserParameter=php-fpm.status1,sudo /usr/bin/curl -s "http://127.0.0.1/status?xml" | grep "<max-listen-queue>"| awk -F '>|<'  '{ print $3 }'

输出

[root@zabbix bin]# ./zabbix_get -s 192.168.7.1 -p 10050 -k "php-fpm.status1[max-listen-queue]"
<max-listen-queue>1</max-listen-queue>
[root@zabbix bin]# ./zabbix_get -s 192.168.7.1 -p 10050 -k "php-fpm.status1"
1
[root@zabbix bin]# ./zabbix_get -s 192.168.7.1 -p 10050 -k "php-fpm.status"
<max-listen-queue>1</max-listen-queue>

然后我在想是不是传参和print 里的$3 搞混了,需要转译什么的。然后就找了一下zabbix 自定义监控和awk的相关应用,找了一下文章。

https://blog.51cto.com/steed/2476361

果不其然!!!

正确写法

UserParameter=php-fpm.status[*],sudo /usr/bin/curl -s "http://127.0.0.1/status?xml" | grep "<max-listen-queue>"| awk -F  '>|<' '{ print $$3 }'

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值