2016-11-30 1 views
1

Is https://github.com/clojure/java.jmx эквивалентно использованию вариантов запуска JVM (например, -Dcom.sun.management.jmxremote ...)?выложить clojure/java.jmx для инструментов мониторинга

Можем ли мы представить порт JMX в производстве для других инструментов мониторинга (не-clojure)?

Или это только clojure-to-clojure?

Цель состоит в том, чтобы сделать это в Clojure вместо того, чтобы полагаться на сценарии запуска системы, чтобы сделать это, что упрощает настройку/тестирование в моем случае.

ответ

2

Все зависит от того, что вы хотите, и почему вы спрашиваете, может быть применим немного больше контекста: хотите ли вы отслеживать процесс Clojure или вы хотите контролировать процесс Clojure? В каком из этих двух процессов у вас есть авторский контроль?

JMX-клиент

clojure.java.jmx является клиентская библиотека для вызова функций Java JMX из Clojure, либо локально, либо по проводам (JMX над RMI). Это в основном альтернатива программирования GUI, например, JVisualVM/JMC.

сервер JMX

За RMI

Хотя вы всегда можете использовать JMX звонки внутри самого процесса Java, чтобы иметь возможность контролировать процесс Java/Clojure удаленно, вы по-прежнему необходимо включить параметры -Dcom.sun.management.jmxremote. Это заставляет процесс действовать как сервер для запросов JMX по RMI-соединению.

Над HTTP

В качестве альтернативы RMI служит JMX через интерфейс REST с помощью jolokia. RMI, как известно, трудно управлять границами сетевой инфраструктуры, такими как брандмауэры, и защищать через аутентификацию и авторизацию.

Управление JMX over REST намного проще в управлении (исключение прокси-сервера для URL-адресов JMX). Аутентификация и авторизация также могут быть выполнены в вашем текущем веб-стеке.

Однако для этих вызовов REST нет клиента Clojure, но должно быть легко зеркалировать API clojure.java.jmx и генерировать HTTP-запросы.

Разоблачение JMX бобы

Если у вас есть приложение Clojure, которые необходимо подвергать приложений конкретные показатели, которые могут быть считаны через JMX, вам нужно превратить его в JMX MBean. Вы можете обернуть любую карту clojure map в bean-компоненте, и любые обновления этого ref можно увидеть через запрос JMX.

clojure.java.jmx может помочь здесь.

(def my-statistics 
    (ref {:current-sessions 0})) 

(jmx/register-mbean 
    (jmx/create-bean my-statistics) 
    "my.namespace:name=Sessions") 

(defn login 
    [user] 
    ;(do-login user) 
    (dosync (alter my-statistics update :current-sessions inc))) 

(login "foo") 

;just as an example to show you can read the bean through JMX 
(jmx/attribute-names "my.namespace:name=Sessions") 
=> (:current-sessions) 

(jmx/read "my.namespace:name=Sessions" :current-sessions) 
=> 1 

Убедитесь, что карта ссылок имеет ключи строка/символ и «примитивные» значения Java, или вы можете получить исключение для чтения на стороне клиента.

Данные этого компонента затем могут запрашиваться через JMX при условии, что вы установили способ подключения к процессу.

+0

Спасибо, я посмотрю на jolokia. Мой вариант использования - интеграция данных, поэтому он должен вести себя точно так же, как 'jmxremote'. (Не знаю вообще с MBeans, RMI, если честно). Считаете ли вы, что это возможно из Clojure? – nha

+0

Их шаги интеграции включают в себя соединитель JMX: http://docs.datadoghq.com/integrations/java/#installation Да, у них есть агент для основных показателей (память, диск, процессор). И да, идея состоит в том, чтобы настроить агента, контролирующего файлы журнала приложений (не проблема, которую я реконструирую) и в то же время с метрикой JMX (мой вопрос прямо сейчас). – nha

+0

Хотя теперь, когда я думаю об этом, я мог бы просто периодически записывать метрики jmx с помощью Clojure? – nha