This is a translation of the original English documentation page. Help us make it better.

13 JMX felügyelet

Áttekintés

A JMX felügyelet használható a Java JMX számlálóinak figyelésére Alkalmazás.

A JMX monitorozás natív támogatással rendelkezik a Zabbixban, Zabbix formájában a "Zabbix Java gateway" nevű démon, amelyet a Zabbix 2.0 óta vezettek be.

Egy adott JMX számláló értékének lekérése egy gazdagépen, Zabbix a szerver lekérdezi a Zabbix Java átjárót, amely viszont a JMX menedzsment API az érdeklődésre számot tartó pályázat távolról lekérdezésére.

További részletekért és a beállításért lásd a Zabbix Java gateway szakaszban.

::: megjegyzés figyelmeztetés Kommunikáció a Java átjáró és a megfigyelt között A JMX alkalmazást nem szabad tűzfallal ellátni. :::

Enabling remote JMX monitoring for Java application

A Java application does not need any additional software installed, but it needs to be started with the command-line options specified below to have support for remote JMX monitoring.

As a bare minimum, if you just wish to get started by monitoring a simple Java application on a local host with no security enforced, start it with these options:

java \
       -Dcom.sun.management.jmxremote \
       -Dcom.sun.management.jmxremote.port=12345 \
       -Dcom.sun.management.jmxremote.authenticate=false \
       -Dcom.sun.management.jmxremote.ssl=false \
       -Dcom.sun.management.jmxremote.registry.ssl=false \
       -jar /usr/share/doc/openjdk-6-jre-headless/demo/jfc/Notepad/Notepad.jar

This makes Java listen for incoming JMX connections on port 12345, from local host only, and tells it not to require authentication or SSL.

If you want to allow connections on another interface, set the -Djava.rmi.server.hostname parameter to the IP of that interface.

If you wish to be more stringent about security, there are many other Java options available to you. For instance, the next example starts the application with a more versatile set of options and opens it to a wider network, not just local host.

java \
       -Djava.rmi.server.hostname=192.168.3.14 \
       -Dcom.sun.management.jmxremote \
       -Dcom.sun.management.jmxremote.port=12345 \
       -Dcom.sun.management.jmxremote.authenticate=true \
       -Dcom.sun.management.jmxremote.password.file=/etc/java-6-openjdk/management/jmxremote.password \
       -Dcom.sun.management.jmxremote.access.file=/etc/java-6-openjdk/management/jmxremote.access \
       -Dcom.sun.management.jmxremote.ssl=true \
       -Dcom.sun.management.jmxremote.registry.ssl=true \
       -Djavax.net.ssl.keyStore=$YOUR_KEY_STORE \
       -Djavax.net.ssl.keyStorePassword=$YOUR_KEY_STORE_PASSWORD \
       -Djavax.net.ssl.trustStore=$YOUR_TRUST_STORE \
       -Djavax.net.ssl.trustStorePassword=$YOUR_TRUST_STORE_PASSWORD \
       -Dcom.sun.management.jmxremote.ssl.need.client.auth=true \
       -jar /usr/share/doc/openjdk-6-jre-headless/demo/jfc/Notepad/Notepad.jar

Most (if not all) of these settings can be specified in /etc/java-6-openjdk/management/management.properties (or wherever that file is on your system).

Note that if you wish to use SSL, you have to modify startup.sh script by adding -Djavax.net.ssl.* options to Java gateway, so that it knows where to find key and trust stores.

See Monitoring and Management Using JMX for a detailed description.

JMX felületek és elemek konfigurálása a Zabbix előtérben

Futó Java-átjáróval, a szerverrel, amely tudja, hol találja meg, és egy Java-val alkalmazás elindult a távoli JMX felügyelet támogatásával, itt az ideje a Zabbix GUI felületeinek és elemeinek konfigurálásához.

JMX interfész konfigurálása

Először hozzon létre egy JMX-típusú interfészt a kívánt gazdagépen.

Minden kötelező beviteli mező piros csillaggal van jelölve.

JMX ügynök elem hozzáadása

Minden érdeklődő JMX számlálóhoz hozzá kell adni egy JMX ügynök elemet csatolva ehhez a felülethez.

Az alábbi képernyőképen látható kulcs azt mondja jmx["java.lang:type=Memory","HeapMemoryUsage.used"].

Minden kötelező beviteli mező piros csillaggal van jelölve.

Azok a mezők, amelyek konkrét információkat igényelnek a JMX-elemekhez:

Típus Itt állítsa be a JMX ügynököt.
Key A jmx[] elemkulcs három paramétert tartalmaz:
objektumnév - egy MBean objektumneve
attribútumnév - MBean attribútumnév opcionális összetett elemmel pontokkal elválasztott adatmezőnevek
egyedi rövid leírás – egyedi leírás, amely lehetővé teszi több JMX-elemet ugyanazzal az objektumnévvel és attribútumnévvel a gazdagépen (opcionális)
A JMX-elemekkel kapcsolatos további részleteket lásd alább kulcsok.
A Zabbix 3.4 óta az MBeans és MBean attribútumokat egy jmx.discovery[] low-level discovery elem használatával fedezheti fel.
JMX végpont Egyéni JMX végpontot is megadhat. Győződjön meg arról, hogy a JMX végpont csatlakozási paraméterei megegyeznek a JMX felülettel. Ez a {HOST.*} makrók használatával érhető el, ahogy az az alapértelmezett JMX végpontban is történik.
Ez a mező a 3.4.0 óta támogatott. {HOST.*} makrók és felhasználói makrók támogatottak.
Felhasználónév Adja meg a felhasználónevet, ha beállította a hitelesítést a Java alkalmazásban.
A felhasználói makrók támogatottak.
Password Adja meg a jelszót, ha beállította a hitelesítést a Java alkalmazásban.
A felhasználói makrók támogatottak.

Ha egy logikai számlálót szeretne figyelni, amely vagy "igaz", vagy "false", akkor adja meg az információ típusát "Numerikus (előjel nélküli)" és válassza ki a "Logiai tizedesjegyig" előfeldolgozási lépést az Előfeldolgozásban lapon. A szerver a logikai értékeket 1-ként vagy 0-ként tárolja.

JMX elemkulcsok részletesebben

Egyszerű tulajdonságok

Az MBean objektumnév nem más, mint egy karakterlánc, amelyet Ön a sajátjában definiál Java alkalmazás. Az attribútumnév viszont több is lehet összetett. Ha egy attribútum primitív adattípust ad vissza (egész szám, a string stb.) nincs miért aggódni, a kulcs így fog kinézni ez:

jmx[com.example:Type=Hello,weight]

Ebben a példában az objektum neve "com.example:Type=Hello", attribútum a név "súly", és valószínűleg a visszaadott érték típusa "Numeric (úszó)".

Összetett adatokat visszaadó attribútumok

Bonyolultabbá válik, ha az attribútum összetett adatokat ad vissza. Például: az attribútum neve „alma”, és hash-t ad vissza paramétereit reprezentálja, mint a "súly", "szín" stb. A kulcsa lehet így néz ki:

jmx[com.example:Type=Hello,alma.súly]

Így választja el az attribútum nevét és a hash kulcsot az a pont szimbólum. Ugyanígy, ha egy attribútum beágyazott összetett adatokat ad vissza, a a részek ponttal vannak elválasztva:

jmx[com.example:Type=Hello,gyümölcsök.alma.súly]
Táblázatos adatokat visszaadó attribútumok

A táblázatos adatattribútumok egy vagy több összetett attribútumból állnak. Ha az attribútumnév paraméterben ilyen attribútum van megadva, akkor ez az elemérték visszaadja az attribútum teljes szerkezetét JSON formátum. Az egyes elemek értékei a táblázatos adatokon belül attribútum előfeldolgozással lekérhető.

Példa táblázatos adatattribútumra:

 jmx[com.example:type=Hello,foodinfo]

Elem értéke:

[
         {
           "a": "alma",
           "b": "banán",
           "c": "cseresznye"
         },
         {
           "a": "krumpli",
           "b": "saláta",
           "c": "hagyma"
         }
       ]
Probléma a pontokkal

Eddig jó. De mi van akkor, ha egy attribútumnév vagy egy hash kulcs pontot tartalmaz szimbólum? Íme egy példa:

jmx[com.example:Type=Hello,all.fruits.apple.weight]

Az egy probléma. Hogyan mondjuk el Zabbixnak, hogy az attribútum neve "all.fruits", nem csak "minden"? Hogyan lehet megkülönböztetni egy pontot, amely része a név az attribútum nevét és a hash kulcsokat elválasztó ponttól?

A 2.0.4 előtt a Zabbix Java átjáró nem tudta kezelni ezeket helyzetek és a felhasználók NEM TÁMOGATOTT tételekkel maradtak. 2.0.4 óta ez lehetséges, mindössze annyit kell tennie, hogy elkerülje a pontokat, amelyek részét képezik a név fordított perjellel:

jmx[com.example:Type=Hello,all\.fruits.apple.weight]

Ugyanígy, ha a hash kulcs tartalmaz egy pontot, akkor elkerülje azt:

jmx[com.example:Type=Hello,all\.fruits.apple.total\.weight]
Más problémák

Az attribútum nevében szereplő fordított perjel karaktert meg kell szökni:

jmx[com.example:type=Hello,c:\\documents]

A JMX elemkulcsban lévő egyéb speciális karakterek kezeléséhez lásd: az elemkulcs formátuma section.

Valójában ez minden. Boldog JMX megfigyelést!

Nem primitív adattípusok

A Zabbix 4.0.0 óta lehetőség van egyéni MBeans visszatérővel dolgozni nem primitív adattípusok, amelyek felülírják a toString() metódust.

Using custom endpoint with JBoss EAP 6.4

Custom endpoints allow working with different transport protocols other than the default RMI.

To illustrate this possibility, let's try to configure JBoss EAP 6.4 monitoring as an example. First, let's make some assumptions:

  • You have already installed Zabbix Java gateway. If not, then you can do it in accordance with the documentation.
  • Zabbix server and Java gateway are installed with the prefix /usr/local/
  • JBoss is already installed in /opt/jboss-eap-6.4/ and is running in standalone mode
  • We shall assume that all these components work on the same host
  • Firewall and SELinux are disabled (or configured accordingly)

Let's make some simple settings in zabbix_server.conf:

JavaGateway=127.0.0.1
       StartJavaPollers=5

And in the zabbix_java/settings.sh configuration file (or zabbix_java_gateway.conf):

START_POLLERS=5

Check that JBoss listens to its standard management port:

$ netstat -natp | grep 9999
       tcp        0      0 127.0.0.1:9999          0.0.0.0:*               LISTEN      10148/java

Now let's create a host with JMX interface 127.0.0.1:9999 in Zabbix.

As we know that this version of JBoss uses the JBoss Remoting protocol instead of RMI, we may mass update the JMX endpoint parameter for items in our JMX template accordingly:

service:jmx:remoting-jmx://{HOST.CONN}:{HOST.PORT}

Let's update the configuration cache:

$ /usr/local/sbin/zabbix_server -R config_cache_reload

Note that you may encounter an error first.

"Unsupported protocol: remoting-jmx" means that Java gateway does not know how to work with the specified protocol. That can be fixed by creating a ~/needed_modules.txt file with the following content:

jboss-as-remoting
       jboss-logging
       jboss-logmanager
       jboss-marshalling
       jboss-remoting
       jboss-sasl
       jcl-over-slf4j
       jul-to-slf4j-stub
       log4j-jboss-logmanager
       remoting-jmx
       slf4j-api
       xnio-api
       xnio-nio</pre>

and then executing the command:

$ for i in $(cat ~/needed_modules.txt); do find /opt/jboss-eap-6.4 -iname ${i}*.jar -exec cp {} /usr/local/sbin/zabbix_java/lib/ \; ; done

Thus, Java gateway will have all the necessary modules for working with jmx-remoting. What's left is to restart the Java gateway, wait a bit and if you did everything right, see that JMX monitoring data begin to arrive in Zabbix (see also: Latest data).