Я написал несколько микросервисов, используя Quarkus, которые взаимодействуют через Artemis. Теперь я хочу добавить OpenTelemetry для отслеживания.
Я уже пробовал вызывать службу B из службы A, используя HTTP/REST. Здесь идентификатор трассировки из службы A автоматически добавляется в заголовок HTTP-запроса и используется в службе B. Так что это работает нормально. В Jaeger я вижу корреляцию.
Но как этого добиться, используя Artemis в качестве системы обмена сообщениями? Должен ли я (вручную) добавить идентификатор трассировки из службы A в сообщение и прочитать его в службе B, чтобы как-то настроить контекст (не знаю, возможно ли это)? Или, возможно, есть автоматизм, как для HTTP-запросов?
Буду признателен за любую помощь. Я должен упомянуть здесь, что у меня пока мало опыта в трассировке.
Пока нет quarkus, расширения quarkiverse или библиотеки smallrye, обеспечивающей интеграцию с Artemis и OpenTelemetry.
Кроме того, в настоящее время разрабатывается спецификация массирования OpenTelemetry, потому что правильный способ корреляции отправленных, полученных сообщений и услуг определяется на уровне спецификации OTel.
Однако у меня была точно такая же проблема, как у вас, и я сделал ручную инструментацию, которую вы можете использовать в качестве вдохновения: quarkus-observability-demo-activemq
Он будет соотносить отправленную службу как родительскую с принимающей стороной.
Как вы обрабатываете информацию о багаже здесь? Я вижу, что багаж установлен правильно с помощью REST (багаж.current() возвращает значения). Должен ли я переустанавливать значения в новом багаже или они каким-то образом доступны из родительского диапазона? На данный момент я не понимаю связи между контекстом или диапазоном и значениями багажа.
В отличие от OpenTracing, в OpenTelemetry Baggage является независимым сигналом и полностью отличается от диапазона. См.: opentelemetry.io/docs/concepts/signals/baggage Поэтому для Artemis вам нужно будет вручную установить и получить багаж.
Спасибо большое уже! Думал о более-менее похожем подходе, но интрументатора не знал. Я посмотрю на это глубже. Еще раз спасибо!