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

Шаг 3. Подключение библиотек для трассировки приложения

Трассировки дают нам общую картину того, что происходит, когда запрос отправляется в приложение. Независимо от того, является ли ваше приложение монолитом с единой базой данных или сложной сетью сервисов, трассировки необходимы для понимания полного “пути”, по которому запрос проходит в вашем приложении.

Обновите app.py следующим образом:

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

provider = TracerProvider()
processor = BatchSpanProcessor(ConsoleSpanExporter())
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)
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())

Теперь вы можете запустить свое приложение с отображением трассировки в консоли:

flask run -p 8080

Откройте http://localhost:8080/rolldice в своем веб-браузере и перезагрузите страницу несколько раз. Через некоторое время вы должны увидеть в консоли вывод с подробной информацией о трассировке и метриках. Например, следующее:

Просмотр примера выходных данных
{
"name": "server_request",
"context": {
"trace_id": "0x8bb247903948c22b88461d46e8aec344",
"span_id": "0xae649d59ab3e5eb8",
"trace_state": "[]"
},
"kind": "SpanKind.INTERNAL",
"parent_id": null,
"start_time": "2023-11-15T13:47:54.674268Z",
"end_time": "2023-11-15T13:47:54.674328Z",
"status": {
"status_code": "UNSET"
},
"attributes": {},
"events": [],
"links": [],
"resource": {
"attributes": {
"telemetry.sdk.language": "python",
"telemetry.sdk.name": "opentelemetry",
"telemetry.sdk.version": "1.21.0",
"service.name": "unknown_service"
},
"schema_url": ""
}
}