Шаг 4. Развертывание Jaeger
Запуск контейнера Jaeger
Jaeger — платформа для распределенной трассировки с открытым исходным кодом. Jaeger позволяет выполнять мониторинг состояния запросов и отладку после сбоев в распределенных системах микросервисных приложений.
Запустите Jaeger в Docker. Для этого используйте приведённую ниже команду Docker:
docker run --rm --name jaeger -d \
-e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 4317:4317 \
-p 4318:4318 \
-p 14250:14250 \
-p 14268:14268 \
-p 14269:14269 \
-p 9411:9411 \
jaegertracing/all-in-one:1.52.0
Обратите внимание на то, что используется устаревшая версия образа jaegertracing/all-in-one, а именно 1.52.0. Актуальный способ экспортирования телеметрии в Jaeger использует OTLP протокол, речь о котором пойдет далее.
Подключение Jaeger SDK
Вы можете установить Jaeger для Python, используя приведённую ниже команду:
pip install opentelemetry-exporter-jaeger==1.21.0
Затем вы можете обновить механизм трассировки в вашем файле:
from flask import Flask
from random import randint
from opentelemetry import trace
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.sdk.trace.export import ConsoleSpanExporter
from opentelemetry.exporter.jaeger.thrift import JaegerExporter
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
provider = TracerProvider()
processor = BatchSpanProcessor(ConsoleSpanExporter())
provider.add_span_processor(processor)
trace.set_tracer_provider(
TracerProvider(
resource=Resource.create({SERVICE_NAME: "my-python-service"})
)
)
jaeger_exporter = JaegerExporter(
agent_host_name="localhost",
agent_port=6831,
)
trace.get_tracer_provider().add_span_processor(
BatchSpanProcessor(jaeger_exporter)
)
tracer = trace.get_tracer(__name__)
app = Flask(__name__)
def roll():
return randint(1, 6)
@app.route("/rolldice")
def roll_dice():
with tracer.start_as_current_span("server_request"):
return str(roll())
Обзор пользовательского интерфейса трассировки Jaeger
Теперь вы можете повторно запустить приложение (flask run -p 8080) и отслеживать трассировки в Jaeger по адресу http://localhost:16686/. Откройте http://localhost:8080/rolldice в своем веб-браузере и перезагрузите страницу несколько раз. Через некоторое время вы Jaeger UI можете увидеть подробную информацию о трассировке и метриках. Например, следующее:

Панель поиска:
- Вы можете использовать панель поиска для поиска трассировок с определенными свойствами.
- Из какого сервиса они поступают, какая операция была выполнена, конкретные теги, которые были включены в трассировку (например, код состояния HTTP), как долго в прошлом выполнялся поиск и ограничение количества результатов.
- Когда вы закончите определять параметры поиска на этой панели, нажмите "Найти трассировки".
Раздел результатов поиска:
- На скриншоте мы видим трассировку наших запросов к http://localhost:8080/rolldice. Нажмите на нужную трассировку, чтобы перейти к ней.
Когда вы наход ите конкретную трассировку, в которой, по вашему мнению, может быть проблема, и нажимаете на нее, вы увидите экран, который выглядит примерно так:

Здесь вы можете найти конкретную информацию о времени выполнения, о том, какие вызовы были сделаны и их продолжительности, о конкретных свойствах, таких как код состояния HTTP, путь маршрута (в случае HTTP-вызова) и многое другое.
Хотя такой подход позволяет получить хорошее представление о вашем приложении, наиболее продвинутым способом адаптации инструментария на основе ваших требований является перекомпиляция агента с нуля. Кроме того, это позволит вам настроить функции измерительный инструментарий в соответствии с вашими требованиями.