Π Π½Π°ΡΠΈΡ
ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ½ΡΡ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ. ΠΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΡΠ·ΠΊΠΈΡ
ΠΌΠ΅ΡΡ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΠ°ΡΠΈΡΡΡ Π½Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΠΈ ΡΠ°Π·Π±ΠΎΡ Π»ΠΎΠ³ΠΎΠ². ΠΡΠΈ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ°ΠΉΠΌΠΈΠ½Π³ΠΎΠ² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π² Π»ΠΎΠ³-ΡΠ°ΠΉΠ», ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π»ΠΎ ΠΊ Π²ΡΠ·ΠΎΠ²Ρ ΡΡΠΈΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΠΎΡΡΠ»Π΅Π΄ΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΈΠ»ΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄ΡΡΠ³ΠΎΠΉ Π² ΡΠ°Π·Π½ΡΡ
ΡΠ΅ΡΠ²ΠΈΡΠ°Ρ
.
ΠΠ»Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΡΡΠ½ΠΎΠ³ΠΎ ΡΡΡΠ΄Π° ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ. Π ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈ Π΄Π»Ρ ΡΠ΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ ΠΈ ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π»ΠΈ ΠΌΡ, ΠΈ ΠΏΠΎΠΉΠ΄Π΅Ρ ΡΠ΅ΡΡ Π² ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅.
ΠΠ°ΠΊΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ
- ΠΠ°ΠΉΡΠΈ ΡΠ·ΠΊΠΈΠ΅ ΠΌΠ΅ΡΡΠ° Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΊΠ°ΠΊ Π²Π½ΡΡΡΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ°, ΡΠ°ΠΊ ΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌ Π΄Π΅ΡΠ΅Π²Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ΅ΠΌΠΈ ΡΡΠ°ΡΡΠ²ΡΡΡΠΈΠΌΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
- ΠΠ½ΠΎΠ³ΠΎ ΠΊΠΎΡΠΎΡΠΊΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΠ½Π³ ΠΈΠ»ΠΈ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ .
- ΠΠΎΠ»Π³ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π²Π²ΠΎΠ΄Π° Π²ΡΠ²ΠΎΠ΄Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° Π΄Π°Π½Π½ΡΡ ΠΏΠΎ ΡΠ΅ΡΠΈ ΠΈΠ»ΠΈ ΡΡΠ΅Π½ΠΈΠ΅ Ρ Π΄ΠΈΡΠΊΠ°.
- ΠΠΎΠ»Π³ΠΈΠΉ ΠΏΠ°ΡΡΠΈΠ½Π³ Π΄Π°Π½Π½ΡΡ .
- ΠΠΎΠ»Π³ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΡΡΠ΅Π±ΡΡΡΠΈΠ΅ cpu.
- Π£ΡΠ°ΡΡΠΊΠΈ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ½Ρ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ΄Π°Π»Π΅Π½Ρ, Π»ΠΈΠ±ΠΎ Π·Π°ΠΏΡΡΠ΅Π½Ρ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎ.
- ΠΠ°Π³Π»ΡΠ΄Π½ΠΎ ΠΏΠΎΠ½ΡΡΡ Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΈ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΊΠΎΠ³Π΄Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ.
ΠΠΈΠ΄Π½ΠΎ ΡΡΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΠ°ΠΏΡΠΎΡ ΠΏΡΠΈΡΠ΅Π» Π² ΡΠ΅ΡΠ²ΠΈΡ WS -> ΡΠ΅ΡΠ²ΠΈΡ WS Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΠ» Π΄Π°Π½Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π· ΡΠ΅ΡΠ²ΠΈΡ R -> Π΄Π°Π»ΡΡΠ΅ ΠΎΡΠΏΡΠ°Π²ΠΈΠ» Π·Π°ΠΏΡΠΎΡ Π² ΡΠ΅ΡΠ²ΠΈΡ V -> ΡΠ΅ΡΠ²ΠΈΡ V Π·Π°Π³ΡΡΠ·ΠΈΠ» ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΡΠ΅ΡΠ²ΠΈΡΠ° R -> ΡΡ ΠΎΠ΄ΠΈΠ» Π² ΡΠ΅ΡΠ²ΠΈΡ P -> ΡΠ΅ΡΠ²ΠΈΡ Π Π΅ΡΠ΅ ΡΠ°Π· ΡΡ ΠΎΠ΄ΠΈΠ» Π² ΡΠ΅ΡΠ²ΠΈΡ R -> ΡΠ΅ΡΠ²ΠΈΡ V ΠΏΡΠΎΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π» ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΈ ΠΏΠΎΡΠ΅Π» Π² ΡΠ΅ΡΠ²ΠΈΡ J -> ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΌ Π²Π΅ΡΠ½ΡΠ» ΠΎΡΠ²Π΅Ρ Π² ΡΠ΅ΡΠ²ΠΈΡ WS, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ Π² ΡΠΎΠ½Π΅ Π²ΡΡΠΈΡΠ»ΡΡΡ ΡΡΠΎ-ΡΠΎ Π΅ΡΠ΅.
ΠΠ΅Π· ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΡΠ΅ΠΉΡΠ° ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π½Π° Π²Π΅ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π· Π²Π·Π³Π»ΡΠ½ΡΠ² Π½Π° ΠΊΠΎΠ΄, Π΄Π° ΠΈ ΠΊΠΎΠ΄ ΡΠ°Π·Π±ΡΠΎΡΠ°Π½ ΠΏΠΎ ΡΠ°Π·Π½ΡΠΌ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌ ΠΈ ΡΠΊΡΡΡ Π·Π° ΠΊΡΡΠ΅ΠΉ Π±ΠΈΠ½ΠΎΠ² ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ². - Π‘Π±ΠΎΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ Π΄Π΅ΡΠ΅Π²Π΅ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°. ΠΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΡΠ°ΠΏΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² ΡΡΠ΅ΠΉΡ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΡΡΡΠΏΠ½Π° Π½Π° Π΄Π°Π½Π½ΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΈ Π΄Π°Π»ΡΡΠ΅ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅ Π²Ρ
ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠΈΠ²Π΅Π»ΠΈ ΠΊ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌΡ ΡΡΠ΅Π½Π°ΡΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
- ID ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
- ΠΡΠ°Π²Π°
- Π’ΠΈΠΏ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°
- ΠΠΎΠ³ ΠΈΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΠ° ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
- ΠΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΉΡΠΎΠ² Π² ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΌΠ΅ΡΡΠΈΠΊ ΠΈ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· ΡΠΆΠ΅ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ΅ΡΡΠΈΠΊ.
Π§ΡΠΎ ΡΠΌΠ΅Π΅Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ°. Span
Π ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ΅ Π΅ΡΡΡ ΠΏΠΎΠ½ΡΡΠΈΠ΅ ΡΠΏΠ°Π½, ΡΡΠΎ Π°Π½Π°Π»ΠΎΠ³ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π»ΠΎΠ³Π°, Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ. Π£ ΡΠΏΠ°Π½Π° Π΅ΡΡΡ:
- ΠΠ°Π·Π²Π°Π½ΠΈΠ΅, ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΡΡ
- ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΠ²ΠΈΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ» ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ ΡΠΏΠ°Π½
- Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ID
- ΠΠ°ΠΊΠ°Ρ-ΡΠΎ ΠΌΠ΅ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² Π²ΠΈΠ΄Π΅ key/value, ΠΊΠΎΡΠΎΡΡΡ Π·Π°Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π»ΠΈ Π² Π½Π΅Π³ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈΠ»ΠΈ Π·Π°ΠΊΠΎΠ½ΡΠΈΠ»ΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅Ρ
- ΠΡΠ΅ΠΌΡ Π½Π°ΡΠ°Π»Π° ΠΈ ΠΊΠΎΠ½ΡΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΠΏΠ°Π½Π°
- ID ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΡΠΏΠ°Π½Π°
ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠΏΠ°Π½ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² collector ΡΠΏΠ°Π½ΠΎΠ² Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π² Π±Π°Π·Ρ Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ½ Π·Π°Π²Π΅ΡΡΠΈΠ» ΡΠ²ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. Π Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΡΠΎΠΈΡΡ Π΄Π΅ΡΠ΅Π²ΠΎ Π²ΡΠ΅Ρ ΡΠΏΠ°Π½ΠΎΠ² ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ ΠΏΠΎ id ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ. ΠΡΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΠ΅ ΡΠΏΠ°Π½Ρ Π² ΠΊΠ°ΠΊΠΎΠΌ-ΡΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π½ΡΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΠ°Π»ΡΡΠ΅, ΠΏΠ΅ΡΠ΅ΠΉΠ΄Ρ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΏΠ°Π½, ΡΠ²ΠΈΠ΄Π΅ΡΡ Π²ΡΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ Π²ΡΡΠ΅ ΠΈ Π½ΠΈΠΆΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠΏΠ°Π½Π°.
Opentrace, Jagger ΠΈ ΠΊΠ°ΠΊ ΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ ΡΡΠΎ Π΄Π»Ρ ΡΠ²ΠΎΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²
ΠΡΡΡ ΠΎΠ±ΡΠΈΠΉ ΡΡΠ°Π½Π΄Π°ΡΡ
Π£ Π½Π°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ
- Jaeger-agent β Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ Π°Π³Π΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠΎΠΈΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ ΠΈ Π² Π½Π΅Π³ΠΎ Π»ΠΎΠ³ΠΈΡΡΡΡ ΡΠ΅ΡΠ²ΠΈΡΡ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ Π΄Π΅ΡΠΎΠ»ΡΠ½ΡΠΉ ΠΏΠΎΡΡ. ΠΡΠ»ΠΈ Π°Π³Π΅Π½ΡΠ° Π½Π΅Ρ, ΡΠΎ ΡΡΠ΅ΠΉΡΡ Π²ΡΠ΅Ρ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Π½Π° ΡΡΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΡΠΊΠ»ΡΡΠ΅Π½Ρ
- Jaeger-collector β Π² Π½Π΅Π³ΠΎ Π²ΡΠ΅ Π°Π³Π΅Π½ΡΡ ΠΏΠΎΡΡΠ»Π°ΡΡ ΡΠΎΠ±ΡΠ°Π½Π½ΡΠ΅ ΡΡΠ΅ΠΉΡΡ, Π° ΠΎΠ½ ΠΊΠ»Π°Π΄Π΅Ρ ΠΈΡ Π² Π²ΡΠ±ΡΠ°Π½Π½ΡΡ ΠΠ
- ΠΠ°Π·Π° Π΄Π°Π½Π½ΡΡ β ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ Ρ Π½ΠΈΡ cassandra, Π½ΠΎ Ρ Π½Π°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ elasticsearch, Π΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΅ΡΠ΅ ΠΏΠΎΠ΄ ΠΏΠ°ΡΡ Π΄ΡΡΠ³ΠΈΡ Π±Π΄ ΠΈ in memory ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ Π½Π° Π΄ΠΈΡΠΊ
- Jaeger-query β ΡΡΠΎ ΡΠ΅ΡΠ²ΠΈΡ ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΎΠ΄ΠΈΡ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΎΡΠ΄Π°Π΅Ρ ΡΠΆΠ΅ ΡΠΎΠ±ΡΠ°Π½Π½ΡΠ΅ ΡΡΠ΅ΠΉΡΡ Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π°
- Jaeger-ui β ΡΡΠΎ Π²Π΅Π± ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΈ ΠΏΡΠΎΡΠΌΠΎΡΡΠΎΠ² ΡΡΠ΅ΠΉΡΠΎΠ², ΠΎΠ½ Ρ ΠΎΠ΄ΠΈΡ Π² jaeger-query
ΠΡΠ΄Π΅Π»ΡΠ½ΡΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ opentrace jaeger ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΡΠ·ΡΠΊΠΈ, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΡΡ ΡΠΏΠ°Π½Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Π² jaeger-agent.
Π’Π°ΠΊ ΠΆΠ΅ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΠΏΡΠΈΠ½Π³Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ
ΠΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ΅ΠΉΡΠΎΠ² Π² 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 Π·Π°ΠΏΡΠΎΡΠΎΠ² Π΅ΡΡΡ
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
Π‘Π΅ΠΌΠΏΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΡΠΎΡΠΌΠΎΡΡ ΡΡΠ΅ΠΉΡΠΎΠ²
ΠΡΡΡ ΡΡΠΈ ΡΠΈΠΏΠ°
- Const ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ Π²ΡΠ΅ ΡΡΠ΅ΠΉΡΡ.
- Probabilistic ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΈΠ»ΡΡΡΡΠ΅Ρ ΡΡΠ΅ΠΉΡΡ Ρ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡΡ.
- Ratelimiting ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΡΠΈΡΠ»ΠΎ ΡΡΠ΅ΠΉΡΠΎΠ² Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ. ΠΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅, Π»ΠΈΠ±ΠΎ Π½Π° jaeger-agent Π»ΠΈΠ±ΠΎ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΎΡΠ΅. Π‘Π΅ΠΉΡΠ°Ρ Ρ Π½Π°Ρ Π² ΡΡΠ΅ΠΊΠ΅ Π²Π°Π»ΡΠ°ΡΠΎΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ const 1 ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π½Π΅ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΎ ΠΎΠ½ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ. Π Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ Π΅ΡΠ»ΠΈ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΈΠ·Π»ΠΈΡΠ½ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ Π½Π° ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ.
ΠΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ cassandra ΡΠΎ ΠΏΠΎ Π΄Π΅ΡΠΎΠ»ΡΡ ΠΎΠ½Π° Ρ
ΡΠ°Π½ΠΈΡ ΡΡΠ΅ΠΉΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π·Π° Π΄Π²Π° Π΄Π½Ρ. Π£ Π½Π°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΡΠ΅ΠΉΡΡ Π½ΡΠΆΠ½ΠΎ:
- ΠΡΠ±ΡΠ°ΡΡ ΡΠ΅ΡΠ²ΠΈΡ ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Ρ ΠΎΡΠ΅ΡΡΡ ΠΏΠΎΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ ΡΡΠ΅ΠΉΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ tomcat7-default Π΄Π»Ρ ΡΠ΅ΡΠ²ΠΈΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΡΠ΅Π½ Π² ΡΠΎΠΌΠΊΠ°ΡΠ΅ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΎΠ²Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ.
- ΠΠ°Π»ΡΡΠ΅ Π²ΡΠ±ΡΠ°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΠΊ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΡ 10 ΡΠ΅ΠΊΡΠ½Π΄, ΡΡΠΎΠ±Ρ Π²Π·ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄ΠΎΠ»Π³ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
- ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΡΠ΅ΠΉΡΠΎΠ² ΠΈ ΡΠΌΠΎΡΡΠ΅ΡΡ ΡΡΠΎ ΡΠ°ΠΌ ΡΠΎΡΠΌΠΎΠ·ΠΈΠ»ΠΎ.
Π’Π°ΠΊ ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ id Π·Π°ΠΏΡΠΎΡΠ°, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΡΡΠ΅ΠΉΡ ΠΏΠΎ ΡΡΠΎΠΌΡ id ΡΠ΅ΡΠ΅Π· ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ ΡΠ΅Π³Π°ΠΌ, Π΅ΡΠ»ΠΈ ΡΡΠΎΡ id Π»ΠΎΠ³ΠΈΡΡΠ΅ΡΡΡ Π² ΡΠΏΠ°Π½ ΡΡΠ΅ΠΉΡΠ°.
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ
- ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ opentracing
opentracing.io/docs/overview/what-is-tracing - ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ jaeger
www.jaegertracing.io/docs/1.10 - ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ jaeger java
github.com/jaegertracing/jaeger-client-java - ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ spring opentracing
github.com/jaegertracing/jaeger-client-java
github.com/opentracing-contrib/java-spring-cloud
Π‘ΡΠ°ΡΡΠΈ
habr.com/ru/company/carprice/blog/340946 Jaeger Opentracing ΠΈ Microservices Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π½Π° PHP ΠΈ Golangeng.uber.com/distributed-tracing Evolving Distributed Tracing at Uber Engineeringopentracing.io/guides/java medium.com/jaegertracing/running-jaeger-agent-on-bare-metal-d1fc47d31fab Running Jaeger Agent on bare metal
ΠΠΈΠ΄Π΅ΠΎ
www.youtube.com/watch?v=qg0ENOdP1Lo How We Used Jaeger and Prometheus to Deliver Lightning-Fast User Queries β Bryan Borehamwww.youtube.com/watch?v=WRntQsUajow Intro: Jaeger β Yuri Shkuro, Uber & Pavol Loffay, Red Hatwww.youtube.com/watch?v=fsHb0qK37bc Serghei Iakovlev, βΠΠ°Π»Π΅Π½ΡΠΊΠ°Ρ ΠΈΡΡΠΎΡΠΈΡ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΠΎΠ±Π΅Π΄Ρ: OpenTracing, AWS ΠΈ Jaegerβ
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com