6 Découverte des objets JMX
Aperçu
Il est possible de découvrir tous les attributs MBeans ou MBean JMX ou de spécifier un modèle pour la découverte de ces objets.
Il est indispensable de comprendre la différence entre Mbean et les attributs Mbean pour la configuration des règles de découverte. Un MBean est un objet pouvant représenter un périphérique, une application ou toute ressource devant être gérée.
Par exemple, il existe un Mbean qui représente un serveur Web. Ses attributs sont : nombre de connexions, nombre de threads, délai de requête, cache de fichier http, utilisation de la mémoire, etc. En exprimant cette pensée en langage humain compréhensif, nous pouvons définir une machine à café comme un Mbean dont les attributs à surveiller sont les suivants : quantité d'eau par tasse, consommation moyenne d'eau pendant une certaine période, nombre de grains de café requis par tasse, grains de café et temps de remplissage en eau, etc.
Clé d’élément
Dans la configuration de la règle de découverte, sélectionnez Agent JMX dans le champ Type.
Deux clés d’élément sont prises en charge pour la découverte d’objets JMX : jmx.discovery[] et jmx.get[] :
| Clé d’élément | |||
|---|---|---|---|
| Valeur de retour | Paramètres | Commentaire | |
| jmx.discovery[<mode de découverte>,<nom d’objet>,<description courte unique>] | |||
| Cet élément renvoie un tableau JSON contenant des macros LLD décrivant des objets MBean ou leurs attributs. | mode de découverte - l’une des valeurs suivantes : attributes (récupérer les attributs des MBean JMX, par défaut) ou beans (récupérer les MBean JMX) nom d’objet - modèle de nom d’objet (voir la documentation) identifiant les noms des MBean à récupérer (vide par défaut, ce qui récupère tous les beans enregistrés) description courte unique - une description unique permettant d’avoir plusieurs éléments JMX avec le même mode de découverte et le même nom d’objet sur l’hôte (facultatif) |
Exemples : → jmx.discovery - récupérer tous les attributs des MBean JMX → jmx.discovery[beans] - récupérer tous les MBean JMX → jmx.discovery[attributes,"*:type=GarbageCollector,name=*"] - récupérer tous les attributs des collecteurs de déchets → jmx.discovery[beans,"*:type=GarbageCollector,name=*"] - récupérer tous les collecteurs de déchets Il existe certaines limitations concernant les propriétés MBean que cet élément peut renvoyer, en raison du nombre limité de caractères pris en charge pour la génération des noms de macros (les caractères pris en charge peuvent être décrits par l’expression régulière suivante : A-Z0-9_\.). Ainsi, par exemple, pour découvrir des propriétés MBean contenant un mot avec trait d’union ou des caractères non ASCII, vous devez utiliser jmx.get[]. |
|
| jmx.get[<mode de découverte>,<nom d’objet>,<description courte unique>] | |||
| Cet élément renvoie un tableau JSON contenant des objets MBean ou leurs attributs. Comparé à jmx.discovery[], il ne définit pas de macros LLD. |
mode de découverte - l’une des valeurs suivantes : attributes (récupérer les attributs des MBean JMX, par défaut) ou beans (récupérer les MBean JMX) nom d’objet - modèle de nom d’objet (voir la documentation) identifiant les noms des MBean à récupérer (vide par défaut, ce qui récupère tous les beans enregistrés) description courte unique - une description unique permettant d’avoir plusieurs éléments JMX avec le même mode de découverte et le même nom d’objet sur l’hôte (facultatif) |
Lors de l’utilisation de cet élément, il est nécessaire de définir des macros de découverte de bas niveau personnalisées, pointant vers des valeurs extraites du JSON renvoyé à l’aide de JSONPath. | |
Si aucun paramètre n’est transmis, tous les attributs MBean
de JMX sont demandés. Ne pas spécifier de paramètres pour la découverte JMX ou
tenter de recevoir tous les attributs pour une plage étendue comme *:type=*,name=*
peut entraîner des problèmes potentiels de performances.
Utilisation de jmx.discovery
Cet élément renvoie un objet JSON avec des macros de découverte de bas niveau décrivant des objets ou des attributs MBean. Par exemple, dans la découverte des attributs MBean (reformaté pour plus de clarté) :
[
{
"{#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"
}
]
Dans la découverte des MBeans (reformaté pour plus de clarté) :
[
{
"{#JMXDOMAIN}":"java.lang",
"{#JMXTYPE}":"GarbageCollector",
"{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
"{#JMXNAME}":"PS Scavenge"
}
]
Macros prises en charge
Les macros suivantes sont prises en charge pour une utilisation dans le filter de la règle de découverte et les prototypes d'éléments, de déclencheurs et de graphiques :
| Macro | Description |
|---|---|
| Découverte des attributs MBean | |
| {#JMXVALUE} | Valeur d'attribut. |
| {#JMXTYPE} | Type d'attribut. |
| {#JMXOBJ} | Nom de l'objet. |
| {#JMXDESC} | Nom d'objet incluant le nom d'attribut. |
| {#JMXATTR} | Nom d'attribut. |
| Découverte des MBeans | |
| {#JMXDOMAIN} | Domaine MBean. (nom réservé Zabbix) |
| {#JMXOBJ} | Nom de l'objet. (nom réservé Zabbix) |
| {#JMX<key property>} | Propriétés MBean (comme {#JMXTYPE}, {#JMXNAME}) (voir Limitations ci-dessous). |
Limitations
Il existe certaines limitations liées à l’algorithme de création des noms de macros LLD à partir des noms de propriétés MBean :
- les noms d’attribut sont convertis en majuscules
- les noms d’attribut sont ignorés (aucune macro LLD n’est générée) s’ils
contiennent des caractères non pris en charge pour les noms de macros LLD. Les caractères
pris en charge peuvent être décrits par l’expression régulière suivante :
A-Z0-9_\. - si un attribut s’appelle « obj » ou « domain », il sera ignoré en raison du chevauchement avec les valeurs des propriétés Zabbix réservées {#JMXOBJ} et {#JMXDOMAIN}
Veuillez considérer cet exemple de jmx.discovery (avec le mode « beans »). Le MBean a les propriétés suivantes définies (dont certaines seront ignorées ; voir ci-dessous) :
name=test
тип=Type
attributes []=1,2,3
Name=NameOfTheTest
domAin=some
À la suite de la découverte JMX, les macros LLD suivantes seront générées :
- {#JMXDOMAIN} - interne à Zabbix, décrit le domaine du MBean
- {#JMXOBJ} - interne à Zabbix, décrit l’objet MBean
- {#JMXNAME} - créée à partir de la propriété « name »
Les propriétés ignorées sont :
- тип : son nom contient des caractères non pris en charge (non ASCII)
- attributes[] : son nom contient des caractères non pris en charge (les crochets ne sont pas pris en charge)
- Name : il est déjà défini (name=test)
- domAin : c’est un nom réservé de Zabbix
Exemples
Examinons deux autres exemples pratiques de création d’une règle LLD avec l’utilisation de MBean. Pour mieux comprendre la différence entre une règle LLD collectant des MBeans et une règle LLD collectant des attributs de MBean, veuillez consulter le tableau suivant :
| MBean1 | MBean2 | MBean3 |
| MBean1Attribute1 | MBean2Attribute1 | MBean3Attribute1 |
| MBean1Attribute2 | MBean2Attribute2 | MBean3Attribute2 |
| MBean1Attribute3 | MBean2Attribute3 | MBean3Attribute3 |
Exemple 1 : Découverte des MBeans
Cette règle renverra 3 objets : la ligne supérieure de la colonne : MBean1, MBean2, MBean3.
Pour plus d'informations sur les objets, veuillez consulter le tableau des macros prises en charge, section Découverte des MBeans.
La configuration de la règle de découverte collectant les MBeans (sans les attributs) ressemble à ce qui suit :

La clé utilisée ici :
jmx.discovery[beans,"*:type=GarbageCollector,name=*"]
Tous les collecteurs de déchets sans attributs seront découverts. Comme les collecteurs de déchets ont le même ensemble d'attributs, nous pouvons utiliser les attributs souhaités dans les prototypes d'éléments de la manière suivante :

Les clés utilisées ici :
jmx[{#JMXOBJ},CollectionCount]
jmx[{#JMXOBJ},CollectionTime]
jmx[{#JMXOBJ},Valid]
La règle de découverte LLD produira un résultat proche de celui-ci (des éléments sont découverts pour deux collecteurs de déchets) :

Exemple 2 : Découverte des attributs MBean
Cette règle renverra 9 objets avec les champs suivants : MBean1Attribute1, MBean2Attribute1, MBean3Attribute1,MBean1Attribute2,MBean2Attribute2, MBean3Attribute2, MBean1Attribute3, MBean2Attribute3, MBean3Attribute3.
Pour plus d'informations sur les objets, veuillez consulter le tableau des macros prises en charge, section Découverte des attributs MBean.
La configuration de la règle de découverte collectant les attributs MBean ressemble à ce qui suit :

La clé utilisée ici :
jmx.discovery[attributes,"*:type=GarbageCollector,name=*"]
Tous les collecteurs de déchets avec un attribut d'élément unique seront découverts.

Dans ce cas particulier, un élément sera créé à partir du prototype pour chaque attribut MBean. Le principal inconvénient de cette configuration est que la création de déclencheurs à partir de prototypes de déclencheur est impossible, car il n'existe qu'un seul prototype d'élément pour tous les attributs. Cette configuration peut donc être utilisée pour la collecte de données, mais n'est pas recommandée pour la supervision automatique.
Utilisation de jmx.get
jmx.get[] est similaire à l’élément jmx.discovery[], mais il ne
transforme pas les propriétés des objets Java en noms de macros de découverte de bas niveau et
peut donc renvoyer des valeurs sans les limitations qui sont
associées à la génération des noms de macros LLD, telles que les tirets ou les caractères non ASCII.
Lors de l’utilisation de jmx.get[] pour la découverte, les macros de découverte de bas niveau peuvent être
définies séparément dans l’onglet personnalisé macro
LLD de la
configuration de la règle de découverte, en utilisant JSONPath pour pointer vers les
valeurs requises.
Découvrir les MBeans
Elément de découverte : jmx.get[beans,"com.example:type=*,*"]
Réponse :
[
{
"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"
}
}
]
Découvrir les attributs MBean
Elément de découverte : jmx.get[attributes,"com.example:type=*,*"]
Réponse :
[
{
"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
}
}
]