12、Zabbix Low Lever Discovery功能

Low Lever Discovery是什么?看看zabbix官网的解释:

官网地址:

https://www.zabbix.com/documentation/2.2/manual/discovery/low_level_discovery

Low-level discovery provides a way to automatically create items, triggers, and graphs for different entities on a computer. For instance, Zabbix can automatically start monitoring file systems or network interfaces on your machine, without the need to create items for each file system or network interface manually. Additionally it is possible to configure Zabbix to remove unneeded entities automatically based on actual results of periodically performed discovery.

In Zabbix, three types of item discovery are supported out of the box:

  • discovery of file systems;
  • discovery of network interfaces;
  • discovery of SNMP OIDs.

相比较于自动注册和自动发现,low-level discovery更底层点,用于发现item、trigger、graph等等。我们最常用如:filesystem(如/、/home、/proc、C:、D:等),network(eth0,eth1等)

LLD监控,要求Key的返回值为JSON格式。例如:

{
  "data":[
  
  { "{#FSNAME}":"\/",                           "{#FSTYPE}":"rootfs"   },
  { "{#FSNAME}":"\/sys",                        "{#FSTYPE}":"sysfs"    },
  { "{#FSNAME}":"\/proc",                       "{#FSTYPE}":"proc"     },
  { "{#FSNAME}":"\/dev",                        "{#FSTYPE}":"devtmpfs" },
  { "{#FSNAME}":"\/dev\/pts",                   "{#FSTYPE}":"devpts"   },
  { "{#FSNAME}":"\/",                           "{#FSTYPE}":"ext3"     },
  { "{#FSNAME}":"\/lib\/init\/rw",              "{#FSTYPE}":"tmpfs"    },
  { "{#FSNAME}":"\/dev\/shm",                   "{#FSTYPE}":"tmpfs"    },
  { "{#FSNAME}":"\/home",                       "{#FSTYPE}":"ext3"     },
  { "{#FSNAME}":"\/tmp",                        "{#FSTYPE}":"ext3"     },
  { "{#FSNAME}":"\/usr",                        "{#FSTYPE}":"ext3"     },
  { "{#FSNAME}":"\/var",                        "{#FSTYPE}":"ext3"     },
  { "{#FSNAME}":"\/sys\/fs\/fuse\/connections", "{#FSTYPE}":"fusectl"  }
  
  ]
}

注意:定义Key的字符串只能为大写,不能为小写

LLD监控案例


背景:公司的某些阿里云主机上有多个java程序,都需要监控,zabbix自带的“Template JMX Generic”这个监控模板由于key相同的限制,只能监控一个java程序。不能满足需求。所以我们需要利用LLD实现多JMX实例监控。

在做LLD监控之前,首先我们要知道JMX监控项有哪些,如何获取这些监控项的数据?

监控项我们参考zabbix自带的监控模板Template JMX Generic,要获取这些Item的数据可以使用以下方式:

[[email protected] scripts]# java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:12345 | grep java.lang
java.lang:type=Compilation
java.lang:type=ClassLoading
java.lang:type=Memory
java.lang:name=Metaspace,type=MemoryPool
java.lang:name=Eden Space,type=MemoryPool
java.lang:type=Threading
java.lang:name=Survivor Space,type=MemoryPool
java.lang:name=Metaspace Manager,type=MemoryManager
java.lang:type=Runtime
java.lang:name=MarkSweepCompact,type=GarbageCollector
java.lang:name=Compressed Class Space,type=MemoryPool
java.lang:name=CodeCacheManager,type=MemoryManager
java.lang:name=Copy,type=GarbageCollector
java.lang:type=OperatingSystem
java.lang:name=Code Cache,type=MemoryPool
java.lang:name=Tenured Gen,type=MemoryPool

上面这些都是ObjectName,每一个ObjectName都有对应的属性(Attributes)

[[email protected] scripts]# java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:12345 java.lang:type=Memory
Attributes:
 Verbose: Verbose (type=boolean)
 ObjectPendingFinalizationCount: ObjectPendingFinalizationCount (type=int)
 HeapMemoryUsage: HeapMemoryUsage (type=javax.management.openmbean.CompositeData)
 NonHeapMemoryUsage: NonHeapMemoryUsage (type=javax.management.openmbean.CompositeData)
 ObjectName: ObjectName (type=javax.management.ObjectName)
Operations:
 gc: gc
  Parameters 0, return type=void

如果要获取其中一个属性的值,可以用以下方式实现:

[[email protected] scripts]# java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:12345 java.lang:type=Memory HeapMemoryUsage
01/14/2016 05:33:14 +0800 org.archive.jmx.Client HeapMemoryUsage: 
committed: 31670272
init: 16777216
max: 249364480
used: 24961984

利用上面命令就可以获取堆内存的相关信息,然后通过脚本获取需要的信息即可。

在上面的命令中,我们需要知道以下参数,

1、java程序开启的监控端口号

2、ObjectName

3、Attributes

4、附加信息,例如堆内存的committed、init、max、used

但是有些Attributes的值只有一个,例如:  下面查看到的线程的峰值信息,返回结果只有一个

[[email protected] scripts]# java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:12345 java.lang:type=Threading PeakThreadCount
01/14/2016 05:37:47 +0800 org.archive.jmx.Client PeakThreadCount: 31

所以我们各种情况都需要考虑到,下面是监控脚本:

#!/usr/bin/env python
import commands
import sys
import os
java_com=commands.getoutput(‘/usr/bin/which java‘)
com="%s -jar /etc/zabbix/scripts/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:%s ‘%s‘ %s" % (java_com,sys.argv[1],sys.argv[2].replace(‘+‘,‘,‘),sys.argv[3])
output=commands.getoutput(com)
output_list=output.split(‘\n‘)
for _ in output_list:
        if len(output_list) == 1:
                print _.split(‘: ‘)[-1]
        else:
                item = _.split(‘:‘)
                if len(item) > 1 and item[0] == sys.argv[4]:
                        print item[1].strip()

我们要给脚本传递的3个或者4个参数。当输出结果为一行时,我们传递三个参数,当输出结果有多行信息时,我们传递4个参数

分别是监控端口号、ObjectName、Attributes、附加信息(used、max、committed等)

PS:测试时自动发现的脚本没有写,直接写在一个文档内,写成json格式:

{“data":[{"{#PORT}":"12345"},{"{#PORT}":"23456"},{"{#PORT}":"34567"}]}

当然,在测试环境中我的主机上有三个tomcat,分别开启了这三个监控端口

客户端配置文件:

etc/zabbix/zabbix_agentd.d/userparameter_jmx.conf

UserParameter=jmx.port,cat /etc/zabbix/scripts/port.txt
UserParameter=jmx[*],/etc/zabbix/scripts/test2.py $1 "$2" $3 $4

注意:agent端的配置文件/etc/zabbix/zabbix_agentd.conf 开启以下设置:

AllowRoot=1             #以root身份启动zabbix—agent,才有权限执行监控命令
Timeout=30              #客户端超时时间,
UnsafeUserParameters=1

设置好之后需要重启zabbix-agent服务

[[email protected] zabbix_agentd.d]# /etc/init.d/zabbix-agent restart

zabbix-server web端配置

1、创建一个Template

2、创建discovery rule

注意key这里一定要参照这里写

UserParameter=jmx.port,cat /etc/zabbix/scripts/port.txt

UserParameter=jmx[*],/etc/zabbix/scripts/test2.py $1 "$2" $3 $4

3、创建监控项Item  prototypes

注意key的表达式jmx[$1,$2,$3,$4],数据类型一定要注意,单位也要注意,zabbix中默认的容量单位为B,时间单位为毫秒,这些单位不确定的可参考zabbix自带的模板。包括监控的时间间隔。

需要注意的问题:

1、key中的第二个参数,某些的ObjectName(例如:”java.lang:type=MemoryPool,name=CMS Old Gen")带有空格和逗号,导致无法获取到数据,后经查证发现这是一个bug,解决方法:

在脚本中对第二个参数使用replace方法,将web上填写的参数中的”+“号,替换成”,“号。另外在

UserParameter=jmx[*],/etc/zabbix/scripts/test2.py $1 "$2" $3 $4  中将$2用引号引起来。

2、不支持的监控项建议Disable掉,否则在Web端的Queue中会有很多队列堵住。

时间: 2024-12-21 04:32:34

12、Zabbix Low Lever Discovery功能的相关文章

Zabbix监控redis多实例(low level discovery)

对于多实例部署的tomcat.redis等应用,可以利用zabbix的low level discovery功能来实现监控,减少重复操作. 注:Zabbix版本: Zabbix 3.0.2 一.服务端配置 1.创建模板 模板名称: Template_Redis_Monitor 2.创建自动发现规则 给已创建好的模板Template_Redis_Monitor添加自动发现规则. 3.添加监控项原型 从上面截图可以看到,我已经创建了4个,具体如下: 看看其中一个: 再来看看主机关联模板后的监控项:

Zabbix监控Low level discovery实时监控网站URL状态

今天我们来聊一聊Low level discovery这个功能,我们为什么要用到loe level discovery这个功能呢? 很多时候,在使用zabbix监控一些东西,需要对类似于Itens进行添加,这些items具有一些共同特性, 如果说某些特定的参数是变量,而其他设置都一样,例如:一个程序有多个端口,需要多端口进行监控并配置Itmes,还有磁盘分区,·网卡名称等等, 都是具有不确定性,如果我们配置固定的Items的话,会出现无法通用的问题,所以呢,我们需要来了解一下low level 

zabbix 自定义自动发现的key! low level discovery

1 意义和目的,在这里不讨论,只讨论是实现方法 2 学习的前提,你会编写常规的key! 和理解模板,item知识 系统环境 master端: [[email protected] zabbix_agentd.conf.d]# ifconfig  eth0| sed -n 's#.*inet addr:\(.*\) B.*#\1#gp' 192.168.100.10 client端 [[email protected] zabbix]# ifconfig  eth0| sed -n 's#.*in

Zabbix自动化之low level discovery遇到的问题

前言: 话说很久都没有写Zabbix相关的文章,今天来写写Zabbix LLD使用中遇到的问题. 广而告之: 在这里告诉大家一个好消息,本人所写的<Zabbix企业级分布式监控系统>将在8月上旬发布,关注此书的朋友可以加Q群[zabbix企业级分布式监控 271659981 (可申请加入,验证码:Zabbix监控)] 原文链接为新书<Zabbix企业级分布式监控系统>所带的附件部分,托管在github上面,不定期更新更多新内容,欢迎关注,下面正文开始. {        "

zabbix通过自动发现功能实现自动识别网络设备接口

由于之前网络设备不是很多,监控网络设备接口就直接使用模版中的item来实现了,可是现在公司上线了一大批网络设备,如果要每个网络设备都做模板,添加item......那就该废了,于是迫于压力今天来测试使用zabbix的自动发现功能实现自动发现网络设备接口,并且自动获取接口的流量值,生成流量图等功能. 这样的话就能节省大量时间,时间就是生命啊,把时间浪费在枯燥的添加网络接口的工作上就是在浪费生命!好了,废话不多说,进入正题: 首先,在交换机上面配置好snmp协议,为了简单,这里目前使用的是snmp

zabbix应用之discovery批量添加主机并实现自定义主机名

利用zabbix的discovery功能可以实现自动批量添加主机的功能. 下面以自动监控172.16.4.240-250网段的Linux主机为例,步骤如下: 一.客户端安装agent 为网段内的Linux主机安装好zabbix agent,zabbix_agentd.conf正确配置server的IP和端口,启动agent服务. 如果你的操作系统为RHEL或者CentOS推荐使用yum安装方式. 参考官方资料:https://www.zabbix.com/documentation/2.2/ma

zabbix vfs.fs.discovery过滤

vfs.fs.discovery过滤 zabbix对文件系统的监控是通过LLD实现的,zabbix首先通过Discovery rule发现所有的文件系统名称和类型 利用vfs.fs.discovery 自动发现并监控磁盘,然后通过正则表达式过滤不需要的文件系统 zabbix_get -s 127.0.0.1 -k vfs.fs.discovery    //监测出本地的所有文件系统名称和类型 然后通过正则表达式进行过滤不需要的文件系统 1.先定义正则表达式 管理--一般--正则表达式 定义正则表

Zabbix agent自动注册功能实现主机批量监控

Zabbix agent自动注册功能实现主机批量监控 Zabbix auto registration 功能很强大,当每新增一台agent,只需在server添加一个触发器,在agent修改几个参数,就能自动加入监控当中.这功能在批量监控中有莫大作用,如果后续需要增加某项监控,只需要模板中添加item即可. 1.克隆新的模板.创建新的主机组 模板克隆 [组态]à[模板]à手选一个模板à[全克隆] 如果已经做好模板,就直接调用即可:如果没有做好模板,后续要更改的话,最好还是用一个新的模板. 新增主

12.智能快递柜(其他功能)

1.智能快递柜(开篇) 2.智能快递柜(终端篇) 3.智能快递柜(通信篇-HTTP) 4.智能快递柜(通信篇-SOCKET) 5.智能快递柜(通信篇-Server程序) 6.智能快递柜(平台篇) 7.智能快递柜(APP及微信公众号) 8.智能快递柜SDK(联网型锁板) 9.智能快递柜SDK(串口型锁板) 10.智能快递柜(源码下载) 11.智能快递柜(用户寄件) 12.智能快递柜(其他功能) 13.智能快递柜(对接流程) 快递员充值及投件扣费 用户逾期支付 快递员/用户扫码登陆 原文地址:htt