Использование OpenTelemetry для обеспечения трассируемости неконтейнеризованных Java-сервисов
Содержание
Overview
В этом решении описывается, как изменить неконтейнеризованные Java-сервисы, развернутые на виртуальных или физических машинах, чтобы просматривать их цепочки вызовов с контейнеризованными сервисами на платформе. Обратите внимание, что данное решение обеспечивает только функциональность трассируемости и не поддерживает просмотр логов.
Prerequisites
- Ваш Java-сервис развернут на виртуальных или физических машинах и требует функциональности трассируемости.
- В кластере создан service mesh.
- У вас есть доступ к управляющим узлам Kubernetes-кластера, и установлен инструмент
kubectl.
Steps
1. Загрузка и настройка OpenTelemetry Java Agent
Сначала необходимо скопировать jar-файл OpenTelemetry Java Agent в каталог ./agent на управляющем узле кластера, где создан service mesh.
Выберите и выполните соответствующий скрипт в зависимости от runtime-компонента кластера
-
Компонент runtime Containerd
-
Установите инструмент
nerdctlна управляющем узле. Скачайте его, распакуйте архив, предоставьте права на выполнение и скопируйте в каталог/usr/local/bin: -
Выполните вход в репозиторий образов, используемый кластером, заменив
<image_registry_address>на фактический адрес: -
Запустите следующий скрипт для копирования jar-файла Java Agent из образа в локальную систему:
-
-
Компонент runtime Docker
-
Выполните вход в репозиторий образов, используемый кластером:
-
Запустите следующий скрипт для копирования jar-файла Java Agent из образа в локальную систему:
-
2. Распространение Java Agent на узлы с Java-сервисами
Скопируйте файл opentelemetry-javaagent-ext.jar, полученный на шаге 1, в каталог ./agent на всех узлах, где запущены Java-сервисы.
3. Установка переменных окружения
Настройте следующие переменные окружения на всех узлах с Java-сервисами:
4. Изменение скрипта запуска Java-сервиса
В скрипт запуска Java-сервиса добавьте следующий параметр:
5. Создание ConfigMap
В пространстве имён, где необходимо включить функцию трассируемости, создайте ConfigMap для хранения соответствия между адресами и именами неконтейнеризованных Java-сервисов. Пример:
- Значения
host,portиserviceNameдолжны соответствовать адресу доступа, порту и имени сервиса неконтейнеризованных сервисов.serviceNameдолжен совпадать сservice.name, определённым в переменной окруженияOTEL_RESOURCE_ATTRIBUTES.
6. Перезапуск Java-сервиса
После применения вышеуказанных настроек перезапустите Java-сервис, чтобы изменения вступили в силу.