13 ЈМКС надгледње

Преглед

JMX надгледање се може користити за надгледање JMX бројача Јава апликације.

JMX надгледање има изворну подршку у Zabbix-у у облику Zabbix демона који се зове "Zabbix Java мрежни пролаз".

Да би преузео вредност одређеног JMX бројача на домаћину, Zabbix сервер поставља упит за Zabbix ** Java мрежни пролаз**, који заузврат користи API за управљање JMX за даљинско испитивање апликације од интереса.

За више детаља и подешавања погледајте Zabbix Java мрежни пролаз.

Комуникација између Java мрежног пролаза и JMX апликације која се прати не би требало да буде заштитни зид.

Омогућавање даљинског надзора JMX-а за Java апликацију

Java апликацији није потребан никакав додатни софтвер инсталиран, али је потребно покренути са опцијама командне линије наведеним у наставку да би имала подршку за даљинско праћење JMX-а.

Као минимум, ако само желите да почнете надгледањем једноставне Java апликације на локалном домаћину без принудне безбедности, почните са овим опцијама:

 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

Ово чини да Java слуша долазне JMX везе на порту 12345, само са локалног домаћина, и говори јој да не захтева аутентификацију или SSL.

Ако желите да дозволите везе на другом интерфејсу, подесите параметар--Djava.rmi.server.hostname на IP тог интерфејса.

Ако желите да будете строжи у погледу безбедности, на располагању су вам многе друге Java опције. На пример, следећи пример покреће апликацију са свестранијим скупом опција и отвара је на ширу мрежу, а не само на локалном домаћину.

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

Већина (ако не и сва) ових подешавања може се навести у /etc/java-6-openjdk/management/management.properties (или где год да се та датотека налази на вашем систему).

Имајте на уму да ако желите да користите SSL, морате да измените startup.sh скрипту додавањем опција -Djavax.net.ssl.* у Java мрежни пролаз, тако да зна где да пронађе кључеве и складишта поверења.

Погледајте Надгледање и управљање помоћу JMX-а за детаљан опис.

Конфигурисање JMX интерфејса и ставки у Zabbix корисничком интерфејсу

Са Java мрежним пролазом, сервером који зна где да га пронађе и Java апликацијом која је покренута са подршком за даљинско праћење JMX-а, време је да се конфигуришу интерфејси и ставке у Zabbix ГУИ.

Конфигурисање 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[] откриће ниског нивоа) ставка.
JMX endpoint Можете одредити прилагођену JMX крајњу тачку. Уверите се да параметри везе крајње тачке JMX одговарају JMX интерфејсу. Ово се може постићи коришћењем макроа {HOST.*} као што је урађено у подразумеваној крајњој тачки JMX.
{HOST.*} макрои и кориснички макрои су подржани.
User name Наведите корисничко име (до 255 знакова), ако сте конфигурисали аутентификацију у својој Јава апликацији.
Корисник макрои су подржани.
* Password* Наведите лозинку (до 255 знакова), ако сте конфигурисали аутентификацију у вашој Јава апликацији.
Макрои корисника су подржани.

Ако желите да надгледате Boolean бројач који је или "тачно" или "нетачно", онда наведете тип информација као "Нумерички (непотписани)" и изаберете корак пре обраде "Boolean на децимални" на картици Претходна обрада. Сервер ће чувати логичке вредности као 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 мрежни пролаз. Ако не, онда то можете да урадите у складу са документацијом.
  • Zabbix сервер и Java мрежни пролаз су инсталирани са префиксом/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 tcp00 127.0.0.1:99990.0.0.0:*LISTEN10148/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" значи да Java мрежни пролаз не зна како се ради са наведеним протоколом. То се може поправити креирањем датотеке ~/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-ap ixnio-api xnio-nio

а затим извршите команду:

за и у $(cat ~/needed_modules.txt); do find /opt/jboss-eap-6.4 -iname "${i}*.jar" -exec cp '{}' /usr/local/sbin/zabbix_java/lib/ ; ; готово

Дакле, Java мрежни пролаз ће имати све потребне модуле за рад са jmx-remoting. Оно што је преостало је да поново покренете Java мрежни пролаз, сачекајте мало и ако сте урадили све како треба, погледајте да подаци за праћење JMX почињу да пристижу у Zabbix (погледајте такође: Најновији подаци).