Врассировка сСрвисов, OpenTracing ΠΈ Jaeger

Врассировка сСрвисов, OpenTracing ΠΈ Jaeger

Π’ Π½Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡΠ½ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ. ΠŸΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΡƒΠ·ΠΊΠΈΡ… мСст Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ достаточно ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ тратится Π½Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ Ρ€Π°Π·Π±ΠΎΡ€ Π»ΠΎΠ³ΠΎΠ². ΠŸΡ€ΠΈ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‚Π°ΠΉΠΌΠΈΠ½Π³ΠΎΠ² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² Π»ΠΎΠ³-Ρ„Π°ΠΉΠ», ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, слоТно ΠΏΠΎΠ½ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ Π²Ρ‹Π·ΠΎΠ²Ρƒ этих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ дСйствий ΠΈΠ»ΠΈ смСщСниС Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π² Ρ€Π°Π·Π½Ρ‹Ρ… сСрвисах.

Для ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ Ρ‚Ρ€ΡƒΠ΄Π° ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· инструмСнтов трассировки. О Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈ для Ρ‡Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ трассировку ΠΈ ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°Π»ΠΈ ΠΌΡ‹, ΠΈ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

КакиС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ трассировки

  1. Найти ΡƒΠ·ΠΊΠΈΠ΅ мСста Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠ°ΠΊ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСрвиса, Ρ‚Π°ΠΊ ΠΈ Π²ΠΎ всСм Π΄Π΅Ρ€Π΅Π²Π΅ выполнСния ΠΌΠ΅ΠΆΠ΄Ρƒ всСми ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ сСрвисами. НапримСр:
    • Много ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвисами, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΠ½Π³ ΠΈΠ»ΠΈ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….
    • Π”ΠΎΠ»Π³ΠΈΠ΅ оТидания Π²Π²ΠΎΠ΄Π° Π²Ρ‹Π²ΠΎΠ΄Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ сСти ΠΈΠ»ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ с диска.
    • Π”ΠΎΠ»Π³ΠΈΠΉ парсинг Π΄Π°Π½Π½Ρ‹Ρ….
    • Π”ΠΎΠ»Π³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ cpu.
    • Участки ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ для получСния ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹, Π»ΠΈΠ±ΠΎ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎ.
  2. Наглядно ΠΏΠΎΠ½ΡΡ‚ΡŒ Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‡Ρ‚ΠΎ вызываСтся ΠΈ Ρ‡Ρ‚ΠΎ происходит ΠΊΠΎΠ³Π΄Π° выполняСтся опСрация.
    Врассировка сСрвисов, OpenTracing ΠΈ Jaeger
    Π’ΠΈΠ΄Π½ΠΎ Ρ‡Ρ‚ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Запрос ΠΏΡ€ΠΈΡˆΠ΅Π» Π² сСрвис WS -> сСрвис WS Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΠ» Π΄Π°Π½Π½Ρ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· сСрвис R -> дальшС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ» запрос Π² сСрвис V -> сСрвис V Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ» ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· сСрвиса R -> сходил Π² сСрвис P -> сСрвис Π  Π΅Ρ‰Π΅ Ρ€Π°Π· сходил Π² сСрвис R -> сСрвис V ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π» Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈ пошСл Π² сСрвис J -> ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌ Π²Π΅Ρ€Π½ΡƒΠ» ΠΎΡ‚Π²Π΅Ρ‚ Π² сСрвис WS, ΠΏΡ€ΠΈ этом продолТая Π² Ρ„ΠΎΠ½Π΅ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Π΅.
    Π‘Π΅Π· Ρ‚Π°ΠΊΠΎΠ³ΠΎ трСйса ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π½Π° вСсь процСсс ΠΎΡ‡Π΅Π½ΡŒ слоТно ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π· взглянув Π½Π° ΠΊΠΎΠ΄, Π΄Π° ΠΈ ΠΊΠΎΠ΄ разбросан ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ сСрвисам ΠΈ скрыт Π·Π° ΠΊΡƒΡ‡Π΅ΠΉ Π±ΠΈΠ½ΠΎΠ² ΠΈ интСрфСйсов.
  3. Π‘Π±ΠΎΡ€ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π΄Π΅Ρ€Π΅Π²Π΅ исполнСния для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°. На ΠΊΠ°ΠΆΠ΄ΠΎΠΌ этапС выполнСния Π² трСйс ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, которая доступна Π½Π° Π΄Π°Π½Π½ΠΎΠΌ этапС ΠΈ дальшС Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊΠΈΠ΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΈ ΠΊ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌΡƒ ΡΡ†Π΅Π½Π°Ρ€ΠΈΡŽ. НапримСр:
    • ID ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
    • ΠŸΡ€Π°Π²Π°
    • Π’ΠΈΠΏ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°
    • Π›ΠΎΠ³ ΠΈΠ»ΠΈ ошибка исполнСния
  4. ΠŸΡ€Π΅Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ трСйсов Π² подмноТСство ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ ΠΈ дальнСйший Π°Π½Π°Π»ΠΈΠ· ΡƒΠΆΠ΅ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ.

Π§Ρ‚ΠΎ ΡƒΠΌΠ΅Π΅Ρ‚ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ трассировка. Span

Π’ трассировкС Π΅ΡΡ‚ΡŒ понятиС спан, это Π°Π½Π°Π»ΠΎΠ³ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π»ΠΎΠ³Π°, Π² консоль. Π£ спана Π΅ΡΡ‚ΡŒ:

  • НазваниС, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполнялся
  • НазваниС сСрвиса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±Ρ‹Π» сгСнСрирован спан
  • БобствСнный ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ID
  • Какая-Ρ‚ΠΎ ΠΌΠ΅Ρ‚Π° информация Π² Π²ΠΈΠ΄Π΅ key/value, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π·Π°Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Π² Π½Π΅Π³ΠΎ. НапримСр, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ»ΠΈ закончился ΠΌΠ΅Ρ‚ΠΎΠ΄ ошибкой ΠΈΠ»ΠΈ Π½Π΅Ρ‚
  • ВрСмя Π½Π°Ρ‡Π°Π»Π° ΠΈ ΠΊΠΎΠ½Ρ†Π° выполнСния этого спана
  • ID Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ спана

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ спан отправляСтся Π² collector спанов для сохранСния Π² Π±Π°Π·Ρƒ для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ просмотра ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ» своС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. Π’ дальнСйшСм ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎ всСх спанов соСдиняя ΠΏΠΎ id родитСля. ΠŸΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, всС спаны Π² ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ сСрвисС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ заняли большС ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π”Π°Π»ΡŒΡˆΠ΅, пСрСйдя Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ спан, ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ всС Π΄Π΅Ρ€Π΅Π²ΠΎ Π²Ρ‹ΡˆΠ΅ ΠΈ Π½ΠΈΠΆΠ΅ этого спана.

Врассировка сСрвисов, OpenTracing ΠΈ Jaeger

Opentrace, Jagger ΠΈ ΠΊΠ°ΠΊ ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ это для своих ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²

Π•ΡΡ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ стандарт Opentrace, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описываСт ΠΊΠ°ΠΊ ΠΈ Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒΡΡ, Π½Π΅ ΠΏΡ€ΠΈΠ²ΡΠ·Ρ‹Π²Π°ΡΡΡŒ трассировкой ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ языкС. НапримСр, Π² Java вся Ρ€Π°Π±ΠΎΡ‚Π° с трСйсами вСдСтся Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±Ρ‰ΠΈΠΉ API Opentrace, Π° ΠΏΠΎΠ΄ Π½ΠΈΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Jaeger ΠΈΠ»ΠΈ пустая дСфолтная рСализация которая Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚.
Π£ нас ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Jaeger ΠΊΠ°ΠΊ имплимСнтация Opentrace. Он состоит ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚:

Врассировка сСрвисов, OpenTracing ΠΈ Jaeger

  • Jaeger-agent β€” Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π³Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ стоит Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ машинС ΠΈ Π² Π½Π΅Π³ΠΎ Π»ΠΎΠ³ΠΈΡ€ΡƒΡŽΡ‚ сСрвисы Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚. Если Π°Π³Π΅Π½Ρ‚Π° Π½Π΅Ρ‚, Ρ‚ΠΎ трСйсы всСх сСрвисов Π½Π° этой машинС ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹
  • Jaeger-collector β€” Π² Π½Π΅Π³ΠΎ всС Π°Π³Π΅Π½Ρ‚Ρ‹ ΠΏΠΎΡΡ‹Π»Π°ΡŽΡ‚ собранныС трСйсы, Π° ΠΎΠ½ ΠΊΠ»Π°Π΄Π΅Ρ‚ ΠΈΡ… Π² Π²Ρ‹Π±Ρ€Π°Π½Π½ΡƒΡŽ Π‘Π”
  • Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… β€” ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρƒ Π½ΠΈΡ… cassandra, Π½ΠΎ Ρƒ нас ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ elasticsearch, Π΅ΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΅Ρ‰Π΅ ΠΏΠΎΠ΄ ΠΏΠ°Ρ€Ρƒ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±Π΄ ΠΈ in memory рСализация, которая Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ сохраняСт Π½Π° диск
  • Jaeger-query β€” это сСрвис ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΎΡ‚Π΄Π°Π΅Ρ‚ ΡƒΠΆΠ΅ собранныС трСйсы для Π°Π½Π°Π»ΠΈΠ·Π°
  • Jaeger-ui β€” это Π²Π΅Π± интСрфСйс для поиска ΠΈ просмотров трСйсов, ΠΎΠ½ Ρ…ΠΎΠ΄ΠΈΡ‚ Π² jaeger-query

Врассировка сСрвисов, OpenTracing ΠΈ Jaeger

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ opentrace jaeger ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ языки, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ спаны ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² jaeger-agent.
ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Jagger Π² Java сводится ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΈΠΌΠΏΠ»ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ‚ΡŒ интСрфСйс io.opentracing.Tracer, послС Ρ‡Π΅Π³ΠΎ всС трСйсы Ρ‡Π΅Ρ€Π΅Π· Π½Π΅Π³ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ»Π΅Ρ‚Π°Ρ‚ΡŒ Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π³Π΅Π½Ρ‚.

Врассировка сСрвисов, OpenTracing ΠΈ Jaeger

Π’Π°ΠΊ ΠΆΠ΅ для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ спринга ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ opentracing-spring-cloud-starter ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΎΡ‚ Jaeger opentracing-spring-jaeger-cloud-starter которая Π·Π°ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ‚ автоматичСски трассировку Π½Π° всС Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· эти ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ http запросы Π² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρ‹, запросы ΠΊ Π‘Π” Ρ‡Π΅Ρ€Π΅Π· jdbc ΠΈ Ρ‚.Π΄.

Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ трСйсов Π² Java

Π“Π΄Π΅-Ρ‚ΠΎ Π½Π° самом Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ создан ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Span, это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сдСлано автоматичСски Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ спринга ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ запроса, Π»ΠΈΠ±ΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Ссли Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π½Π΅Ρ‚. Π”Π°Π»ΡŒΡˆΠ΅ ΠΎΠ½ пСрСдаСтся Ρ‡Π΅Ρ€Π΅Π· Scope Π½ΠΈΠΆΠ΅. Если ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½ΠΈΠΆΠ΅ Ρ…ΠΎΡ‡Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Span, ΠΎΠ½ Π±Π΅Ρ€Π΅Ρ‚ ΠΈΠ· Scope Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ activeSpan, создаСт Π½ΠΎΠ²Ρ‹ΠΉ Span ΠΈ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ activeSpan, ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ Span active. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Π²Π½Π΅ΡˆΠ½ΠΈΡ… сСрвисов ΠΈΠΌ пСрСдаСтся Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ спан, ΠΈ Ρ‚Π΅ сСрвисы ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π½ΠΎΠ²Ρ‹Π΅ спаны с привязкой ΠΊ этому спану.
Вся Ρ€Π°Π±ΠΎΡ‚Π° ΠΈΠ΄Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· инстанс Tracer, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ DI, Π»ΠΈΠ±ΠΎ GlobalTracer.get() ΠΊΠ°ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Ссли ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ DI Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. По Π΄Π΅Ρ„ΠΎΠ»Ρ‚Ρƒ Ссли tracer Π½Π΅ Π±Ρ‹Π» ΠΏΡ€ΠΎΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ вСрнСтся NoopTracer ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚.
Π”Π°Π»ΡŒΡˆΠ΅ ΠΈΠ· tracer Ρ‡Π΅Ρ€Π΅Π· ScopeManager достаСтся Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ scope, создаСтся Π½ΠΎΠ²Ρ‹ΠΉ scope ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ с привязкой Π½ΠΎΠ²ΠΎΠ³ΠΎ спана, Π° Π² дальнСйшСм закрываСтся созданный Scope, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ созданный спан ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π² Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ состояниС ΠΏΡ€ΠΎΡˆΠ»Ρ‹ΠΉ Scope. Scope привязан ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΡƒ, поэтому ΠΏΡ€ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π°Π΄ΠΎ Π½Π΅ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ спан Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, для дальнСйшСй Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ Scope Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° с привязкой ΠΊ этому спану.

io.opentracing.Tracer tracer = ...; // GlobalTracer.get()

void DoSmth () {
   try (Scope scope = tracer.buildSpan("DoSmth").startActive(true)) {
      ...
   }
}
void DoOther () {
    Span span = tracer.buildSpan("someWork").start();
    try (Scope scope = tracer.scopeManager().activate(span, false)) {
        // Do things.
    } catch(Exception ex) {
        Tags.ERROR.set(span, true);
        span.log(Map.of(Fields.EVENT, "error", Fields.ERROR_OBJECT, ex, Fields.MESSAGE, ex.getMessage()));
    } finally {
        span.finish();
    }
}

void DoAsync () {
    try (Scope scope = tracer.buildSpan("ServiceHandlerSpan").startActive(false)) {
        ...
        final Span span = scope.span();
        doAsyncWork(() -> {
            // STEP 2 ABOVE: reactivate the Span in the callback, passing true to
            // startActive() if/when the Span must be finished.
            try (Scope scope = tracer.scopeManager().activate(span, false)) {
                ...
            }
        });
    }
}

Для ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ программирования Ρ‚Π°ΠΊ ΠΆΠ΅ Π΅ΡΡ‚ΡŒ TracedExecutorService ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ автоматичСски ΠΏΡ€ΠΎΠ±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ спан Π² ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΡ€ΠΈ запуски асинхронно таски:

private ExecutorService executor = new TracedExecutorService(
    Executors.newFixedThreadPool(10), GlobalTracer.get()
);

Для Π²Π½Π΅ΡˆΠ½ΠΈΡ… http запросов Π΅ΡΡ‚ΡŒ TracingHttpClient

HttpClient httpClient = new TracingHttpClientBuilder().build();

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΡ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ

  • Π‘ΠΈΠ½Ρ‹ ΠΈ DI Π½Π΅ всСгда Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ссли tracer ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅ Π² сСрвисС ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅, Ρ‚ΠΎΠ³Π΄Π° Autowired Tracer ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ придСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ GlobalTracer.get().
  • НС Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ссли это Π½Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈΠ»ΠΈ сСрвис, ΠΈΠ»ΠΈ Ссли Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° происходит ΠΈΠ· сосСднСго ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ класса. Надо Π±Ρ‹Ρ‚ΡŒ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½Ρ‹ΠΌ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€ΡƒΡ‡Π½ΠΎΠ΅ созданиС трСйса Ссли @Traced Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π’Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΊΡ€ΡƒΡ‚ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠ°ΠΉΠ»Π΅Ρ€ для java Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ, Ρ‚ΠΎΠ³Π΄Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π²Π΅Π·Π΄Π΅.
  • Π’ старых spring ΠΈ spring boot Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ автоконфигурация opentraing spring cloud ΠΈΠ·-Π·Π° Π±Π°Π³ΠΎΠ² Π² DI, Ρ‚ΠΎΠ³Π΄Π° Ссли хочСтся Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ автоматичСски трСйсы Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… спринга ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с github.com/opentracing-contrib/java-spring-jaeger/blob/master/opentracing-spring-jaeger-starter/src/main/java/io/opentracing/contrib/java/spring/jaeger/starter/JaegerAutoConfiguration.java
  • Π’ groovy Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ try with resources, Π½Π°Π΄ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ try finally.
  • Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сСрвиса Π½Π°Π΄ΠΎ ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ свой spring.application.name ΠΏΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ трСйсы. ΠŸΡ€ΠΈ Ρ‡Π΅ΠΌ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ name для ΠΏΡ€ΠΎΠ΄Π° ΠΈ тСста, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΌΠ΅ΡˆΠ°Ρ‚ΡŒ ΠΈΡ… вмСстС.
  • Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ GlobalTracer ΠΈ tomcat Ρ‚ΠΎ всС сСрвисы Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ Π² этом tomcat ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ GlobalTracer, поэтому Ρƒ Π½ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ Π½Π° всСх ΠΎΠ΄Π½ΠΎ имя сСрвиса.
  • ΠŸΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ трСйсов Π² ΠΌΠ΅Ρ‚ΠΎΠ΄, Π½Π°Π΄ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ вызываСтся Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·. Надо Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±Ρ‰ΠΈΠΉ трСйс Π½Π° всС Π²Ρ‹Π·ΠΎΠ²Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π»ΠΎΠ³ΠΈΡ€ΡƒΠ΅Ρ‚ суммарноС врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π˜Π½Π°Ρ‡Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ избыточная Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°.
  • Один Ρ€Π°Π· Π² jaeger-ui Π΄Π΅Π»Π°Π»ΠΈ слишком большиС запросы Π½Π° большоС количСство трСйсов ΠΈ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ доТидались ΠΎΡ‚Π²Π΅Ρ‚Π° Π΄Π΅Π»Π°Π»ΠΈ Π΅Ρ‰Π΅ Ρ€Π°Π·. Π’ ΠΈΡ‚ΠΎΠ³Π΅ jaeger-query стал Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ памяти ΠΈ Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚ΡŒ эластик. Помогло рСстартом jaeger-query

Π‘Π΅ΠΌΠΏΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ просмотр трСйсов

Π•ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° сСмплирования трСйсов:

  1. Const ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ отправляСт ΠΈ сохраняСт всС трСйсы.
  2. Probabilistic ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅Ρ‚ трСйсы с ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ.
  3. Ratelimiting ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ число трСйсов Π² сСкунду. МоТно Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ эти ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅, Π»ΠΈΠ±ΠΎ Π½Π° jaeger-agent Π»ΠΈΠ±ΠΎ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ‚ΠΎΡ€Π΅. БСйчас Ρƒ нас Π² стСкС Π²Π°Π»ΡŽΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ const 1 Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ запросов Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΎ ΠΎΠ½ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя. Π’ дальнСйшСм Ссли это Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ излишнюю Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° систСму ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ.

Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ cassandra Ρ‚ΠΎ ΠΏΠΎ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Ρƒ ΠΎΠ½Π° Ρ…Ρ€Π°Π½ΠΈΡ‚ трСйсы Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π° Π΄Π²Π° дня. Π£ нас ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ elasticsearch ΠΈ трСйсы хранятся Π·Π° всС врСмя ΠΈ Π½Π΅ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ. На ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ дСнь создаСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ индСкс, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ jaeger-service-2019-03-04. Π’ дальнСйшСм Π½Π°Π΄ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ подчистку старых трСйсов.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ трСйсы Π½ΡƒΠΆΠ½ΠΎ:

  • Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ сСрвис ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ хочСтся ΠΏΠΎΡ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ трСйсы, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ tomcat7-default для сСрвиса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π² Ρ‚ΠΎΠΌΠΊΠ°Ρ‚Π΅ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ совСго ΠΈΠΌΠ΅Π½ΠΈ.
  • Π”Π°Π»ΡŒΡˆΠ΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ ΠΈ минимальноС врСмя ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚ 10 сСкунд, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π·ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎΠ»Π³ΠΈΠ΅ выполнСния.
    Врассировка сСрвисов, OpenTracing ΠΈ Jaeger
  • ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· трСйсов ΠΈ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΠ»ΠΎ.
    Врассировка сСрвисов, OpenTracing ΠΈ Jaeger

Π’Π°ΠΊ ΠΆΠ΅ Ссли извСстСн ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ id запроса, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ трСйс ΠΏΠΎ этому id Ρ‡Π΅Ρ€Π΅Π· поиск ΠΏΠΎ Ρ‚Π΅Π³Π°ΠΌ, Ссли этот id логируСтся Π² спан трСйса.

ДокумСнтация

Π‘Ρ‚Π°Ρ‚ΡŒΠΈ

Π’ΠΈΠ΄Π΅ΠΎ

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com