可以对所有JMX MBean或MBean属性进行discover,或者指定用于发现这些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>] | |||
此 监控项 返回一个 JSON array,其中包含描述 MBean objects 或其属性的 LLD 宏。 | 发现模式 - 以下选项之一:attributes(检索 JMX MBean 属性,默认)或 beans(检索 JMX MBean) object 名称 - object 名称模式(参见 documentation),用于标识要检索的 MBean 名称(默认为空,检索所有已注册的 Bean) 唯一简短描述 - 允许在同一 主机 上使用相同发现模式和 object 名称的多个 JMX 监控项 的唯一描述(可选) |
示例: → jmx.discovery - 检索所有 JMX MBean 属性 → jmx.discovery[beans] - 检索所有 JMX MBean → jmx.discovery[attributes,"*:type=GarbageCollector,name=*"] - 检索所有垃圾回收器属性 → jmx.discovery[beans,"*:type=GarbageCollector,name=*"] - 检索所有垃圾回收器 根据宏名称生成中支持的有限字符,此 监控项 可返回的 MBean 属性存在一些限制(支持的字符可通过以下正则表达式描述: A-Z0-9_\. )。因此,例如要发现带有连字符或非 ASCII 字符的 MBean 属性,您需要使用 jmx.get[] 。 |
|
jmx.get[<discovery mode>,<object name>,<unique short description>] | |||
此 监控项 返回一个包含 MBean objects 或其属性的 JSON array。 与 jmx.discovery[] 相比,它不定义 LLD 宏。 |
发现模式 - 以下选项之一:attributes(获取 JMX MBean 属性,默认)或 beans(获取 JMX MBeans) object 名称 - object 名称模式(参见 documentation),用于标识要获取的 MBean 名称(默认为空,获取所有已注册的 beans) 唯一简短描述 - 允许在同一 主机 上使用相同发现模式和 object 名称的多个 JMX 监控项 的唯一描述(可选) |
使用此 监控项 时,需要定义自定义的低级别发现宏,指向通过 JSONPath 从返回的 JSON 中提取的值。 |
::: noteimportant 如果没有传递参数,则所有MBean属性 从 JMX 请求的。不为 JMX 发现指定参数或 尝试接收类似 *:type=*,name=*
这种范围较宽的所有属性 可能导致潜在的性能问题。 仅返回OutputFormat格式要求结果
该 监控项 返回一个 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"
}
]
在 MBean 的自动发现中(为清晰起见已重新格式化):
[
{
"{#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})(参见下面的限制)。 |
通过 JMX 属性名称创建 LLD 宏时存在一些限制:
A-Z0-9_\.
请参考以下 jmx.discovery 示例(使用 "beans" 模式)。MBean 定义了以下属性(其中一些将被忽略;见下文):
JMX 自动发现完成后,将生成以下 LLD 宏:
被忽略的属性包括:
让我们回顾两个更实用的示例,以展示如何使用 MBean 创建 LLD 规则。为了更好地理解收集 MBean 的 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 的更多信息,请参阅 支持的宏 表中的 Discovery of MBean attributes 章节。
用于收集 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
}
}
]