5 发现JMX对象

概述

这能够发现 全部JMX MBeans或MBean属性,或指定用于发现这些对象的模式。

必须了解发现规则配置的Mbean和Mbean属性之间的区别。 MBean是一个对象,可以表示设备,应用程序或需要管理的任何资源。例如一个代表web-server的Mbean。 它的属性是连接数,线程数,请求超时,http文件缓存,内存使用等。 用普通人的语言理解这个想法的话,我们可以将咖啡机定义为Mbean,它具有以下被监控的点:每杯水量,一段时间内的平均水消耗量,每杯所需的咖啡豆数量,咖啡豆和补水时间等。

键值

发现规则 配置中, 在类型区域选择 JMX agent

该键值为:

  1. jmx.discovery[<discovery mode>,<object name>]
  • 发现模式 - 其中之一:属性(检索JMX MBean属性,默认值)或beans(检索JMX MBeans)

  • 对象名称 - 辨别要检索的MBean名称的对象名称模式(默认为空,检索所有已注册的beans)。

你可以参考 使用手册里的 ObjectName以获取指定对象名称模式的选项。

如果未传递任何参数,则意味着请求JMX中的所有MBean属性。

不指定JMX发现的参数或尝试接收范围广泛的所有属性 *:type=*,name=* 可能会导致潜在的性能问题。

此监控项从Zabbix Java gateway 3.4开始支持。

键值举例:

  1. jmx.discovery #检索所有JMX MBean属性
  2. jmx.discovery[beans] #检索所有 JMX MBeans
  3. jmx.discovery[attributes,"*:type=GarbageCollector,name=*"] #检索所有垃圾收集器属性
  4. jmx.discovery[beans,"*:type=GarbageCollector,name=*"] #检索所有垃圾收集器

此监控项反馈一个JSON对象。例如,在发现MBean属性(为清楚起见重新格式化):

  1. {
  2. "data":[
  3. {
  4. "{#JMXVALUE}":"0",
  5. "{#JMXTYPE}":"java.lang.Long",
  6. "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
  7. "{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,CollectionCount",
  8. "{#JMXATTR}":"CollectionCount"
  9. },
  10. {
  11. "{#JMXVALUE}":"0",
  12. "{#JMXTYPE}":"java.lang.Long",
  13. "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
  14. "{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,CollectionTime",
  15. "{#JMXATTR}":"CollectionTime"
  16. },
  17. {
  18. "{#JMXVALUE}":"true",
  19. "{#JMXTYPE}":"java.lang.Boolean",
  20. "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
  21. "{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,Valid",
  22. "{#JMXATTR}":"Valid"
  23. },
  24. {
  25. "{#JMXVALUE}":"PS Scavenge",
  26. "{#JMXTYPE}":"java.lang.String",
  27. "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
  28. "{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,Name",
  29. "{#JMXATTR}":"Name"
  30. },
  31. {
  32. "{#JMXVALUE}":"java.lang:type=GarbageCollector,name=PS Scavenge",
  33. "{#JMXTYPE}":"javax.management.ObjectName",
  34. "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
  35. "{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,ObjectName",
  36. "{#JMXATTR}":"ObjectName"
  37. }
  38. ]
  39. }

在发现MBean属性(为清楚起见重新格式化):

  1. {
  2. "data":[
  3. {
  4. "{#JMXDOMAIN}":"java.lang",
  5. "{#JMXTYPE}":"GarbageCollector",
  6. "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
  7. "{#JMXNAME}":"PS Scavenge"
  8. }
  9. ]
  10. }

支持宏

以下宏支持在发现规则中的过滤器,监控项,触发器和图表的原型中的应用:

描述
发现MBean属性
{#JMXVALUE}属性值。
{#JMXTYPE}属性类型。
{#JMXOBJ}对象名称。
{#JMXDESC}对象名称,包括属性名称。
{#JMXATTR}属性名称。
发现MBeans
{#JMXDOMAIN}MBean domain. (Zabbix保留名称)
{#JMXOBJ}Object name. (Zabbix保留名称)
{#JMX<key property>}MBean properties (like {#JMXTYPE}, {#JMXNAME}). 定义由以下算法从MBean属性名创建的MBean属性名时需要注意的一些重要事项:

属性名大小写改为大写;
属性名大小写被忽略(不生成LLD宏),如果它包含不支持的字符。支持的字符可以用以下正则表达式来描述:“A-Z0-9_.”;
如果一个属性名被称为“obj“或”domain“,它将被Zabbix属性{#JMXOBJ}和{#JMXDOMAIN}的值所替换(自Zabbix 3.4.3以来支持)。

请考虑 jmx.discovery (以 “beans” 模式) 的例子. MBean定义了以下属性:

  1. name=test
  2. тип=Type
  3. attributes []=1,2,3
  4. Name=NameOfTheTest
  5. domAin=some

作为JMX发现的结果,将生成以下LLD宏:

  • {#JMXDOMAIN} - Zabbix内部,描述了MBean领域

  • {#JMXOBJ} - Zabbix内部,描述了MBean对象

  • {#JMXNAME} - 从 “name” 属性创建

忽略的属性是:

  • тип : 它的名字内包含无法识别的字母 (non-ASCII)

  • attributes[] : 它的名字内包含无法识别的字母 (不支持方括号)

  • Name : 它已经被定义了 (name=test)

  • domAin : 这是Zabbix的保留名称

让我们回顾两个使用Mbean创建LLD规则的实际示例。 要了解收集Mbeans的LLD规则与收集Mbean属性的LLD规则之间的区别,请查看下表:

MBean1MBean2MBean3
MBean1Attribute1MBean2Attribute1MBean3Attribute1
MBean1Attribute2MBean2Attribute2MBean3Attribute2
MBean1Attribute3MBean2Attribute3MBean3Attribute3

以LLD规则收集Mbeans

规则将会反馈三个对象: 该列的顶行: MBean1, MBean2, MBean3.

有关对象的更多信息,请参阅 支持宏 表格, 发现MBean 部分。

收集Mbeans(无属性)的发现规则配置如下所示:

5 发现JMX对象 - 图1

使用键值:

  1. jmx.discovery[beans,"*:type=GarbageCollector,name=*"]

能发现所有没有属性的垃圾收集器。 由于垃圾收集器具有相同的属性集,我们可以通过以下方式在项原型中使用所需的属性:

5 发现JMX对象 - 图2

使用键值:

  1. jmx[{#JMXOBJ},CollectionCount]
  2. jmx[{#JMXOBJ},CollectionTime]
  3. jmx[{#JMXOBJ},Valid]

LLD发现规则将导致与此接近的内容(为两个垃圾收集器发现的监控项):

5 发现JMX对象 - 图3

LLD规则收集MBean属性

这条规则将会反馈9个对象:MBean1Attribute1, MBean2Attribute1, Mbean3Attribute1,MBean1Attribute2,MBean2Attribute2, Mbean3Attribute2, MBean1Attribute3, MBean2Attribute3, Mbean3Attribute3.

更多有关于对象的信息,请参考 支持宏 表格, 发现MBean属性 部分.

收集MBean属性的发现规则配置如以下所示:

5 发现JMX对象 - 图4

使用键值:

  1. jmx.discovery[attributes,"*:type=GarbageCollector,name=*"]

将发现具有单个项属性的所有垃圾收集器。

5 发现JMX对象 - 图5

在这种特殊情况下,将从原型为每个MBean属性创建一个监控项。这种配置的主要缺点是从触发器原型的触发器创建是不可能的,因为所有属性只有一个监控项原型。因此,此设置可用于数据收集,但不建议用于自动监控。