可以discover所有 JMX MBeans或MBean属性,也可以为这些objects的发现 指定模式。
必须理解MBean和MBean属性在发现规则配置中的区别。MBean是一个object, 可以表示设备、应用程序或任何需要被管理的资源。
例如,有一个表示Web服务器的MBean。其 属性包括连接数、线程数、请求超时、http file缓存、memory使用情况等。用人类易于理解的语言表达这一概念, 我们可以将咖啡机定义为MBean,它具有以下需要监控的属性:每杯水量、 特定时间段内的平均耗水量、每杯所需的咖啡豆数量、 咖啡豆和水的补充时间等。
在发现规则 配置中,于类型字段选择JMX agent。
JMX object发现支持两种监控项键 - jmx.discovery[] 和jmx.get[]:
监控项键 | |||
---|---|---|---|
返回值 | 参数 | 注释 | |
jmx.discovery[<discovery mode>,<object name>,<unique short description>] | |||
该监控项返回包含LLD宏的JSON array,用于描述MBean objects或其属性。 | 发现模式 - 以下之一:attributes(获取JMX MBean属性,默认)或beans(获取JMX MBeans) object名称 - 标识要获取的MBean名称的object名称模式(参见documentation)(默认为空,获取所有注册的beans) 唯一简短描述 - 允许在主机上使用相同发现模式和object名称的多个JMX 监控项的唯一描述(可选) |
示例: → jmx.discovery - 获取所有JMX MBean属性 → jmx.discovery[beans] - 获取所有JMX MBeans → jmx.discovery[attributes,"*:type=GarbageCollector,name=*"] - 获取所有垃圾收集器属性 → jmx.discovery[beans,"*:type=GarbageCollector,name=*"] - 获取所有垃圾收集器 由于宏名称生成支持的字符有限(支持的字符可用正则表达式 A-Z0-9_\. 描述),该监控项能返回的MBean属性存在一些限制。例如,要发现带有连字符或非ASCII字符的MBean属性,需使用jmx.get[] 。自Zabbix Java网关3.4起支持。 |
|
jmx.get[<discovery mode>,<object name>,<unique short description>] | |||
该监控项返回包含MBean objects或其属性的JSON array。 与 jmx.discovery[] 相比,它不定义LLD宏。 |
发现模式 - 以下之一:attributes(获取JMX MBean属性,默认)或beans(获取JMX MBeans) object名称 - 标识要获取的MBean名称的object名称模式(参见documentation)(默认为空,获取所有注册的beans) 唯一简短描述 - 允许在主机上使用相同发现模式和object名称的多个JMX 监控项的唯一描述(可选) |
使用此监控项时,需定义自定义低级发现宏,指向使用JSONPath从返回的JSON中提取的值。 自Zabbix Java网关4.4起支持。 |
若未传递参数,将请求JMX中的所有MBean属性。不为JMX发现指定参数或尝试获取广泛范围(如*:type=*,name=*
)的所有属性可能导致性能问题。
该监控项返回一个包含低级别发现宏的JSON object 用于描述MBean objects或属性. 例如, 在发现 MBean属性时(为清晰起见已重新格式化):
[
{
"{#JMXVALUE}":"0",
"{#JMXTYPE}":"java.lang.Long",
"{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
"{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,CollectionCount",
"{#JMXATTR}":"CollectionCount"
},
{
"{#JMXVALUE}":"0",
"{#JMXTYPE}":"java.lang.Long",
"{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
"{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,CollectionTime",
"{#JMXATTR}":"CollectionTime"
},
{
"{#JMXVALUE}":"true",
"{#JMXTYPE}":"java.lang.Boolean",
"{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
"{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,Valid",
"{#JMXATTR}":"Valid"
},
{
"{#JMXVALUE}":"PS Scavenge",
"{#JMXTYPE}":"java.lang.String",
"{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
"{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,Name",
"{#JMXATTR}":"Name"
},
{
"{#JMXVALUE}":"java.lang:type=GarbageCollector,name=PS Scavenge",
"{#JMXTYPE}":"javax.management.ObjectName",
"{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
"{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,ObjectName",
"{#JMXATTR}":"ObjectName"
}
]
在发现MBeans时(为清晰起见已重新格式化):
[
{
"{#JMXDOMAIN}":"java.lang",
"{#JMXTYPE}":"GarbageCollector",
"{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
"{#JMXNAME}":"PS Scavenge"
}
]
以下宏可用于发现规则 过滤器 以及监控项、触发器和图形的原型中:
宏 | 描述 |
---|---|
Discovery of MBean attributes | |
{#JMXVALUE} | 属性值。 |
{#JMXTYPE} | 属性类型。 |
{#JMXOBJ} | object名称。 |
{#JMXDESC} | 包含属性名称的object名称。 |
{#JMXATTR} | 属性名称。 |
Discovery of MBeans | |
{#JMXDOMAIN} | MBean域。(Zabbix保留名称) |
{#JMXOBJ} | object名称。(Zabbix保留名称) |
{#JMX<key property>} | MBean属性(如{#JMXTYPE}, {#JMXNAME})(参见下面的限制)。 |
从MBean属性名称生成LLD宏名称的算法存在以下限制:
属性名称会被转换为大写
如果属性名称包含LLD宏名不支持的字符,则会被忽略(不生成LLD宏)。支持的字符可以用以下正则表达式描述: A-Z0-9_\.
如果属性名为"obj"或"domain",它们将被忽略
because of the overlap with the values of the reserved Zabbix properties {#JMXOBJ} and {#JMXDOMAIN} (supported since Zabbix 3.4.3.)
请看这个jmx.discovery(使用"beans"模式)的示例。MBean定义了以下属性(其中部分属性会被忽略,见下文):
JMX发现过程将生成以下LLD宏:
被忽略的属性包括:
让我们再回顾两个使用MBean创建LLD规则的实际示例。为了更好地理解收集MBeans的LLD规则与收集MBean属性的LLD规则之间的区别,请查看以下表格:
MBean1 | MBean2 | MBean3 |
MBean1Attribute1 | MBean2Attribute1 | MBean3Attribute1 |
MBean1Attribute2 | MBean2Attribute2 | MBean3Attribute2 |
MBean1Attribute3 | MBean2Attribute3 | MBean3Attribute3 |
此规则将返回3个objects: 列的Top行: MBean1, MBean2, MBean3.
有关objects的更多信息,请参阅支持的宏 表格中的MBeans发现部分。
收集MBeans(不含属性)的发现规则配置如下所示:
此处使用的键:
所有不带属性的垃圾收集器都将被发现。由于 垃圾收集器具有相同的属性集,我们可以通过以下方式在监控项原型中使用所需属性:
此处使用的键:
LLD发现规则将产生类似以下的结果(为两个垃圾收集器发现了监控项):
此规则将返回包含以下字段的9个objects: MBean1Attribute1, MBean2Attribute1, MBean3Attribute1, MBean1Attribute2, MBean2Attribute2, MBean3Attribute2, MBean1Attribute3, MBean2Attribute3, MBean3Attribute3.
有关objects的更多信息,请参阅支持的宏 表格中的MBean属性发现部分。
收集MBean属性的发现规则配置如下所示:
此处使用的键:
所有具有单个监控项属性的垃圾收集器都将被 发现。
在此特定情况下,将为每个 MBean属性从原型创建一个监控项。此配置的主要缺点是 由于所有属性只有一个监控项原型,因此无法从触发器原型创建触发器。 因此此设置可用于数据 收集,但不推荐用于自动监控。
jmx.get[]
类似于 jmx.discovery[]
监控项,但它不会将 Java object 属性转换为低级发现宏名称, 因此可以返回不受限制影响的数值,这些限制与LLD宏名称生成相关,例如连字符或非ASCII字符。
当使用 jmx.get[]
进行发现时,可以在发现规则配置的自定义 发现规则 选项卡中单独定义低级发现宏, 通过JSONPath指向所需的值。
发现 监控项: jmx.get[beans,"com.example:type=*,*"]
响应:
[
{
"object": "com.example:type=Hello,data-src=data-base,ключ=значение",
"domain": "com.example",
"properties": {
"data-src": "data-base",
"ключ": "значение",
"type": "Hello"
}
},
{
"object": "com.example:type=Atomic",
"domain": "com.example",
"properties": {
"type": "Atomic"
}
}
]
发现 监控项: jmx.get[attributes,"com.example:type=*,*"]
响应:
[
{
"object": "com.example:type=*",
"domain": "com.example",
"properties": {
"type": "Simple"
}
},
{
"object": "com.zabbix:type=yes,domain=zabbix.com,data-source=/dev/rand,ключ=значение,obj=true",
"domain": "com.zabbix",
"properties": {
"type": "Hello",
"domain": "com.example",
"data-source": "/dev/rand",
"ключ": "значение",
"obj": true
}
}
]