5 Java gateway

Обзор

Начиная с Zabbix 2.0 появился новый демон Zabbix, называемый "Zabbix Java gateway", обеспечивающий нативную поддержку мониторинга JMX приложений. Zabbix Java gateway - это демон написанный на языке Java. Когда Zabbix сервер хочет знать значение конкретного JMX счетчика узла сети, он опрашивает Zabbix Java gateway, который используя API управления JMX опрашивает интересующее удаленное приложение. Приложению не требуется никакого дополнительного программного обеспечения, оно просто должно быть запущено с опцией командной строки -Dcom.sun.management.jmxremote.

Java gateway принимает входящие подключения от Zabbix сервера или прокси и может быть использован только как "пассивный прокси". Но в отличии от Zabbix прокси, Java gateway может использоваться с Zabbix прокси (тогда как один Zabbix прокси не может работать через другой Zabbix прокси). Доступ к каждому Java gateway настраивается непосредственно в файле конфигурации Zabbix сервера или прокси, таким образом только один Java gateway может быть настроен на Zabbix сервере или Zabbix прокси. Если у узла сети есть элементы данных типа JMX агент и элементы данных других типов, то только элементы данных JMX агент будут запрошены через Java gateway.

Когда элемент данных должен быть обновлен через Java gateway, Zabbix сервер или прокси подключается к Java gateway и запрашивает значение, Java gateway в свою очередь запрашивает это значение и возвращает серверу или прокси. Таким образом, Java gateway никакие значения не кэширует.

У Zabbix сервера и прокси есть специальный тип процессов, которые подключается к Java gateway, их количество настраивается опцией StartJavaPollers. Внутренне, Java gateway запускается несколькими потоками, настраиваемыми опцией START_POLLERS. На стороне сервера, если соединение занимает более чем Timeout секунд, оно будет завершено, но Java gateway может оставаться занят получением значения JMX счетчика. Чтобы решить эту проблему, Java gateway начиная с Zabbix 2.0.15, Zabbix 2.2.10 и Zabbix 2.4.5 поддерживают опцию TIMEOUT, позволяющую указать время ожидания сетевых операций JMX.

Zabbix сервер и прокси будут пытаться максимально объединить запросы к одной цели JMX (зависит от интервалов обновления элементов данных) и отправлять их в Java Gateway за одно подключение для лучшей производительности.

Рекомендуется выставить значение StartJavaPollers меньшим или равным START_POLLERS, в противном случае могут возникнуть ситуации, когда потоков Java gateway может не хватить для обслуживания входящих запросов; в этом случае Java gateway воспользуется ThreadPoolExecutor.CallerRunsPolicy, что означает, что основной поток будет обслуживать входящий запрос и временно не сможет принимать любые новые запросы.

Разделы ниже рассказывают о том как получить и запустить Zabbix Java gateway, как настроить Zabbix сервер (или Zabbix прокси) для использования Zabbix Java gateway в мониторинге JMX, и как настроить элементы данных Zabbix в Zabbix веб-интерфейсе, которые соответствуют конкретным JMX счетчикам.

1 Получение Java gateway

Имеется два способа получения Java gateway. Первый - это загрузка пакета Java gateway с веб-сайта Zabbix и второй - компиляция Java gateway из исходных кодов.

1.1 Загрузка с веб-сайта Zabbix

Пакеты Zabbix Java gateway (для RHEL, Debian, Ubuntu) доступны для загрузки на странице http://www.zabbix.com/download.php.

1.2 Сборка исходных кодов

Для того, чтобы скомпилировать Java gateway, сначала выполните скрипт ./configure с опцией --enable-java. Желательно указать опцию --prefix для запроса пути установки отличную от умолчания /usr/local, потому что при установке Java gateway будет создано целое дерево каталогов, а не только один исполняемый файл.

$ ./configure --enable-java --prefix=$PREFIX

Для компиляции и сборки Java gateway в JAR файл, выполните make. Обратите внимание, что для этого шага исполняемые файлы javac и jar должны присутствовать в пути.

$ make

Теперь у вас имеется файл zabbix-java-gateway-$VERSION.jar в src/zabbix_java/bin. Если вам удобно запускать Java gateway из src/zabbix_java в каталога пакета, то вы можете перейти к инструкциям по настройке и запуску Java gateway. В противном случае убедитесь в наличии у вас достаточных привилегий для выполнения make install.

$ make install

2 Обзор файлов из поставки Java gateway

Независимо от того как вы получили Java gateway, в итоге у вас должен быть набор скриптов, JAR файлом и файлами конфигурации в папке $PREFIX/sbin/zabbix_java. Назначение этих файлов изложено ниже.

bin/zabbix-java-gateway-$VERSION.jar

Собственно JAR файл Java gateway.

lib/logback-core-0.9.27.jar
       lib/logback-classic-0.9.27.jar
       lib/slf4j-api-1.6.1.jar
       lib/android-json-4.3_r3.1.jar

Зависимости Java gateway: Logback, SLF4J, и библиотека Android JSON.

lib/logback.xml
       lib/logback-console.xml

Файлы конфигурации для Logback.

shutdown.sh
       startup.sh

Скрипты для удобства запуска и остановки Java gateway.

settings.sh

Файл конфигурации, который используется вышеупомянутыми скриптами запуска и остановки.

3 Настройка и запуск Java gateway

По умолчанию, Java gateway слушает порт 10052. Если вы планируете работу Java gateway на другом порту, то вы можете указать его в скрипте settings.sh. Смотрите описание файла конфигурации Java gateway для получения сведений о том как указать эту и другие опции.

Выполнив настройки, вы можете запустить Java gateway, выполнив скрипт запуска:

$ ./startup.sh

Точно так же, если вам более не требуется Java gateway, выполните скрипт завершения работы для остановки Java gateway:

$ ./shutdown.sh

Обратите внимание, что в отличии от сервера и прокси, Java gateway легок и не требует наличия базы данных.

4 Настройка сервера для использования с Java gateway

Теперь, когда Java gateway запущен, вы должны указать Zabbix серверу где искать Zabbix Java gateway. Чтобы это сделать, укажите параметры JavaGateway и JavaGatewayPort в файле конфигурации сервера. Если же узел сети на котором работает JMX приложение наблюдается через Zabbix прокси, то параметры соединения указываются в файле конфигурации прокси.

JavaGateway=192.168.3.14
       JavaGatewayPort=10052

По умолчанию, сервер не запускает процессы связанные с мониторингом JMX. Если же вы хотите использовать этот тип мониторинга, то вам нужно указать количество экземпляров Java поллеров. Вы можете это сделать таким же способом как и изменение количества поллеров и трапперов.

StartJavaPollers=5

Не забудьте перезапустить сервер или прокси после того как закончите изменение настроек.

5 Отладка Java gateway

В случае возникновения каких-либо проблем с Java gateway или в случае, если сообщение об ошибке элемента данных в веб-интерфейсе недостаточно информативно, вы можете обратиться к файлу журнала Java gateway.

По умолчанию, Java gateway записывает журнал в файл /tmp/zabbix_java.log с уровнем журналирования "инфо". Бывает, что этой информации недостаточно и требуется информация уровня журналирования "отладка". Чтобы увеличить уровень журналирования, отредактируйте файл lib/logback.xml и измените атрибут "level" тега <root> на "debug":

<root level="debug">
         <appender-ref ref="FILE" />
       </root>

Обратите внимание, что в отличии от Zabbix сервера или Zabbix прокси, вам не нужно перезапускать Zabbix Java gateway после изменения файла logback.xml - изменения в logback.xml будут применены автоматически. Когда вы завершите отладку, вы можете вернуть уровень журналирования обратно в "info".

Если вы хотите записывать журнал в другой файл или в совершенно другую среду такую как база данных, настройте файл logback.xml в соответствии с вашими потребностями. Обратитесь к Руководству по Logback для получения более подробных сведений.

Иногда для отладки полезно запустить Java gateway как консольное приложение, а не как демон. Чтобы это сделать, закомментируйте переменную PID_FILE в settings.sh. Если PID_FILE не указан, скрипт startup.sh запускает Java gateway как консольное приложение, при этом Logback использует файл lib/logback-console.xml, который не только выводит журнал в консоль, но и имеет уровень журналирования "debug".

В заключение, отметим, поскольку Java gateway использует SLF4J для журналирования, вы можете заменить Logback выбранным вами фреймворком, поместим соответствующий JAR файл в каталог lib. Обратитесь к Руководство по SLF4J для получения более подробных сведений.