É possível descobrir todos os MBeans JMX ou atributos de MBean ou especificar um padrão para a descoberta desses objetos.
É obrigatório entender a diferença entre um MBean e atributos de MBean para a configuração da regra de descoberta. Um MBean é um objeto que pode representar um dispositivo, uma aplicação ou qualquer recurso que precise ser gerenciado.
Por exemplo, existe um MBean que representa um servidor web. Seus atributos são contagem de conexões, contagem de threads, tempo limite de requisição, cache de arquivos http, uso de memória, etc. Expressando esse pensamento em uma linguagem compreensível para humanos, podemos definir uma máquina de café como um MBean que possui os seguintes atributos a serem monitorados: quantidade de água por xícara, consumo médio de água por determinado período de tempo, número de grãos de café necessários por xícara, tempo de reposição de grãos de café e água, etc.
Na configuração da regra de descoberta, selecione JMX agent no campo Tipo.
Duas chaves de item são suportadas para descoberta de objetos JMX - jmx.discovery[] e jmx.get[]:
| Chave do item | |||
|---|---|---|---|
| Valor de retorno | Parâmetros | Comentário | |
| jmx.discovery[<modo de descoberta>,<nome do objeto>,<descrição curta única>] | |||
| Este item retorna um array JSON com macros LLD descrevendo objetos MBean ou seus atributos. | modo de descoberta - um dos seguintes: attributes (recupera atributos do JMX MBean, padrão) ou beans (recupera JMX MBeans) nome do objeto - padrão de nome do objeto (veja a documentação) identificando os nomes dos MBeans a serem recuperados (vazio por padrão, recuperando todos os beans registrados) descrição curta única - uma descrição única que permite múltiplos itens JMX com o mesmo modo de descoberta e nome do objeto no host (opcional) |
Exemplos: → jmx.discovery - recupera todos os atributos do JMX MBean → jmx.discovery[beans] - recupera todos os JMX MBeans → jmx.discovery[attributes,"*:type=GarbageCollector,name=*"] - recupera todos os atributos do coletor de lixo → jmx.discovery[beans,"*:type=GarbageCollector,name=*"] - recupera todos os coletores de lixo Existem algumas limitações sobre quais propriedades MBean este item pode retornar com base nos caracteres limitados que são suportados na geração do nome da macro (os caracteres suportados podem ser descritos pela seguinte expressão regular: A-Z0-9_\.). Portanto, por exemplo, para descobrir propriedades MBean com uma palavra hifenizada ou caracteres não ASCII, você precisa usar jmx.get[]. |
|
| jmx.get[<modo de descoberta>,<nome do objeto>,<descrição curta única>] | |||
| Este item retorna um array JSON com objetos MBean ou seus atributos. Comparado ao jmx.discovery[] ele não define macros LLD. |
modo de descoberta - um dos seguintes: attributes (recupera atributos do JMX MBean, padrão) ou beans (recupera JMX MBeans) nome do objeto - padrão de nome do objeto (veja a documentação) identificando os nomes dos MBeans a serem recuperados (vazio por padrão, recuperando todos os beans registrados) descrição curta única - uma descrição única que permite múltiplos itens JMX com o mesmo modo de descoberta e nome do objeto no host (opcional) |
Ao usar este item, é necessário definir macros de descoberta de baixo nível personalizadas, apontando para valores extraídos do JSON retornado usando JSONPath. | |
Se nenhum parâmetro for passado, todos os atributos MBean do JMX serão solicitados. Não especificar parâmetros para a descoberta JMX ou tentar receber todos os atributos para um intervalo amplo como *:type=*,name=* pode levar a potenciais problemas de desempenho.
Este item retorna um objeto JSON com macros de descoberta de baixo nível descrevendo objetos ou atributos MBean. Por exemplo, na descoberta de atributos MBean (reformatado para maior clareza):
[
{
"{#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"
}
]Na descoberta de MBeans (reformatado para maior clareza):
[
{
"{#JMXDOMAIN}":"java.lang",
"{#JMXTYPE}":"GarbageCollector",
"{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
"{#JMXNAME}":"PS Scavenge"
}
]As seguintes macros são suportadas para uso na regra de descoberta de filtro e protótipos de items, triggers e gráficos:
| Macro | Descrição |
|---|---|
| Descoberta de atributos MBean | |
| {#JMXVALUE} | Valor do atributo. |
| {#JMXTYPE} | Tipo do atributo. |
| {#JMXOBJ} | Nome do objeto. |
| {#JMXDESC} | Nome do objeto incluindo o nome do atributo. |
| {#JMXATTR} | Nome do atributo. |
| Descoberta de MBeans | |
| {#JMXDOMAIN} | Domínio do MBean. (Nome reservado pelo Zabbix) |
| {#JMXOBJ} | Nome do objeto. (Nome reservado pelo Zabbix) |
| {#JMX<key property>} | Propriedades do MBean (como {#JMXTYPE}, {#JMXNAME}) (veja Limitações abaixo). |
Existem algumas limitações associadas ao algoritmo de criação de nomes de macros LLD a partir de nomes de propriedades MBean:
A-Z0-9_\.Considere este exemplo de jmx.discovery (com modo "beans"). O MBean possui as seguintes propriedades definidas (algumas das quais serão ignoradas; veja abaixo):
Como resultado da descoberta JMX, as seguintes macros LLD serão geradas:
As propriedades ignoradas são:
Vamos revisar mais dois exemplos práticos de criação de uma regra LLD com o uso de MBean. Para entender melhor a diferença entre uma regra LLD que coleta MBeans e uma regra LLD que coleta atributos de MBean, por favor, observe a tabela a seguir:
| MBean1 | MBean2 | MBean3 |
| MBean1Attribute1 | MBean2Attribute1 | MBean3Attribute1 |
| MBean1Attribute2 | MBean2Attribute2 | MBean3Attribute2 |
| MBean1Attribute3 | MBean2Attribute3 | MBean3Attribute3 |
Esta regra retornará 3 objetos: a linha superior da coluna: MBean1, MBean2, MBean3.
Para mais informações sobre objetos, consulte a tabela de macros suportadas, seção Descoberta de MBeans.
A configuração da regra de descoberta coletando MBeans (sem os atributos) fica assim:

A chave usada aqui:
Todos os coletores de lixo sem atributos serão descobertos. Como os coletores de lixo têm o mesmo conjunto de atributos, podemos usar os atributos desejados nos protótipos de item da seguinte forma:

As chaves usadas aqui:
A regra de descoberta LLD resultará em algo próximo a isto (itens são descobertos para dois coletores de lixo):

Esta regra retornará 9 objetos com os seguintes campos: MBean1Attribute1, MBean2Attribute1, MBean3Attribute1, MBean1Attribute2, MBean2Attribute2, MBean3Attribute2, MBean1Attribute3, MBean2Attribute3, MBean3Attribute3.
Para mais informações sobre objetos, consulte a tabela de macros suportadas, seção Descoberta de atributos MBean.
A configuração da regra de descoberta coletando atributos MBean é a seguinte:

A chave usada aqui:
Todos os coletores de lixo com um único atributo de item serão descobertos.

Neste caso específico, um item será criado a partir do protótipo para cada atributo MBean. A principal desvantagem desta configuração é que a criação de triggers a partir de protótipos de trigger é impossível, pois há apenas um protótipo de item para todos os atributos. Portanto, esta configuração pode ser usada para coleta de dados, mas não é recomendada para monitoramento automático.
jmx.get[] é semelhante ao item jmx.discovery[], mas não transforma as propriedades do objeto Java em nomes de macros de descoberta de baixo nível e, portanto, pode retornar valores sem as limitações associadas à geração de nomes de macros LLD, como hífens ou caracteres não ASCII.
Ao usar jmx.get[] para descoberta, macros de descoberta de baixo nível podem ser definidas separadamente na aba personalizada de macro LLD da configuração da regra de descoberta, usando JSONPath para apontar para os valores necessários.
Item de descoberta: jmx.get[beans,"com.example:type=*,*"]
Resposta:
[
{
"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"
}
}
]Item de descoberta: jmx.get[attributes,"com.example:type=*,*"]
Resposta:
[
{
"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
}
}
]