6 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 de item

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 de 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 de LLD descrevendo objetos MBean ou seus atributos. modo de descoberta - um dos seguintes: attributes (recuperar atributos de MBean JMX, padrão) ou beans (recuperar MBeans JMX)
nome do objeto - padrão de nome do objeto (consulte a documentação) que identifica os nomes de MBean 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 - recuperar todos os atributos de MBean JMX
→ jmx.discovery[beans] - recuperar todos os MBeans JMX
→ jmx.discovery[attributes,"*:type=GarbageCollector,name=*"] - recuperar todos os atributos de coletores de lixo
→ jmx.discovery[beans,"*:type=GarbageCollector,name=*"] - recuperar todos os coletores de lixo

Há algumas limitações quanto às propriedades de MBean que este item pode retornar, com base no conjunto limitado de caracteres suportados na geração de nomes de macro (os caracteres suportados podem ser descritos pela seguinte expressão regular: A-Z0-9_\.). Assim, por exemplo, para descobrir propriedades de MBean com palavras separadas por hífen ou caracteres não ASCII, é necessário 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.

Em comparação com jmx.discovery[], ele não define macros de LLD.
modo de descoberta - um dos seguintes: attributes (recuperar atributos de MBean JMX, padrão) ou beans (recuperar MBeans JMX)
nome do objeto - padrão de nome do objeto (consulte a documentação) que identifica os nomes de MBean 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 personalizadas de descoberta de baixo nível, 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 descoberta JMX ou tentar receber todos os atributos para um intervalo amplo como *:type=*,name=* pode levar a possíveis 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 (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"
    }
]
Macros suportadas

As macros a seguir são suportadas para uso no filtro da regra de descoberta e nos 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 do Zabbix)
{#JMXOBJ} Nome do objeto. (nome reservado do Zabbix)
{#JMX<key property>} Propriedades do MBean (como {#JMXTYPE}, {#JMXNAME}) (consulte Limitações abaixo).
Limitações

Existem algumas limitações associadas ao algoritmo de criação de nomes de macros LLD a partir de nomes de propriedades MBean:

  • os nomes dos atributos são convertidos para maiúsculas
  • os nomes dos atributos são ignorados (nenhuma macro LLD é gerada) se consistirem em caracteres não suportados para nomes de macros LLD. Os caracteres suportados podem ser descritos pela seguinte expressão regular: A-Z0-9_\.
  • se um atributo for chamado "obj" ou "domain", eles serão ignorados devido à sobreposição com os valores das propriedades reservadas do Zabbix {#JMXOBJ} e {#JMXDOMAIN}

Considere este exemplo de jmx.discovery (com modo "beans"). O MBean tem as seguintes propriedades definidas (algumas das quais serão ignoradas; veja abaixo):

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

Como resultado da descoberta JMX, as seguintes macros LLD serão geradas:

  • {#JMXDOMAIN} - interna do Zabbix, descrevendo o domínio do MBean
  • {#JMXOBJ} - interna do Zabbix, descrevendo o objeto MBean
  • {#JMXNAME} - criada a partir da propriedade "name"

As propriedades ignoradas são:

  • тип : seu nome contém caracteres não suportados (não-ASCII)
  • attributes[] : seu nome contém caracteres não suportados (colchetes não são suportados)
  • Name : já está definida (name=test)
  • domAin : é um nome reservado do Zabbix
Exemplos

Vamos revisar dois exemplos mais 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, 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 mais informações sobre objetos, consulte a tabela de macros suportadas, na seção Descoberta de MBeans.

A configuração da regra de descoberta que coleta MBeans (sem os atributos) é semelhante à seguinte:

lld\_rule\_mbean.png

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 os atributos desejados nos protótipos de item da seguinte forma:

lld\_rule\_mbean\_prototypes.png

As chaves usadas aqui:

jmx[{#JMXOBJ},CollectionCount] 
jmx[{#JMXOBJ},CollectionTime] 
jmx[{#JMXOBJ},Valid] 

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

discovery\_rule\_mbean\_3.png

Exemplo 2: Descobrindo atributos de MBean

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 de MBean.

A configuração da regra de descoberta que coleta atributos de MBean é a seguinte:

lld\_rule\_mbean\_attr.png

A chave usada aqui:

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

Todos os coletores de lixo com um único atributo de item serão descobertos.

lld\_rule\_mbean\_attr\_prototypes.png

Neste caso específico, um item será criado a partir do protótipo para cada atributo de MBean. A principal desvantagem dessa configuração é que a criação de trigger a partir de protótipos de trigger é impossível, pois há apenas um protótipo de item para todos os atributos. Portanto, essa configuração pode ser usada para coleta de dados, mas não é recomendada para monitoramento automático.

Usando jmx.get

jmx.get[] é semelhante ao item jmx.discovery[], mas não transforma propriedades de objetos Java em nomes de macros de descoberta de baixo nível e, portanto, pode retornar valores sem as limitações que estão associadas à geração de nomes de macros LLD, como hífens ou caracteres não ASCII.

Ao usar jmx.get[] para descoberta, as 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.

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
        }
    }
]