TracingPlugin#
Описание плагина#
Плагин поддерживает стандарт OpenTelemetry. Плагин предназначен для:
формирования трассировки при следующих событиях:
поступление сообщения на брокер/уход сообщения с брокера(при вычитке сообщения consumer)
перемещение сообщения в expire, dead-letter - очереди
перемещение сообщения с одного брокера на другой в кластерном соединении при его дистрибуции
перемещение или удаление сообщения вручную (через веб-клиент Артемиса)
перемещение сообщения с одного брокера на другой в кластерном соединении при live-only scaleDown
формирования заголовка в сообщении о времени, когда сообщение покидает брокер(при его вычитке клиентом consumer)
Для трассировка необходима настройка - ru.sbt.ss.artemis.plugin.message.TracingPlugin
Подключение плагина#
Для подключения плагина к Artemis необходимо:
сформировать конфигурационный файл
tracingPlugin.conf, в котором должны быть указаны настройки плагинасформировать конфигурационный файл OpenTelemetry
tracing.jsonв broker_instance_dir/etc/broker.xml необходимо добавить настройки плагина в разделе
broker-pluginsв classpath Artemis( e.g.:broker_instance_dir/lib) положить logger-plugin-*.jar-файл
Настройки плагина#
Для корректной работы плагина, необходимо на брокере в разделе address-settings установить настройку enable-ingress-timestamp в значение true.
При включении этой настройки, у всех сообщений, попадающих на сервер, формируется заголовок _AMQ_INGRESS_TIMESTAMP, который используется в плагине.
<address-settings>
...
<address-setting match="#">
...
<enable-ingress-timestamp>true</enable-ingress-timestamp>
...
</address-setting>
...
</address-settings>
Настройки плагина, связанные с формированием трассировки#
Настройка |
Возможные значения |
Комментарии |
|---|---|---|
MODE |
ON or OFF |
Настройка включения/отключения плагина(если настройка не указана, то дефолтное значение - ON) |
MESSAGE_ID_HEADER_NAMES |
|
Имена заголовков сообщений в которых могут лежать идентификаторы сообщений при их отправке с клиента на брокер* |
HEADER_NAMES_FOR_LOG |
|
Имена заголовков сообщений по которым будут выведены значения заголовков в поле лога |
BLACK_LIST_ADDRESSES |
|
Имена адресов по которым не будут выведены логи по событиям трассировки*** |
WHITE_LIST_ADDRESSES |
|
Имена адресов по которым будут выведены логи по событиям трассировки**** |
DURABLE_HEADER_NAME |
|
Имя заголовка в котором находится признак персистентности сообщения***** |
OTEL_CONFIG_FILE |
|
Путь к файлу конфигурации OpenTelemetry |
* - идентификатор сообщения может быть указан в заголовке сообщения при его отправке на брокер. Если ни в одном из заголовков идентификатор не был найдены, то идентификатор ищется в поле userId внутреннего формата сообщения Artemis. В случае если и в userId отсутствует идентификатор, то идентификатор сообщения:UNDEFINED
** - в лог будут выведены только заголовки, которые присутствуют в сообщении
*** - по дефолту в лог трассировки не выводятся сообщения для следующих адресов: activemq.management, activemq.notifications и адресов с префиксом: $.artemis.internal., notif. Если настройка не указана или значение настройки является пустая строка, то фильтрация по BLACK_LIST_ADDRESSES отсутствует. Настройка поддерживает wildcard-синтаксис для адресов
**** - Если настройка не указана или значение настройки является пустая строка, то фильтрация по WHITE_LIST_ADDRESSES отсутствует. Настройка поддерживает wildcard-синтаксис для адресов
***** - если настройка не указана, то используется имя заголовка durable
Настройки плагина по формированию заголовка сообщения, в котором указывается время ухода сообщения с брокера#
Настройка |
Возможные значения |
Комментарии |
|---|---|---|
TIMESTAMP_HEADERS_MODE |
ON_FOR_ALL |
Включено формирование заголовка для всех сообщений, присутствующих на брокере* |
ON_IF_EXIST |
Включено формирование заголовка, если во входящем сообщении есть хотя бы один из заголовок указанных в |
|
OFF |
Выключено формирование заголовка |
|
FROM_SERVER_TIMESTAMP_HEADER_NAME |
Любое строковое значение |
Имя заголовка сообщения в котором указывается время, когда сообщение покинуло брокер |
|
Пример конфигурационного файла плагина tracingPlugin.conf#
tracingPlugin: {
OTEL_CONFIG_FILE: "./tracing.json" // обязательная настройка
MODE: "ON or OFF" // необязательная настройка
MESSAGE_ID_HEADER_NAMES: "headerName_1, headerName_2" // необязательная настройка
HEADER_NAMES_FOR_LOG: "headerName" // необязательная настройка
BLACK_LIST_ADDRESSES: "address_1, address_2, address 3" // необязательная настройка
WHITE_LIST_ADDRESSES: "address_21, address_22, address_33"// необязательная настройка
DURABLE_HEADER_NAME: "_HDR_DURABLE_" // необязательная настройка
TIMESTAMP_HEADERS_MODE: "ON_FOR_ALL" // необязательная настройка
FROM_SERVER_TIMESTAMP_HEADER_NAME: "TIMESTAMP_FROM_SERVER"// Обязательная настройка для режимов ON_FOR_ALL/ON_IF_EXIST
}
При изменении настроек конфигурационного файла и его сохранении, будут применены обновленные настройки плагина
Пример настройки плагина в broker.xml#
<broker-plugins>
<broker-plugin class-name="ru.sbt.ss.artemis.plugin.message.TracingPlugin">
<property key="CONFIG_PATH" value="path_to_tracingPlugin_configuration" /> <!-- ОБЯЗАТЕЛЬНЫЙ путь до конфигурационного файла /-->
<property key="RELOAD_CHECK_PERIOD_MS" value="period_in_ms" /> <!-- необязательная периодичность проверки планировщиком обнаружения изменений в файле конфигурации в миллисекундах /-->
</broker-plugin>
</broker-plugins>
Настройка |
Пример значения |
Дефолтное значение |
Обязательность |
Комментарии |
|---|---|---|---|---|
CONFIG_PATH |
|
- |
Да |
путь до конфигурационного файла |
RELOAD_CHECK_PERIOD_MS |
1000 |
5000 |
Нет |
периодичность проверки планировщиком обнаружения изменений в файле конфигурации в миллисекундах |
Формат логов при трассировке сообщений#
Наименование поля |
Тип |
Описание |
Комментарии |
|---|---|---|---|
messaging.operation |
String |
Тип операции |
publish - сообщение поступает на брокер |
deliver - сообщение покидает брокер |
|||
messaging.artemismq.broker.id |
String |
Id брокера |
- |
messaging.artemismq.message.headers |
Array[String] |
значения заголовков сообщений, имена которых присутствуют в настройке |
значения заголовков сообщений отображаются в формате: |
messaging.artemismq.message.address |
String |
имя адреса с которым связано событие трассировки |
- |
messaging.artemismq.message.user.id |
String |
имя пользователя, ассоциированное с DN-сертификатом, прописанное в настройках брокера |
поле отображается только для событий поступления/ухода сообщения |
messaging.message.id |
String |
id сообщения, сформированный при отправке сообщения на брокер |
- |
messaging.message.body.size |
Long |
размер тела сообщения в байтах |
- |
messaging.artemismq.message.timestamp |
Long |
временная метка, когда событие произошло |
- |
messaging.destination.name |
String |
имя очереди получателя сообщения |
- |
Если в сообщении отсутствуют заголовки с именами, которые присутствуют в настройке |
Атрибуты в спанах#
Атрибут |
Тип |
Описание |
Примеры |
|---|---|---|---|
messaging.artemismq.message.address |
string |
Имя адреса, куда направлено сообщение |
address.test.first.Q1 |
messaging.operation |
string |
Тип операции |
publish, deliver |
messaging.destination.name |
string |
Имя очереди получателя сообщения |
queues.test.first.Q1 |
messaging.artemismq.message.userid |
string |
Идентификатор пользователя |
452ad6f9kf5f4l3lf649f76048c2f887 |
messaging.message.body.size |
int |
Размер тела сообщения в байтах |
435 |
messaging.artemismq.message.timestamp |
int |
Временная метка |
1703844661511 |
messaging.artemismq.message.headers |
string |
Название заголовка сообщения |
HEADER_TEST_2=null, HEADER_TEST_1=Header_value_test |
messaging.artemismq.broker.id |
string |
Идентификатор брокера, на который пришло сообщение от producer |
917cba4c-a632-11ee-8572-f6e76992795c |
messaging.artemismq.broker.host |
string |
Хост брокера, на который пришло сообщение от producer |
srv-68-9.sy.dev.sbt |
messaging.message.id |
string |
Идентификатор сообщения |
452a7c7c7c7048c2f887f61572b18fc2 |
messaging.artemismq.original.message.id |
string |
Родительский идентификатор сообщения |
356a7c7c7457c7048c2ff615725bk59 |
messaging.artemismq.target.host |
string |
Xост брокера, на который ушло сообщение при scale down |
srv-68-8.sy.dev.sbt |
Пример конфигурации плагина TracingPlugin tracing.json#
# тип экспортера
otel.traces.exporter=otlp
# порт экспортера (например, Jaeger)
otel.exporter.otlp.endpoint=http://localhost:4317
# имя сервиса
otel.service.name=artemis_opentelemetry
Пример отображения трассировки в UI#
Трейс позволяет отследить путь сообщения.
Каждое событие, происходящее с сообщением представляет собой спан - промежуток времени выполнения события, отображающий характеристики сообщения при прохождении событий.

Пример отображения логов в UI#
Наименование спана <имя сервиса>: <имя очереди> <тип операции>, где имя очереди совпадает с логом messaging.destination.name, тип операции совпадает с логом messaging.operation.
