13 ЈМКС надгледње
Преглед
JMX надгледање се може користити за надгледање JMX бројача Јава апликације.
JMX надгледање има изворну подршку у Zabbix-у у облику Zabbix демона који се зове "Zabbix Java мрежни пролаз".
Да би преузео вредност одређеног JMX бројача на домаћину, Zabbix сервер поставља упит за Zabbix Java мрежни пролаз, који заузврат користи API за управљање JMX за даљинско испитивање апликације од интереса.
За више детаља и подешавања погледајте Zabbix Java мрежни пролаз.
Комуникација између Java мрежног пролаза и JMX апликације која се прати не би требало да буде заштитни зид.
Омогућавање удаљеног JMX праћења за Java апликацију
Java апликацији није потребан никакав додатни софтвер, али мора се покренути помоћу опција командне линије наведених у наставку да би имала подршку за удаљено JMX праћење.
Као минимум, ако желите да почнете са праћењем једноставне Јава апликације на локалном хосту без примењене безбедности, покрените је са овим опцијама:
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 /путања/до/ваше/апликације.jar
Ово омогућава Јави да слуша долазне ЈМX везе на порту 12345, само са локалног хоста, и говори јој да не захтева аутентификацију или SSL.
Ако желите да дозволите везе на другом интерфејсу, подесите параметар -Djava.rmi.server.hostname на IP адресу тог интерфејса.
Ако желите да будете строжији у погледу безбедности, доступне су вам многе друге Јава опције. На пример, следећи пример покреће апликацију са свестранијим скупом опција и отвара је ка широј мрежи, не само локалном хосту.
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 /путања/до/ваше/апликације.jar
Већина (ако не и сва) ових подешавања може се навести у
$JRE/lib/management/management.properties (или где год се та
датотека налази на вашем систему).
Имајте на уму да ако желите да користите SSL, морате да измените скрипту startup.sh
додавањем опција -Djavax.net.ssl.* у Java gateway, тако да зна
где да пронађе складишта кључева и поверења.
Погледајте Праћење и управљање коришћењем JMX-а за детаљан опис.
Конфигурисање JMX интерфејса и ставки у Zabbix корисничком интерфејсу
Са Java мрежним пролазом, сервером који зна где да га пронађе и Java апликацијом која је покренута са подршком за даљинско праћење JMX-а, време је да се конфигуришу интерфејси и ставке у Zabbix GUI.
Конфигурисање JMX интерфејса
Почињете креирањем интерфејса типа JMX на домаћину од интереса.

Сва обавезна поља за унос су означена црвеном звездицом.
Додавање ставке JMX агента
За сваки JMX бројач који вас занима додајете ставку JMX агент прикључену на тај интерфејс.\
Кључ на снимку екрана испод каже
jmx["java.lang:type=Memory","HeapMemoryUsage.used"].

Сва обавезна поља за унос су означена црвеном звездицом.
Поља која захтевају специфичне информације за JMX ставке су:
| Type | Поставите JMX агент овде. |
| Key | Кључ ставке jmx[] садржи три параметра:назив објекта - назив објекта MBean-а назив атрибута - назив атрибута MBean-а са опционим називима сложених поља података раздвојеним тачкама јединствени кратак опис - јединствени опис који дозвољава више JMX ставки са истим називом објекта и називом атрибута на хосту (опционо) Погледајте доле за више детаља о JMX кључевима ставки. MBean-ове и MBean атрибуте можете открити користећи ставку jmx.discovery[] low-level discovery. |
| JMX endpoint | Можете навести прилагођену JMX крајњу тачку. Уверите се да параметри повезивања JMX крајње тачке одговарају JMX интерфејсу. Ово се може постићи коришћењем макроа {HOST.*} као што је урађено у подразумеваној JMX крајњој тачки. {HOST.*} macros и кориснички макрои су подржани. |
| User name | Наведите корисничко име (до 255 знакова), ако сте конфигурисали аутентификацију на вашој Java апликацији. Кориснички макрои су подржани. |
| Password | Наведите лозинку (до 255 знакова), ако сте конфигурисали аутентификацију на вашој Java апликацији. Кориснички макрои су подржани. |
Ако желите да пратите булов бројач који је или "тачно" или "нетачно", онда наводите тип информација као "Нумерички (непотписан)" и изаберите корак претходне обраде „Болово у децимално“ на картици Претходна обрада. Сервер ће чувати булове вредности као 1 или 0, респективно.
JMX кључеви ставки детаљније
Једноставни атрибути
Име MBean објекта није ништа друго до стринг који дефинишете у својој Java апликацији. Име атрибута, с друге стране, може бити сложеније. У случају да атрибут враћа примитивни тип података (цео број, стринг итд.) нема разлога за бригу, кључ ће изгледати овако:
jmx[com.example:Type=Hello,weight]
У овом примеру име објекта је "com.example:Type=Hello", име атрибута је "тежина", а тип враћене вредности би вероватно требало да буде "Нумерички(float)".
Атрибути који враћају сложене податке
Постаје компликованије када ваш атрибут враћа сложене податке. На пример: име вашег атрибута је "јабука" и враћа хеш који представља његове параметре, као што су "тежина", "боја" итд. Ваш кључ може изгледати овако:
jmx[com.example:Type=Hello,apple.weight]
Овако се име атрибута и хеш кључ одвајају коришћењем адот симбола. На исти начин, ако атрибут враћа угнежђене сложене податке, делови су раздвојени тачком:
jmx[com.example:Type=Hello,fruits.apple.weight]
Атрибути који враћају табеларне податке
Табеларни атрибути података се састоје од једног или више композитних атрибута. Ако је такав атрибут наведен у параметру имена атрибута, онда ће ова вредност ставке вратити комплетну структуру атрибута у JSON формату. Вредности појединачних елемената унутар табеларног атрибута података могу се преузети коришћењем претходне обраде. Пример атрибута табеларних података:
jmx[com.example:type=Hello,foodinfo]
Item value:
[
{
"a": "apple",
"b": "banana",
"c": "cherry"
},
{
"a": "potato",
"b": "lettuce",
"c": "onion"
}
]
Проблем са тачкама
До сада је добро. Али шта ако име атрибута или хеш кључ садржи симбол тачке? Ево примера:
jmx[com.example:Type=Hello,all.fruits.apple.weight]
То је проблем. Како рећи Zabbix-у да је име атрибута "све.воће", а не само "све"? Како разликовати тачку која је део имена од тачке која раздваја име атрибута и хеш кључеве?
Ово је могуће, све што треба да урадите је да побегнете од тачака које су део имена са обрнутом косом цртом:
jmx[com.example:Type=Hello,all.fruits.apple.weight]
На исти начин, ако ваш хеш кључ садржи тачку, избегавате је:
jmx[com.example:Type=Hello,all.fruits.apple.total.weight]
Остала питања
Обрнуту косу црту у називу атрибута треба избацити:
jmx[com.example:type=Hello,c:\documents]
За руковање било којим другим специјалним знаковима у JMX кључу ставке, погледајте формат кључа ставкеодељак.
Ово је заправо све што је потребно. Срећан JMX надгледање!
Непримитивни типови података
Могуће је радити са прилагођеним MBeans-овима који враћају непримитивне типове података, који замењују метод toString().
Коришћење прилагођене крајње тачке са JBoss EAP 6.4
Прилагођене крајње тачке омогућавају рад са различитим транспортним протоколима, осим подразумеваног RMI.
Да бисмо илустровали ову могућност, покушајмо да конфигуришемо JBoss EAP 6.4 праћење као пример. Прво, направимо неке претпоставке:
- Већ сте инсталирали Zabbix Java gateway. Ако нисте, онда можете то да урадите у складу са документацијом.
- Zabbix сервер и Java gateway су инсталирани са префиксом
/usr/local/ - JBoss је већ инсталиран у
/opt/jboss-eap-6.4/и ради у самосталном режиму - Претпоставићемо да све ове компоненте раде на истом хосту
- Заштитни зид и SELinux су онемогућени (или конфигурисани у складу са тим)
Хајде да направимо нека једноставна подешавања у zabbix_server.conf:
JavaGateway=127.0.0.1
StartJavaPollers=5
И у конфигурационом фајлу zabbix_java/settings.sh (или
zabbix_java_gateway.conf):
START_POLLERS=5
Проверите да ли JBoss слуша свој стандардни порт за управљање:
$ netstat -natp | grep 9999
tcp 0 0 127.0.0.1:9999 0.0.0.0:* LISTEN 10148/java
Сада хајде да направимо хост са JMX интерфејсом 127.0.0.1:9999 у Zabbix-у.

Пошто знамо да ова верзија JBoss-а користи JBoss Remoting протокол уместо RMI-ја, можемо масовно ажурирати JMX параметар крајње тачке за ставке у нашем JMX шаблону у складу са тим:
service:jmx:remoting-jmx://{HOST.CONN}:{HOST.PORT}

Хајде да ажурирамо кеш конфигурације:
/usr/local/sbin/zabbix_server -R config_cache_reload
Имајте на уму да прво можете наићи на грешку.

"Неподржани протокол: remoting-jmx" значи да Јава гејтвеј не зна како да ради са наведеним протоколом. То се може поправити креирањем датотеке ~/needed_modules.txt са следећим садржајем:
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
а затим извршавањем команде:
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/ \; ; завршено
На тај начин, Java gateway ће имати све потребне модуле за рад са jmx-remoting-ом. Преостаје да поново покренете Јава гејтвеј, мало сачекате и ако сте све урадили како треба, видите да подаци о праћењу JMX-а почињу да стижу у Zabbix (видети такође: Најновији подаци).