自定义key解决zabbix端口监听取值不准确的问题

今天有一个朋友问到我一个关于zabbix监控tcp端口的问题,明明端口在监听,但是通过net.tcp,listen取值取到的却是0。

  经过简单的goole发现这已经是一个历史悠久的问题:

  问题的根本原因是zabbix的这个key(net.tcp,listen)是通过读取 /proc/net/tcp这个文件来进行数据采集的,而/proc/下的文件并不是线程安全的,因此会出现取值不准确的问题。

另外这种机制还存在另外一个隐患:当/proc/net/tcp文件的条目非常多的话,就会造成取值慢的情况,因此就有可能造成取值失败的问题。

那我们该如果解决这个问题呢,网上也找到了解决办法,我在这里当一次大自然的搬运工~哈哈

解决方法就是新添加一个用户自定义key来代替zabbix自己提供的监控方式,具体操作步骤如下:

#1,添加自定义key --> net.tcp.listen.grep[*]

添加方式,在zabbix客户端的agentd的配置文件中,或者在zabbix agentd所声明的Include配置文件目录下添加如下配置:

UserParameter=net.tcp.listen.grep[*],grep -q $$(printf ‘%04X.00000000:0000.0A‘ $1) /proc/net/tcp && echo 1 || echo 0

  例如我的选在就是在/etc/zabbix/zabbix-agentd.conf.d目录下,创建了一个文件net_tcp_listen.conf,将上述key的声明写到文件里,因为我的zabbix_agentd.conf中已经做了配置文件目录包含的声明:

thatsit:~ # grep ^Include /etc/zabbix/zabbix-agentd.conf
Include=/etc/zabbix/zabbix-agentd.conf.d/
thatsit:~ #
thatsit:~ # cat  /etc/zabbix/zabbix-agentd.conf.d/net_tcp_listen.conf
UserParameter=net.tcp.listen.grep[*],grep -q $$(printf ‘%04X.00000000:0000.0A‘ $1) /proc/net/tcp && echo 1 || echo 0
thatsit:~ #

#2,重启zabbix-agentd,使配置生效

shipeng:~ # /etc/init.d/zabbix-agentd restart
Shutting down zabbix agentd                                              done
Starting zabbix agentd                                                   done
shipeng:~ #

#3,使用zabbix_get进行测试

thatsit:~ # zabbix_get -s 192.168.3.154 -k "net.tcp.listen.grep[22]"
1
thatsit:~ # zabbix_get -s 192.168.3.154 -k "net.tcp.listen.grep[23]"
0
thatsit:~ #

#4,在web端,给指点的主机添加此监控项。

监控项的key即是:net.tcp.listen.grep[要监控的端口号]

#5,配置完成,排错思路

至此配置已经完成,如果有问题,可以按照以下思路进行排查,一般的问题在日志中都可以找到端倪。

# 排错思路:

在添加在定义key的时候需要注意一下事项:

注意配置文件或者自定义脚本的属主、属组配置

如果用到了自定义的脚本,注意添加执行权限

如果需要执行自定义脚本,还需要在zabbix_agentd.conf中开启如下参数:

thatsit:~ # grep ^Unsafe /etc/zabbix/zabbix-agentd.conf
UnsafeUserParameters=1
thatsit:~ #

参考链接:

http://www.oschina.net/question/224285_128311

时间: 2024-12-16 08:11:45

自定义key解决zabbix端口监听取值不准确的问题的相关文章

zabbix 之自定义key(10)

自定义key 在zabbix agent端的配置文件由用户通过userparameter指令定义用户自定义参数 userparameter=<key>,<command> userparameter=<key[*]>,<command> $1...$9 实例1(不带参数) [[email protected] ~]# vim /etc/zabbix/zabbix_agentd.conf UserParameter=system.memory.free,awk

zabbix自定义KEY监控服务状态[不需要端口]

zabbix监控Windows下的服务并实现告警和重启服务 首先 创建获取服务状态的脚本 一.Windows脚本 @echo off set srvname=%1 for /f "skip=3 tokens=4" %%i in ('sc query %srvname%') do set "zt=%%i" &goto :next :next if /i "%zt%"=="RUNNING" ( :服务运行正常,返回1. e

Zabbix建立自定义key值

Zabbix本身已经带有很多的监控项(items),而且这些监控项之间还可以数值加减乘除,这样的结果已经更加灵活丰富.但是毕竟zabbix的自带items还是有限,而我们在实际生产中也有一些额外需要的监控项目,比如说商品套餐价格.网站点击量.开发人员殴打产品经理次数(囧~)这样的数字或者文本也带进监控范围里,所以说,"自定义key值"就显得很重要了,不过zabbix在这一段做的是很不错的. 举个例子,还是看门狗.由于本公司广大模块服务器是只有内网权限没有外网权限的,所以想直接走服务器内

zabbix开源监控系列三(自定义key监控nginx_status)

需求场景 lnmp环境 3台nginx 每台nginx服务上有几个虚拟主机,分别跑了不同的域名,准备对主站做nginx status 状态做监控,监控每一台nginx的活动链接数,和总的连接数. 解决方案1 每台nginx server的主配置文件 都配置status模块  代码端如下 location /ngst{   stub_status on;   access_log off;   allow 127.0.0.1;   allow xxx.xxx.xxx.xxx;   deny all

zabbix agent 自定义KEY执行报错

zabbix agent 自定义KEY时,报错"Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all" 环境:Centos 6.4 X64 ,zabbix agent 2.4.2,YUM方式安装 在zabbix_agentd.conf里添加了一条监控项,用于统计系统当前各类TCP的连接数 UserPa

zabbix专题:第九章 自定义key(案例:监控内存,监控nginx状态)

第九章 自定义key 对Linux有兴趣的朋友加入QQ群:476794643 在线交流 本文防盗链:http://zhang789.blog.51cto.com 为什么要自定义KEY 有时候我们想让被监控端执行一个zabbix没有预定义的检测,zabbix的用户自定义参数功能提供了这个方法.我们可以在客户端配置文件zabbix_angentd.conf里面配置UserParameter. 语法如下: UserParameter=key,command 用户自定义参数包含一个key和一个命令,ke

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

zabbix -- 自定义key

为什么要自定义KEY?有时候我们想让被监控端执行一个zabbix没有预定义的检测,zabbix的用户自定义参数功能提供了这个方法.我们可以在客户端配置文件zabbix_angentd.conf里面配置UserParameter. UserParameter=key,command   #语法 用户自定义参数包含一个key和一个命令,key必须整个系统唯一,配置好之后,重启客户端. 然后配置item,在key的位置填上我们自定义的key即可 #命令示例 UserParameter=ping,ech

zabbix自定义key

客户端操作: zabbix 客户端的启动 ./zabbix_agentd -c /usr/local/etc/zabbix_agentd.conf 添加自定义key vi /usr/local/etc/zabbix_agentd.conf 将UnsafeUserParameters从0设置为1,默认是0,即默认自定义key功能是关闭的 在末行添加 UserParameter=io.read,iostat |grep "\<vda\>"|awk '{print $3}' 保存