5 Descoberta de objetos JMX
Visão geral
É possível descobrir todos JMX MBeans ou atributos MBean ou para especificar um padrão para a descoberta desses objetos.
É obrigatório entender a diferença entre um MBean e um MBean atributos para configuração de regras de descoberta. Um MBean é um objeto que pode representar um dispositivo, um aplicativo ou qualquer recurso que precise ser gerenciou.
Por exemplo, existe um MBean que representa um servidor web. Seu atributos são contagem de conexão, contagem de threads, tempo limite de solicitação, http cache de arquivos, uso de memória, etc. linguagem abrangente 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 um determinado período de tempo, número de grãos de café necessários por xícara, grãos de café e tempo de recarga de água, etc.
Chave do item
Em descoberta regra configuração, selecione Agente JMX no campo Tipo.
Duas chaves de item são suportadas para descoberta de objeto 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 (recuperar atributos MBean JMX, padrão) ou beans (recuperar JMX MBeans) nome do objeto - padrão de nome do objeto (consulte documentação) identificando o Nomes MBean a serem recuperados (vazios por padrão, recuperando todos os beans registrados) descrição curta única - uma descrição exclusiva que permite vários itens JMX com o mesmo modo de descoberta e nome de objeto no host (opcional) |
Exemplos : → jmx.discovery - recupera todos os atributos 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 ao que Propriedades MBean que este item pode retornar com base em caracteres limitados que são suportados na geração de nome de macro (os caracteres suportados podem ser descritos pela seguinte expressão regular: A-Z0-9_\.). Assim, por exemplo, para descobrir propriedades MBean com uma palavra hifenizada ou caracteres não ASCII, você precisa usar jmx.get[].Suportado desde o Zabbix Java gateway 3.4. |
|
| 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 com jmx.discovery[], ele não define macros LLD. |
modo de descoberta - um dos seguintes : attributes (recuperar atributos JMX MBean, padrão) ou beans (recuperar JMX MBeans) nome do objeto - padrão de nome do objeto (consulte [documentação](https://docs.oracle.com/ javase/7/docs/api/javax/management/ObjectName.html)) identificando os nomes MBean a serem recuperados (vazios por padrão, recuperando todos os beans registrados) descrição curta única - uma descrição única que permite vários itens JMX com o mesmo modo de descoberta e nome de 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. br>Suportado desde o Zabbix Java gateway 4.4. |
|
::: não importante
Se nenhum parâmetro for passado, todos os atributos MBean
do JMX são solicitados. Não especificando parâmetros para descoberta JMX ou
tentando receber todos os atributos para um amplo intervalo como *:type=*,name=*
pode levar a potenciais problemas de desempenho.
:::
Usando jmx.discovery
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 (reformatados 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}":"Contagem de Coleção"
},
{
"{#JMXVALUE}":"0",
"{#JMXTYPE}":"java.lang.Long",
"{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
"{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,CollectionTime",
"{#JMXATTR}":"Hora da Coleção"
},
{
"{#JMXVALUE}":"true",
"{#JMXTYPE}":"java.lang.Boolean",
"{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
"{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,Valid",
"{#JMXATTR}":"Válido"
},
{
"{#JMXVALUE}":"Limpeza PS",
"{#JMXTYPE}":"java.lang.String",
"{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
"{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,Name",
"{#JMXATTR}":"Nome"
},
{
"{#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}":"Nome do Objeto"
}
]
Na descoberta de MBeans (reformatado para maior clareza):
[
{
"{#JMXDOMAIN}":"java.lang",
"{#JMXTYPE}":"Coletor de Lixo",
"{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
"{#JMXNAME}":"Limpeza PS"
}
]
Macros compatíveis
As seguintes macros têm suporte para uso na regra de descoberta filtro e protótipos de itens, gatilhos e gráficos:
| Macro | Descrição |
|---|---|
| Descoberta de atributos MBean | |
| {#JMXVALUE} | Valor do atributo. |
| {#JMXTYPE} | Tipo de atributo. |
| {#JMXOBJ} | Nome do objeto. |
| {#JMXDESC} | Nome do objeto incluindo o nome do atributo. |
| {#JMXATTR} | Nome do atributo. |
| Descoberta de MBeans | |
| {#JMXDOMAIN} | domínio MBean. (Nome reservado Zabbix) |
| {#JMXOBJ} | Nome do objeto. (Nome reservado Zabbix) |
| {#JMX<propriedade da chave>} | Propriedades MBean (como {#JMXTYPE}, {#JMXNAME}) (consulte Limitações abaixo). |
Limitações
Existem algumas limitações associadas ao algoritmo de criação de LLD nomes de macro de nomes de propriedade MBean:
- os nomes dos atributos são alterados para maiúsculas
- nomes de atributos são ignorados (nenhuma macro LLD é gerada) se eles
consistem em caracteres não suportados para nomes de macro LLD. Compatível
caracteres podem ser descritos pela seguinte expressão regular:
A-Z0-9_\. - se um atributo for chamado de "obj" ou "domínio" ele será ignorado por causa da sobreposição com os valores do Zabbix reservado propriedades {#JMXOBJ} e {#JMXDOMAIN} (suportado desde o Zabbix 3.4.3.)
Por favor, considere este exemplo jmx.discovery (com modo "beans"). MBean tem as seguintes propriedades definidas:
nome=teste
тип=Tipo
atributos []=1,2,3
Nome=NomeDoTeste
domínio=algum
Como resultado da descoberta JMX, as seguintes macros LLD serão gerado:
- {#JMXDOMAIN} - Zabbix interno, descrevendo o domínio do MBean
- {#JMXOBJ} - Zabbix interno, descrevendo o objeto MBean
- {#JMXNAME} - criado a partir da propriedade "name"
As propriedades ignoradas são:
- тип : seu nome contém caracteres não suportados (não ASCII)
- attribute[] : seu nome contém caracteres não suportados (quadrado colchetes não são suportados)
- Nome: já está definido (nome=teste)
- domAin : é um nome reservado do Zabbix
Exemplos
Vamos revisar mais dois exemplos práticos de criação de uma regra LLD com o uso do Mbean. Para entender a diferença entre a coleta de uma regra LLD Mbeans e uma regra LLD coletando melhor os atributos Mbean, por favor, dê uma olhada veja a tabela a seguir:
| MBean1 | MBean2 | MBean3 |
| MBean1Attribute1 | MBean2Attribute1 | MBean3Attribute1 |
| MBean1Attribute2 | MBean2Attribute2 | MBean3Attribute2 |
| MBean1Attribute3 | MBean2Attribute3 | MBean3Attribute3 |
Exemplo 1: Descobrindo Mbeans
Esta regra retornará 3 objetos: a linha superior da coluna: MBean1, MBean2, MBean3.
Para obter mais informações sobre objetos, consulte suportado macros tabela, seção Descoberta de MBeans.
Configuração da regra de descoberta coletando Mbeans (sem os atributos) se parece com o seguinte:

A chave usada aqui:
jmx.discovery[beans,"*:type=GarbageCollector,name=*"]
Todos os coletores de lixo sem atributos serão descobertos. Como Os coletores de lixo têm o mesmo conjunto de atributos, podemos usar atributos em protótipos de itens da seguinte maneira:

As chaves usadas aqui:
jmx[{#JMXOBJ},CollectionCount]
jmx[{#JMXOBJ},Hora da Coleção]
jmx[{#JMXOBJ},Válido]
A regra de descoberta de LLD resultará em algo próximo a isso (os itens são descoberto por dois coletores de lixo):

Exemplo 2: Descobrindo atributos do Mbean
Esta regra retornará 9 objetos com os seguintes campos: MBean1Atributo1, MBean2Atributo1, Mbean3Attribute1,MBean1Attribute2,MBean2Attribute2, Mbean3Attribute2, MBean1Attribute3, MBean2Attribute3, Mbean3Attribute3.
Para obter mais informações sobre objetos, consulte suportado macros tabela, seção Descoberta de atributos MBean.
A configuração da regra de descoberta coletando atributos Mbean se parece com o Segue:

A chave usada aqui:
jmx.discovery[attributes,"*:type=GarbageCollector,name=*"]
Todos os coletores de lixo com um único atributo de item serão descoberto.

Neste caso em particular, um item será criado a partir do protótipo para cada Atributo MBean. A principal desvantagem dessa configuração é que acionar a criação de protótipos de gatilho é impossível, pois há apenas um item protótipo para todos os atributos. Portanto, esta configuração pode ser usada para dados coleta, mas não é recomendado para monitoramento automático.
Usando jmx.get
jmx.get[] é semelhante ao item jmx.discovery[], mas não é
transformar propriedades de objetos Java em nomes de macros de descoberta de baixo nível e
portanto, pode retornar valores sem limitações que são
associado à geração de nome de macro LLD, como hífens ou não ASCII
personagens.
Ao usar jmx.get[] para descoberta, macros de descoberta de baixo nível podem ser
definido separadamente no personalizado LLD
macro da guia
configuração de regra de descoberta, usando JSONPath para apontar para o
valores.
Descobrindo MBeans
Item de descoberta: jmx.get[beans,"com.example:type=*,*"]
Resposta:
[
{
"object": "com.example:type=Hello,data-src=data-base,ключ=значение",
"domínio": "com.exemplo",
"propriedades": {
"data-src": "base de dados",
"ключ": "значение",
"tipo": "Olá"
}
},
{
"object": "com.example:type=Atomic",
"domínio": "com.exemplo",
"propriedades": {
"tipo": "Atômica"
}
}
]
Descobrindo os atributos do MBean
Item de descoberta: jmx.get[attributes,"com.example:type=*,*"]
Resposta:
[
{
"object": "com.example:type="*",
"domínio": "com.exemplo",
"propriedades": {
"tipo": "Simples"
}
},
{
"object": "com.zabbix:type=yes,domain=zabbix.com,data-source=/dev/rand,ключ=значение,obj=true",
"domínio": "com.zabbix",
"propriedades": {
"tipo": "Olá",
"domínio": "com.exemplo",
"fonte de dados": "/dev/rand",
"ключ": "значение",
"obj": verdadeiro
}
}
]