В этом решении описывается, как изменить неконтейнеризованные Java-сервисы, развернутые на виртуальных или физических машинах, чтобы просматривать их цепочки вызовов с контейнеризованными сервисами на платформе. Обратите внимание, что это решение обеспечивает только функциональность трассируемости и не поддерживает просмотр логов.
kubectl
.Сначала необходимо скопировать 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 из образа на локальную систему:
Скопируйте opentelemetry-javaagent-ext.jar
, полученный на шаге 1, в директорию ./agent
на всех узлах, где запущены Java-сервисы.
Настройте следующие переменные окружения на всех узлах с Java-сервисами:
Переменная окружения | Описание |
---|---|
OTEL_PROPAGATORS | Формат распространения данных трассировки. Доступные значения: b3 , b3multi . Несколько значений можно разделять запятыми. |
OTEL_TRACES_EXPORTER | Экспортер данных трассировки. Значение должно быть otlp . |
OTEL_EXPORTER_OTLP_ENDPOINT | Адрес отправки данных OTLP в формате http://<ASM_OTEL_COLLECTOR_IP>:4317 , где ASM_OTEL_COLLECTOR_IP — IP-адрес, доступный компоненту service mesh. |
OTEL_RESOURCE_ATTRIBUTES | Пользовательские теги. Обязательные поля: service.name , vm.name . Например: service.name=myservice.ns,vm.name=vm-test . vm.name — имя виртуальной машины, на которой размещён сервис, а service.name — имя, отображаемое в цепочке вызовов. Можно добавить другие пользовательские теги, рекомендуется использовать префикс vm для идентификации VM-сервисов. Несколько пар ключ-значение разделяются запятыми. |
В скрипт запуска Java-сервиса добавьте следующий параметр:
В namespace, где необходимо включить функцию трассируемости, создайте ConfigMap для хранения сопоставления адресов и имён неконтейнеризованных Java-сервисов. Пример:
host
, port
и serviceName
должны соответствовать адресу доступа, порту и имени сервиса неконтейнеризованных сервисов. serviceName
должен совпадать с service.name
, определённым в переменной окружения OTEL_RESOURCE_ATTRIBUTES
.После применения вышеуказанных настроек перезапустите Java-сервис, чтобы изменения вступили в силу.