JMX#

CedrusData Catalog позволяет управлять поведение процесса и экспортировать различные метрики через интерфейс Java Management Extensions (JMX).

Настройка#

По умолчанию JMX доступен только для JMX-клиентов, запущенных на том же хосте, что и CedrusData Catalog.

Для работы с JMX с удаленных JMX-клиентов необходимо явно указать порт, на котором CedrusData Catalog запустит JMX агента:

jmx.remote-port=1099

Если вы хотите работать с JMX по протоколу RMI, необходимо также задать порт RMI с помощью параметра конфигурации jmx.remote-rmi-port. Данный порт может иметь такое же значение, как и jmx.remote-port, или отличаться от последнего:

jmx.remote-port=1099
jmx.remote-rmi-port=1099

Если задан параметр jmx.remote-rmi-port, вы также должны обязательно задать параметр JVM com.sun.management.jmxremote.rmi.port в файле etc/jvm.config. Оба параметры должны иметь одинаковые значения.

Параметр каталога jmx.remote-port семантически эквивалентен параметру JVM com.sun.management.jmxremote.port, а параметр каталога jmx.remote-rmi-port семантически эквивалентен параметру JVM com.sun.management.jmxremote.rmi.port. Если вы запускаете каталог с данными параметрами JVM (файл etc/jvm.config), то соответствующие параметры конфигурации каталога должны иметь идентичные значения. В противном случае запуск каталога будет завершен с ошибкой.

Например, если вы добавили следующую конфигурацию в etc/jvm.config:

-Dcom.sun.management.jmxremote.port=1099
-Dcom.sun.management.jmxremote.rmi.port=1100

То в etc/config.properties обязательно должны быть заданы следующие параметры:

jmx.remote-port=1099
jmx.remote-rmi-port=1100

Используйте параметры JVM для конфигурации JMX, если вы хотите задать дополнительную конфигурацию JMX, которая недоступна через etc/config.properties. Например, если вы хотите задать пароль для подключения к JMX, или включить SSL. Полный список параметров JVM для JMX доступен в документации Java.

Полезные MBean#

Ниже приведен список некоторых часто используемых MBean.

Описание экспортируемых MBean#

Название

Описание

cedrusdata.catalog.api.ApiStats

Статистика обращения к каталогу через API.

cedrusdata.catalog.api.IcebergApiStats

Статистика обращения к каталогу через протокол Iceberg REST Catalog.

cedrusdata.catalog.core.user.UserServiceCache

Статистика кэша пользователей.

cedrusdata.catalog.iceberg.table.IcebergTableMetadataCache

Статистика кэша таблиц Iceberg.

io.airlift.http.server.*

Статистика встроенного HTTP сервера.

org.eclipse.jetty.*

Детальные статистики встроенного HTTP сервера, предоставляемые библиотекой Jetty.

io.airlift.jmx.StackTraceMBean

MBean для получения дампа потоков (thread dump).

java.lang.*

Встроенные MBean для управления JVM.

Пример подключения из JConsole#

JConsole — это встроенная утилита Java, которая позволяет управлять Java-процессами через JMX. Данный пример показывает как подключиться из jconsole к CedrusData Catalog, запущенному в Docker-контейнере.

  1. Убедитесь, что у вас установлен Docker Server, и команда docker не требует sudo

  2. Создайте файл конфигурации config.properties со включенным JMX-агентом:

    data-dir=/data/catalog
    admin-password=${ENV-OPTIONAL:CATALOG_ADMIN_PASSWORD}
    jmx.remote-port=1099
    
  3. Запустите контейнер CedrusData Catalog:

    docker run -d \
        --name example-catalog \
        -p 9080:9080 \
        -p 1099:1099 \
        -v $PWD/config.properties:/etc/catalog/config.properties \
        cr.yandex/crpjtvqf29mpabhmrf1s/cedrusdata-catalog:458-1
    
  4. Запустите JConsole (необходим установленный JDK) и подключитесь к процессу по адресу localhost:1099:

    jconsole localhost:1099
    
  5. (при необходимости) Остановите контейнер и удалите ненужные ресурсы:

    docker rm -f example-catalog   
    rm config.properties