БСсплатная ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Ρ†ΠΈΡ

ΠžΠΏΠΈΡˆΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΈΠ»ΠΈ Ρ†Π΅Π»ΡŒ. ΠžΡ‚Π²Π΅Ρ‡Ρƒ с практичСским ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом β€” бСсплатно, Π±Π΅Π· ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π².

Или Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ врСмя Π² Calendly

OpenTelemetry для Django SaaS: поиск ΡƒΠ·ΠΊΠΎΠ³ΠΎ мСста ΠΏΠΎ трСйсам

Π§Ρ‚ΠΎ ломаСтся Π² ΠΏΡ€ΠΎΠ΄Π΅

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ прилоТСния, Π° Π² Π»ΠΎΠ³Π°Ρ… Ρ„ΠΈΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Ρ‹ Π½Π° запросах ΠΊ API. ΠŸΡ€ΠΈ этом ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ сСрвСра ΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Основной симптом β€” Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· API-эндпоинтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‚ SLA Π² 500 мс. Π’ Π»ΠΎΠ³Π°Ρ… ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ°Ρ… Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… всё выглядит Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Π½ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° явно Π΅ΡΡ‚ΡŒ. Π‘Π΅Π· инструмСнтов трассировки слоТно ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π³Π΄Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ тСряСтся врСмя.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ: Π² Django SaaS-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ запросы ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· эндпоинтов Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ Π½Π°Ρ‡Π°Π»ΠΈ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ сСкунды. Π›ΠΎΠ³ΠΈ Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΈ ошибок, Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚Π²Π΅Ρ‡Π°Π»Π° быстро, Π½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π»ΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ с Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ°ΠΌΠΈ. Π‘Π΅Π· трассировки Π±Ρ‹Π»ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π³Π΄Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ происходят Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ запроса.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚

ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° CPU, количСство Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… соСдинСний с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ срСднСС врСмя ΠΎΡ‚Π²Π΅Ρ‚Π°, Π΄Π°ΡŽΡ‚ лишь Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ прСдставлСниС ΠΎ состоянии систСмы. Они ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ сСрвСр Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Π½ΠΎΡ€ΠΌΡ‹, Π½ΠΎ Π½Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ запросС. НапримСр, Ссли ΠΎΠ΄ΠΈΠ½ ΠΈΠ· эндпоинтов Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… выполняСт SQL-запросы, ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Π½Π΅ скаТут, Π³Π΄Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ происходит Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ°.

Π’ Ρ‚Π°ΠΊΠΈΡ… случаях трСбуСтся инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт "Π·Π°Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΡŒ" ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ запроса ΠΈ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, сколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. ИмСнно это ΠΈ прСдоставляСт OpenTelemetry.

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ OpenTelemetry

OpenTelemetry β€” это инструмСнт для трассировки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ этапС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запроса. Π’ контСкстС Django это ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ:

  • ВрСмя выполнСния middleware;
  • ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ запросов Π² прСдставлСниях (views);
  • SQL-запросы, выполняСмыС Ρ‡Π΅Ρ€Π΅Π· ORM (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Django ORM);
  • Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ API-запросы, сдСланныС Ρ‡Π΅Ρ€Π΅Π· HTTP-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, requests ΠΈΠ»ΠΈ httpx);
  • ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π·Π°Π΄Π°Ρ‡ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Celery);
  • Кэш-запросы (Redis, Memcached).

КаТдоС ΠΈΠ· этих дСйствий становится "спаном" (span) Π² трСйсС. ВрСйс β€” это Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° спанов, которая ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ запроса Ρ‡Π΅Ρ€Π΅Π· систСму.

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ OpenTelemetry Π² Django

Для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ OpenTelemetry Π² Django-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ нСсколько шагов:

  1. Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ зависимости: Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ установлСны Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для OpenTelemetry, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ opentelemetry-api, opentelemetry-sdk, ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ для Django ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, opentelemetry-instrumentation-django, opentelemetry-instrumentation-requests).
  2. ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ SDK: Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π±Π°Π·ΠΎΠ²ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ SDK Π² настройки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π­Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ экспортСра (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, OTLP, Jaeger, Zipkin) ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ логирования.
  3. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ трассировку для ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². НапримСр, для Django это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ middleware, Π° для Π²Π½Π΅ΡˆΠ½ΠΈΡ… API-запросов β€” ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ° Π½Π°Π΄ HTTP-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ.
  4. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ сбор Π΄Π°Π½Π½Ρ‹Ρ…: Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ трСйсы ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ бэкСнд (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Jaeger ΠΈΠ»ΠΈ Tempo) ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ настройки SDK

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ настройки OpenTelemetry SDK для Django:


from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor, ConsoleSpanExporter
from opentelemetry.instrumentation.django import DjangoInstrumentor

# Настройка ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°
trace.set_tracer_provider(TracerProvider())

# ЭкспортСр для Π²Ρ‹Π²ΠΎΠ΄Π° Π² консоль (ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° Jaeger ΠΈΠ»ΠΈ OTLP)
span_processor = BatchSpanProcessor(ConsoleSpanExporter())
trace.get_tracer_provider().add_span_processor(span_processor)

# Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Django
DjangoInstrumentor().instrument()

ЧастыС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠΈ

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ интСграция OpenTelemetry ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с нСсколькими ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ:

  • Высокая Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅: Если Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ сбор всСх спанов Π±Π΅Π· Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ, это ΠΌΠΎΠΆΠ΅Ρ‚ сущСствСнно ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° сСрвСр. РСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сСмплированиС (sampling) для ограничСния объСма Π΄Π°Π½Π½Ρ‹Ρ….
  • ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ: НСкоторыС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ нСсовмСстимы с автоматичСской инструмСнтализациСй. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях приходится ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€ΡƒΡ‡Π½ΡƒΡŽ трассировку.
  • Ошибки экспорта: Если экспортСр Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ настроСн, трСйсы ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ Π² бэкСнд. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠΉΡ‚Π΅ Π»ΠΎΠ³ΠΈ прилоТСния Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ ошибок экспорта.

Поиск ΡƒΠ·ΠΊΠΎΠ³ΠΎ мСста

ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ OpenTelemetry ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊ Π°Π½Π°Π»ΠΈΠ·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½Ρ‹ΠΉ процСсс:

  1. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠ³ΠΎ эндпоинта: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ трСйсы, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ эндпоинт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ SLA.
  2. Анализ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ спанов: Π˜Π·ΡƒΡ‡ΠΈΡ‚Π΅ трСйсы для запросов ΠΊ этому эндпоинту. НайдитС спан с самым большим Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ выполнСния.
  3. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΡƒΠ·ΠΊΠΎΠ³ΠΎ мСста: Если Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° связана с SQL-запросом, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π΅Π³ΠΎ ΠΏΠ»Π°Π½ выполнСния (EXPLAIN). Если ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² HTTP-запросС, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ внСшний API ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ быстро.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ

Π’ ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ я столкнулся с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, ΠΊΠΎΠ³Π΄Π° Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ Π½Π° эндпоинтС Π±Ρ‹Π»ΠΈ связаны с Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ кэш-сСрвиса Redis. ВрСйсы ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»Π° ΠΈΠ·-Π·Π° большого количСства ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… запросов ΠΊ Redis. РСшСниС Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»ΠΎΡΡŒ Π² объСдинСнии Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… запросов Π² ΠΎΠ΄ΠΈΠ½ Π±Π°Ρ‚Ρ‡ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ кэша.

ВрСйсы β€” это Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ инструмСнт диагностики, Π½ΠΎ ΠΈ способ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ запросы "Ρ‚Π΅ΠΊΡƒΡ‚" Ρ‡Π΅Ρ€Π΅Π· систСму. Они ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ ΡƒΠ·ΠΊΠΈΠ΅ мСста, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° исправлСния

ПослС внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π²Π°ΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΡˆΠ΅Π½Π°. Для этого:

  • Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ трСйсы Π΄ΠΎ ΠΈ послС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠ³ΠΎ спана ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΠ»ΠΎΡΡŒ.
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π° систСму ΠΎΡΡ‚Π°Π»Π°ΡΡŒ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Π½ΠΎΡ€ΠΌΡ‹.
  • ΠŸΡ€ΠΎΠ²Π΅Π΄ΠΈΡ‚Π΅ Π½Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½ΠΎΠ΅ тСстированиС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ систСмы ΠΏΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ числа запросов.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ трассировки, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ OpenTelemetry, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΡŒ систСмы ΠΈ Π½Π°ΠΉΡ‚ΠΈ ΡƒΠ·ΠΊΠΈΠ΅ мСста, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ ΠΈΠ»ΠΈ Π»ΠΎΠ³ΠΈ. Для Django SaaS-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ это особСнно Π²Π°ΠΆΠ½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ слоТныС Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ OpenTelemetry Π² свой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с ΠΌΠΎΠΈΠΌΠΈ услугами ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ΡΡŒ Π½Π° ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Ρ†ΠΈΡŽ.