Использование OpenTelemetry для обеспечения трассируемости не контейнеризованных Java-сервисов
Содержание
Overview
В этом решении показано, как изменить не контейнеризованные Java-сервисы, развернутые на виртуальных или физических машинах, чтобы просматривать их цепочки вызовов с контейнеризованными сервисами на платформе. Обратите внимание, что это решение предоставляет только функциональность трассируемости и не поддерживает просмотр логов.
Prerequisites
- Ваш Java-сервис развернут на виртуальных или физических машинах и требует функциональности трассируемости.
- В кластере создан сервис-меш.
- У вас есть доступ к управляющим узлам Kubernetes-кластера, и установлен инструмент
kubectl.
Steps
1. Загрузка и настройка OpenTelemetry Java Agent
Сначала необходимо скопировать jar-файл OpenTelemetry Java Agent в каталог ./agent на управляющем узле кластера, где был создан сервис-меш.
Выберите и выполните соответствующий скрипт в зависимости от компонента 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-сервис, чтобы изменения вступили в силу.