Перейти к основному содержимому

Шаг 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 можете увидеть подробную информацию о трассировке и метриках. Например, следующее:

Jaeger UI: трассировка приложения

Панель поиска:

  • Вы можете использовать панель поиска для поиска трассировок с определенными свойствами.
  • Из какого сервиса они поступают, какая операция была выполнена, конкретные теги, которые были включены в трассировку (например, код состояния HTTP), как долго в прошлом выполнялся поиск и ограничение количества результатов.
  • Когда вы закончите определять параметры поиска на этой панели, нажмите "Найти трассировки".

Раздел результатов поиска:

  • На скриншоте мы видим трассировку наших запросов к http://localhost:8080/rolldice. Нажмите на нужную трассировку, чтобы перейти к ней.

Когда вы находите конкретную трассировку, в которой, по вашему мнению, может быть проблема, и нажимаете на нее, вы увидите экран, который выглядит примерно так:

Jaeger UI: трассировка приложения

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

примечание

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