เบšเปเบฅเบดเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก, OpenTracing เปเบฅเบฐ Jaeger

เบšเปเบฅเบดเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก, OpenTracing เปเบฅเบฐ Jaeger

เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒ microservice เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เป€เบกเบทเปˆเบญเบ‚เปเป‰เบšเบปเบเบœเปˆเบญเบ‡เบ”เป‰เบฒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบเบตเบ”เบ‚เบทเป‰เบ™, เปƒเบŠเป‰เป€เบงเบฅเบฒเบซเบผเบฒเบเปเบกเปˆเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเปƒเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเปเบฅเบฐเบงเบดเป€เบ„เบฒเบฐเบšเบฑเบ™เบ—เบถเบ. เป€เบกเบทเปˆเบญเบšเบฑเบ™เบ—เบถเบเป€เบงเบฅเบฒเบ‚เบญเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เปเบ•เปˆเบฅเบฐเบ„เบปเบ™เป„เบ›เบซเบฒเป„เบŸเบฅเปŒเบšเบฑเบ™เบ—เบถเบ, เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบกเบฑเบ™เบเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบ™เปเบฒเป„เบ›เบชเบนเปˆเบเบฒเบ™เบฎเบฝเบเบฎเป‰เบญเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, เป€เบžเบทเปˆเบญเบ•เบดเบ”เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบšเบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบผเบทเบเบฒเบ™เบ›เปˆเบฝเบ™เป€เบงเบฅเบฒเบ‚เบญเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

เป€เบžเบทเปˆเบญเบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เบญเบญเบเปเบฎเบ‡เบ‡เบฒเบ™เบ„เบนเปˆเบกเบท, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเปƒเบŠเป‰เบซเบ™เบถเปˆเบ‡เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ•เบดเบ”เบ•เบฒเบก. เบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เปเบฅเบฐเป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเปเบฅเบฐเบงเบดเบ—เบตเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบฎเบฑเบ”เบกเบฑเบ™, เปเบฅเบฐเบˆเบฐเบ–เบทเบเบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰.

เบšเบฑเบ™เบซเบฒเปƒเบ”เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เปเบเป‰เป„เบ‚เป„เบ”เป‰เบ”เป‰เบงเบเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก

  1. เบŠเบญเบเบซเบฒเบ‚เปเป‰เบšเบปเบเบœเปˆเบญเบ‡เบ”เป‰เบฒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบฑเบ‡เบžเบฒเบเปƒเบ™เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ”เบฝเบงเปเบฅเบฐเปƒเบ™เบ•เบปเป‰เบ™เป„เบกเป‰เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบกเบ—เบฑเบ‡เบซเบกเบปเบ”. เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡:
    • เบเบฒเบ™เป‚เบ—เบ•เบดเบ”เบ•เปเปˆเบเบฑเบ™เบชเบฑเป‰เบ™เบซเบผเบฒเบเบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™, เบ•เบปเบงเบขเปˆเบฒเบ‡, เป„เบ›เบซเบฒ geocoding เบซเบผเบทเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™.
    • I/O เบฅเปเบ–เป‰เบฒเบ”เบปเบ™เบ™เบฒเบ™, เป€เบŠเบฑเปˆเบ™: เบเบฒเบ™เป‚เบญเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบ เบซเบผเบทเบญเปˆเบฒเบ™เปเบœเปˆเบ™.
    • เบงเบดเป€เบ„เบฒเบฐเบ‚เปเป‰เบกเบนเบ™เบเบฒเบง.
    • เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบเบฒเบงเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™ cpu.
    • เบžเบฒเบเบชเปˆเบงเบ™เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบœเบปเบ™เบชเบธเบ”เบ—เป‰เบฒเบเปเบฅเบฐเบชเบฒเบกเบฒเบ”เบ–เบทเบเป‚เบเบเบเป‰เบฒเบเบญเบญเบเบซเบผเบทเบŠเบฑเบเบŠเป‰เบฒ.
  2. เป€เบ‚เบปเป‰เบฒเปƒเบˆเบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡เปƒเบ™เบฅเปเบฒเบ”เบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒเปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”.
    เบšเปเบฅเบดเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก, OpenTracing เปเบฅเบฐ Jaeger
    เป€เบซเบฑเบ™เป„เบ”เป‰เบงเปˆเบฒเบ•เบปเบงเบขเปˆเบฒเบ‡ Request เบกเบฒเบฎเบญเบ”เบšเปเบฅเบดเบเบฒเบ™ WS -> เบšเปเบฅเบดเบเบฒเบ™ WS เป€เบžเบตเปˆเบกเบ‚เปเป‰เบกเบนเบ™เบœเปˆเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™ R -> เปเบฅเป‰เบงเบชเบปเปˆเบ‡เบ„เบณเบฎเป‰เบญเบ‡เบ‚เปเป„เบ›เบ—เบตเปˆเบšเปเบฅเบดเบเบฒเบ™ V -> เบšเปเบฅเบดเบเบฒเบ™ V เป‚เบซเบผเบ”เบ‚เปเป‰เบกเบนเบ™เบซเบผเบฒเบเบˆเบฒเบเบšเปเบฅเบดเบเบฒเบ™ R -> เป„เบ›เบšเปเบฅเบดเบเบฒเบ™ P -> เบšเปเบฅเบดเบเบฒเบ™ P เป„เบ›เบซเบฒเบšเปเบฅเบดเบเบฒเบ™ R เบญเบตเบเบ„เบฑเป‰เบ‡ -> เบšเปเบฅเบดเบเบฒเบ™ V เบšเปเปˆเบชเบปเบ™เปƒเบˆเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš เปเบฅเบฐเป„เบ›เบ—เบตเปˆเบšเปเบฅเบดเบเบฒเบ™ J -> เปเบฅเบฐเบญเบตเบเบขเปˆเบฒเบ‡เปœเบถเปˆเบ‡ WS เบชเบทเบšเบ•เปเปˆเบเบฒเบ™เบ•เบญเบšเบชเบฐเปœเบญเบ‡ เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบเบฒเบ™เบ„เบณเบ™เบงเบ™เบ„เบทเบ™.
    เป‚เบ”เบเบšเปเปˆเบกเบตเบฎเปˆเบญเบ‡เบฎเบญเบเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบซเบผเบทเป€เบญเบเบฐเบชเบฒเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบชเปเบฒเบฅเบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”, เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบเบฒเบเบซเบผเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบšเบดเปˆเบ‡เบฅเบฐเบซเบฑเบ”เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”, เปเบฅเบฐเบฅเบฐเบซเบฑเบ”เป„เบ”เป‰เบ–เบทเบเบเบฐเปเบˆเบเบเบฐเบˆเบฒเบเป„เบ›เบ—เบปเปˆเบงเบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปเบฅเบฐเป€เบŠเบทเปˆเบญเบ‡เป„เบงเป‰เบขเบนเปˆเบซเบฅเบฑเบ‡เบŠเปเปˆเบ‚เบญเบ‡ bins เปเบฅเบฐเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš.
  3. เบเบฒเบ™เป€เบเบฑเบšเบเปเบฒเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบ•เบปเป‰เบ™เป„เบกเป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเป€เบฅเบทเปˆเบญเบ™เป€เบงเบฅเบฒเบ•เปเปˆเบกเบฒ. เปƒเบ™เปเบ•เปˆเบฅเบฐเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบกเบ‚เปเป‰เบกเบนเบ™เปƒเบชเปˆเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบŠเบญเบเบซเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบ™เปเบฒเป„เบ›เบชเบนเปˆเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™. เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡:
    • ID เบœเบนเป‰เปƒเบŠเป‰
    • เบชเบดเบ”เบ—เบด
    • เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเป€เบฅเบทเบญเบ
    • เบšเบฑเบ™เบ—เบถเบ เบซเบผเบทเบเบฒเบ™เบ”เบณเป€เบ™เบตเบ™เบเบฒเบ™เบœเบดเบ”เบžเบฒเบ”
  4. เบเบฒเบ™เบ›เปˆเบฝเบ™เบฎเปˆเบญเบ‡เบฎเบญเบเป€เบ›เบฑเบ™เบŠเบธเบ”เบเปˆเบญเบเบ‚เบญเบ‡ metrics เปเบฅเบฐเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปเบฅเป‰เบงเปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡ metrics.

เบชเบดเปˆเบ‡เบ—เบตเปˆเบ•เบดเบ”เบ•เบฒเบกเบชเบฒเบกเบฒเบ”เบšเบฑเบ™เบ—เบถเบ. เป„เบฅเบเบฐ

เปƒเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบกเบตเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡ span, เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบ‚เบญเบ‡เบšเบฑเบ™เบ—เบถเบเบซเบ™เบถเปˆเบ‡, เบเบฑเบš console. เบชเบฐเบ›เบฒเบกเบต:

  • เบŠเบทเปˆ, เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบดเปเบกเปˆเบ™เบŠเบทเปˆเบ‚เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”
  • เบŠเบทเปˆเบ‚เบญเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆ span เป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™
  • ID เป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡
  • เบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™ meta เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ” / เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเป„เบ”เป‰เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบกเบฑเบ™. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบงเบดเบ—เบตเบเบฒเบ™เบซเบผเบทเบงเบดเบ—เบตเบเบฒเบ™เบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡เบ”เป‰เบงเบเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบซเบผเบทเบšเปเปˆ
  • เป€เบงเบฅเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ เปเบฅเบฐเป€เบงเบฅเบฒเบชเบดเป‰เบ™เบชเบธเบ”เบชเบณเบฅเบฑเบšเบŠเปˆเบงเบ‡เป€เบงเบฅเบฒเบ™เบตเป‰
  • ID span เบ‚เบญเบ‡เบžเปเปˆเปเบกเปˆ

เปเบ•เปˆเบฅเบฐ span เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเบœเบนเป‰เป€เบเบฑเบš span เป€เบžเบทเปˆเบญเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ—เบปเบšเบ—เบงเบ™เบ„เบทเบ™เบ•เปเปˆเบกเบฒเบ—เบฑเบ™เบ—เบตเบ—เบตเปˆเบกเบฑเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบกเบฑเบ™. เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบ•เบปเป‰เบ™เป„เบกเป‰เบ‚เบญเบ‡เบ‚เบญเบšเป€เบ‚เบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เป‚เบ”เบเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป‚เบ”เบ id เบžเปเปˆเปเบกเปˆ. เป€เบกเบทเปˆเบญเบงเบดเป€เบ„เบฒเบฐ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒ, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, spans เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบšเบฒเบ‡เบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเปƒเบŠเป‰เป€เบงเบฅเบฒเบซเบผเบฒเบเบเปˆเบงเบฒเบšเบฒเบ‡เป€เบงเบฅเบฒ. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เป‚เบ”เบเบเบฒเบ™เป„เบ›เบ—เบตเปˆเบ‚เบญเบšเป€เบ‚เบ”เบชเบฐเป€เบžเบฒเบฐ, เป€เบšเบดเปˆเบ‡เบ•เบปเป‰เบ™เป„เบกเป‰เบ—เบฑเบ‡เปเบปเบ”เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡ เปเบฅเบฐ เบฅเบธเปˆเบกเบ™เบตเป‰.

เบšเปเบฅเบดเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก, OpenTracing เปเบฅเบฐ Jaeger

Opentrace, Jagger เปเบฅเบฐเบงเบดเบ—เบตเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบกเบฑเบ™เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ

เบกเบตเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ—เบปเปˆเบงเป„เบ› opentrace, เป€เบŠเบดเปˆเบ‡เบญเบฐเบ—เบดเบšเบฒเบเบงเบดเบ—เบตเบเบฒเบ™เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเบ„เบงเบ™เป€เบเบฑเบšเบเปเบฒ, เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ–เบทเบเบœเบนเบเบกเบฑเบ”เป‚เบ”เบเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบชเบฐเป€เบžเบฒเบฐเปƒเบ™เบžเบฒเบชเบฒเปƒเบ”เบเปเปˆเบ•เบฒเบก. เบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบ™ Java, เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบกเบตเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเปเบกเปˆเบ™เบ”เปเบฒเป€เบ™เบตเบ™เป‚เบ”เบเบœเปˆเบฒเบ™ Opentrace API เบ—เบปเปˆเบงเป„เบ›, เปเบฅเบฐเบžเบฒเบเปƒเบ•เป‰เบกเบฑเบ™, เบ•เบปเบงเบขเปˆเบฒเบ‡, Jaeger เบซเบผเบทเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบ—เบตเปˆเบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒเบ—เบตเปˆเบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ–เบทเบเป€เบŠเบทเปˆเบญเบ‡เป„เบงเป‰.
เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เปƒเบŠเป‰ Jaeger เป€เบ›เบฑเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡ Opentrace. เบกเบฑเบ™โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบ”เป‰เบงเบโ€‹เบซเบผเบฒเบโ€‹เบญเบปเบ‡โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹:

เบšเปเบฅเบดเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก, OpenTracing เปเบฅเบฐ Jaeger

  • Jaeger-agent เปเบกเปˆเบ™เบ•เบปเบงเปเบ—เบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบ—เบตเปˆเบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบ–เบทเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เปเบ•เปˆเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเปเบฅเบฐเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ–เบทเบเป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบšเบขเบนเปˆเปƒเบ™เบžเบญเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™. เบ–เป‰เบฒเบšเปเปˆเบกเบตเบ•เบปเบงเปเบ—เบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบ™เบตเป‰เปเบกเปˆเบ™เบ–เบทเบเบ›เบดเบ”เปƒเบŠเป‰เบ‡เบฒเบ™
  • Jaeger-collector - เบ•เบปเบงเปเบ—เบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบชเบปเปˆเบ‡เบฎเปˆเบญเบ‡เบฎเบญเบเบ—เบตเปˆเป€เบเบฑเบšเบเปเบฒเป„เบ›เบซเบฒเบกเบฑเบ™, เปเบฅเบฐเบกเบฑเบ™เบงเบฒเบ‡เป„เบงเป‰เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบฅเบทเบญเบ.
  • เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™ cassandra เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰ elasticsearch, เบกเบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบชเบญเบ‡เบชเบฒเบกเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบญเบทเปˆเบ™เปเบฅเบฐเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเบšเปเปˆเบ›เบฐเบซเบเบฑเบ”เบซเบเบฑเบ‡เบเบฑเบšเปเบœเปˆเบ™.
  • Jaeger-query เปเบกเปˆเบ™เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเป„เบ›เบซเบฒเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบฅเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ—เบตเปˆเป€เบเบฑเบšเบเปเบฒเปเบฅเป‰เบงเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ
  • Jaeger-ui เปเบกเปˆเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเป€เบงเบฑเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบŠเบญเบเบซเบฒเปเบฅเบฐเป€เบšเบดเปˆเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก, เบกเบฑเบ™เป„เบ›เบซเบฒ jaeger-query

เบšเปเบฅเบดเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก, OpenTracing เปเบฅเบฐ Jaeger

เบญเบปเบ‡เบ›เบฐเบเบญเบšเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบชเบฒเบกเบฒเบ”เป€เบญเบตเป‰เบ™เบงเปˆเบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” opentrace jaeger เบชเปเบฒเบฅเบฑเบšเบžเบฒเบชเบฒเบชเบฐเป€เบžเบฒเบฐ, เป‚เบ”เบเบœเปˆเบฒเบ™เบ™เบฑเป‰เบ™ spans เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒ jaeger-agent.
เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ Jagger เปƒเบ™ Java เบฅเบปเบ‡เบกเบฒเป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš io.opentracing.Tracer, เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ” traces เบœเปˆเบฒเบ™เบกเบฑเบ™เบˆเบฐเบšเบดเบ™เบเบฑเบšเบ•เบปเบงเปเบ—เบ™เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡.

เบšเปเบฅเบดเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก, OpenTracing เปเบฅเบฐ Jaeger

เบ™เบญเบเบˆเบฒเบเบ™เบตเป‰เบชเปเบฒเบฅเบฑเบšเบญเบปเบ‡เบ›เบฐเบเบญเบšเบžเบฒเบเบฎเบฝเบ™ spring, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ opentracing-spring-cloud-starter เปเบฅเบฐเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบˆเบฒเบ Jaeger opentracing-spring-jaeger-cloud-starter เป€เบŠเบดเปˆเบ‡เบˆเบฐเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบœเปˆเบฒเบ™เบญเบปเบ‡เบ›เบฐเบเบญเบšเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป http เบเบฑเบšเบ•เบปเบงเบ„เบงเบšเบ„เบธเบก, เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบœเปˆเบฒเบ™ jdbc, เปเบฅเบฐเบญเบทเปˆเบ™เป†.

เบ•เบดเบ”เบ•เบฒเบกเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบš Java

เบšเบฒเบ‡เบšเปˆเบญเบ™เบขเบนเปˆเปƒเบ™เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”, Span เบ—เปเบฒเบญเบดเบ”เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡, เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”, เบ•เบปเบงเบขเปˆเบฒเบ‡, เป‚เบ”เบเบ•เบปเบงเบ„เบงเบšเบ„เบธเบกเบžเบฒเบเบฎเบฝเบ™ spring เป€เบกเบทเปˆเบญเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป, เบซเบผเบทเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เบ–เป‰เบฒเบšเปเปˆเบกเบต. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบกเบฑเบ™เบ–เบทเบเบชเบปเปˆเบ‡เบœเปˆเบฒเบ™เบ‚เบญเบšเป€เบ‚เบ”เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰. เบ–เป‰เบฒเบงเบดเบ—เบตเปƒเบ”เบฅเบธเปˆเบกเบ™เบตเป‰เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบžเบตเปˆเบก Span, เบกเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒ activeSpan เบ›เบฐเบˆเบธเบšเบฑเบ™เบˆเบฒเบเบ‚เบญเบšเป€เบ‚เบ”, เบชเป‰เบฒเบ‡ Span เปƒเปเปˆ เปเบฅเบฐเบšเบญเบเบงเปˆเบฒเบžเปเปˆเปเบกเปˆเบ‚เบญเบ‡เบกเบฑเบ™เบ„เบท activeSpan เบ—เบตเปˆเป€เบ›เบฑเบ™เบœเบปเบ™, เปเบฅเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰ Span เปƒเปเปˆเบกเบตเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบง. เป€เบกเบทเปˆเบญเป‚เบ—เบซเบฒเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบžเบฒเบเบ™เบญเบ, span เบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เบเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒ, เปเบฅเบฐเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™เบชเป‰เบฒเบ‡ spans เปƒเบซเบกเปˆเป‚เบ”เบเบญเป‰เบฒเบ‡เบญเบตเบ‡เปƒเบชเปˆ span เบ™เบตเป‰.
เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ—เบฑเบ‡เบซเบกเบปเบ”เบœเปˆเบฒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡ Tracer, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบกเบฑเบ™เบœเปˆเบฒเบ™เบเบปเบ™เป„เบ DI, เบซเบผเบท GlobalTracer.get () เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ›เบ—เบปเปˆเบงเป‚เบฅเบเบ–เป‰เบฒเบเบปเบ™เป„เบ DI เบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบ. เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบ–เป‰เบฒ tracer เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, NoopTracer เบˆเบฐเบเบฑเบšเบ„เบทเบ™เบกเบฒเป€เบŠเบดเปˆเบ‡เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เป€เบฅเบตเบ.
เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ‚เบญเบšเป€เบ‚เบ”เบ›เบฐเบˆเบธเบšเบฑเบ™เปเบกเปˆเบ™เป„เบ”เป‰เบฎเบฑเบšเบˆเบฒเบ tracer เบœเปˆเบฒเบ™ ScopeManager, เบ‚เบญเบšเป€เบ‚เบ”เปƒเบซเบกเปˆเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เบˆเบฒเบเบ›เบฐเบˆเบธเบšเบฑเบ™เบ—เบตเปˆเบกเบตเบเบฒเบ™เบœเบนเบเบกเบฑเบ”เบ‚เบญเบ‡ span เปƒเบซเบกเปˆ, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ Scope เบ—เบตเปˆเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เปเบกเปˆเบ™เบ›เบดเบ”, เป€เบŠเบดเปˆเบ‡เบ›เบดเบ” span เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เปเบฅเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบ‚เบญเบšเป€เบ‚เบ”เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเป„เบ›เบชเบนเปˆเบชเบฐเบ–เบฒเบ™เบฐเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบ. เบ‚เบญเบšเป€เบ‚เบ”เบ–เบทเบเบœเบนเบเบกเบฑเบ”เบเบฑเบšเบเบฐเบ—เบนเป‰, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป€เบกเบทเปˆเบญเบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบกเบซเบผเบฒเบเบเบฐเบ—เบนเป‰, เป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบšเปเปˆเบฅเบทเบกเบ—เบตเปˆเบˆเบฐเป‚เบญเบ™ span เบ—เบตเปˆเปƒเบŠเป‰เบงเบฝเบเป„เบ›เปƒเบชเปˆเบเบฐเบ—เบนเป‰เบญเบทเปˆเบ™, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบ›เบตเบ”เปƒเบŠเป‰เบ‡เบฒเบ™เบ•เบทเปˆเบกเบญเบตเบเบ‚เบญเบ‡เบ‚เบญเบšเป€เบ‚เบ”เบ‚เบญเบ‡เบเบฐเบ—เบนเป‰เบญเบทเปˆเบ™เป‚เบ”เบเบญเป‰เบฒเบ‡เบญเบตเบ‡เปƒเบชเปˆ span เบ™เบตเป‰.

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 เปเบฅเบฐ wrappers เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบ—เบตเปˆเบชเบปเปˆเบ‡เบ•เปเปˆ span เบ›เบฐเบˆเบธเบšเบฑเบ™เป„เบ›เบซเบฒ thread เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป€เบกเบทเปˆเบญเบงเบฝเบเบ‡เบฒเบ™ asynchronous เบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบง:

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

เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป http เบžเบฒเบเบ™เบญเบเบกเบต TracingHttpClient

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

เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเป€เบŠเบตเบ™

  • เบ–เบปเปˆเบงเป€เบซเบผเบทเบญเบ‡, เบ–เบปเปˆเบงเปเบฅเบฐ DI เบšเปเปˆเป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเบชเบฐเป€เบซเบกเบตเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒ tracer เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบซเบผเบทเบญเบปเบ‡เบ›เบฐเบเบญเบš, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ เบกเบตเบชเบฒเบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ” Tracer เบญเบฒเบ”เบˆเบฐเบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบเปเบฅเบฐเบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เป„เบ”เป‰เปƒเบŠเป‰ GlobalTracer.get().
  • เบ„เปเบฒเบšเบฑเบ™เบเบฒเบเบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบ–เป‰เบฒเบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™เบชเปˆเบงเบ™เบ›เบฐเบเบญเบšเบซเบผเบทเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™, เบซเบผเบทเบ–เป‰เบฒเบงเบดเบ—เบตเบเบฒเบ™เบ–เบทเบเป€เบญเบตเป‰เบ™เบˆเบฒเบเบงเบดเบ—เบตเบเบฒเบ™เปƒเบเป‰เบ„เบฝเบ‡เบ‚เบญเบ‡เบŠเบฑเป‰เบ™เบ”เบฝเบงเบเบฑเบ™. เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบฅเบฐเบกเบฑเบ”เบฅเบฐเบงเบฑเบ‡เป€เบžเบทเปˆเบญเบเบงเบ”เป€เบšเบดเปˆเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบชเป‰เบฒเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เบ–เป‰เบฒ @Traced เบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบ. เบ™เบญเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เปเบ™เบš compiler เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบชเปเบฒเบฅเบฑเบš java annotations, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบ‚เบปเบฒเบ„เบงเบ™เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเบ—เบปเปˆเบงเบ—เบธเบเปเบซเปˆเบ‡.
  • เปƒเบ™เป€เบเบตเบšเบ‚เบญเบ‡เบžเบฒเบเบฎเบฝเบ™ spring เปเบฅเบฐเบžเบฒเบเบฎเบฝเบ™ spring เป€เบเบปเปˆเบฒ, เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ” opentraing spring cloud เบšเปเปˆเป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเปเบกเบ‡เป„เบกเป‰เปƒเบ™ DI, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบซเป‰เบฎเปˆเบญเบ‡เบฎเบญเบเปƒเบ™เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เบญเบ‡เบžเบฒเบเบฎเบฝเบ™ spring เป€เบฎเบฑเบ”เบงเบฝเบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบเบฑเบš 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, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เปƒเบŠเป‰เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบชเบธเบ”เบ—เป‰เบฒเบ.
  • เปเบ•เปˆเบฅเบฐเบšเปเบฅเบดเบเบฒเบ™เบ•เป‰เบญเบ‡เบกเบตเบŠเบทเปˆ spring.application.name เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡เบžเบฒเบเปƒเบ•เป‰เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ—เบตเปˆเบˆเบฐเบ–เบทเบเบšเบฑเบ™เบ—เบถเบ. เบŠเบทเปˆเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ‚เบฒเบเปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปเบกเปˆเบ™เบซเบเบฑเบ‡, เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เปเบŠเบเปเบŠเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบฎเปˆเบงเบกเบเบฑเบ™.
  • เบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบŠเป‰ GlobalTracer เปเบฅเบฐ tomcat, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบšเปเบฅเบดเบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเปเบฅเปˆเบ™เบขเบนเปˆเปƒเบ™ tomcat เบ™เบตเป‰เบกเบต GlobalTracer เบซเบ™เบถเปˆเบ‡, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฐเบกเบตเบŠเบทเปˆเบšเปเบฅเบดเบเบฒเบ™เบ”เบฝเบงเบเบฑเบ™.
  • เป€เบกเบทเปˆเบญเป€เบžเบตเปˆเบกเบฎเปˆเบญเบ‡เบฎเบญเบเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเป€เบญเบตเป‰เบ™เบซเบผเบฒเบเบ„เบฑเป‰เบ‡เปƒเบ™ loop. เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบกเบฎเปˆเบญเบ‡เบฎเบญเบเบ—เบปเปˆเบงเป„เบ›เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป‚เบ—เบ—เบฑเบ‡เบซเบกเบปเบ”, เป€เบŠเบดเปˆเบ‡เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เป€เบงเบฅเบฒเป€เบฎเบฑเบ”เบงเบฝเบเบ—เบฑเบ‡เบซเบกเบปเบ”. เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบฒเบ™เป‚เบซเบผเบ”เป€เบเบตเบ™เบˆเบฐเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™.
  • เป€เบกเบทเปˆเบญเบขเบนเปˆเปƒเบ™ jaeger-ui, เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเป€เบเบตเบ™เป„เบ›เป„เบ”เป‰เบ–เบทเบเป€เบฎเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบฎเปˆเบญเบ‡เบฎเบญเบเบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบ, เปเบฅเบฐเบเป‰เบญเบ™เบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบšเปเปˆเป„เบ”เป‰เบฅเปเบ–เป‰เบฒเบ„เปเบฒเบ•เบญเบš, เบžเบงเบเป€เบ‚เบปเบฒเป„เบ”เป‰เป€เบฎเบฑเบ”เบกเบฑเบ™เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, jaeger-query เป€เบฅเบตเปˆเบกเบเบดเบ™เบญเบฒเบซเบฒเบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบซเบผเบฒเบเปเบฅเบฐเบŠเป‰เบฒเบฅเบปเบ‡ elastic. เบŠเปˆเบงเบเป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เบฃเบตเบชเบฐเบ•เบฒเบ” jaeger-query

เบเบฒเบ™เป€เบเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเปเบฅเบฐเป€เบšเบดเปˆเบ‡เบฎเปˆเบญเบ‡เบฎเบญเบ

เบกเบตเบชเบฒเบกเบ›เบฐเป€เบžเบ” เบเบฒเบ™เป€เบเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡:

  1. Const เบ—เบตเปˆเบชเบปเปˆเบ‡เปเบฅเบฐเบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ—เบฑเบ‡เบซเบกเบปเบ”.
  2. Probabilistic เบ—เบตเปˆเบเบฑเปˆเบ™เบ•เบญเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ”เป‰เบงเบเบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเปƒเบซเป‰เป„เบงเป‰เบšเบฒเบ‡เบญเบฑเบ™.
  3. เบเบฒเบ™เบˆเบณเบเบฑเบ”เบญเบฑเบ”เบ•เบฒเบ—เบตเปˆเบˆเบณเบเบฑเบ”เบˆเบณเบ™เบงเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ” configure เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบขเบนเปˆเปƒเบ™เบฅเบนเบเบ„เป‰เบฒ, เบšเปเปˆเบงเปˆเบฒเบˆเบฐเบขเบนเปˆเปƒเบ™ jaeger-agent เบซเบผเบทเปƒเบ™เบ•เบปเบงเป€เบเบฑเบš. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰ const 1 เปƒเบ™ stack valuator, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบšเปเปˆเบกเบตเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบซเบผเบฒเบ, เปเบ•เปˆเบžเบงเบเป€เบ‚เบปเบฒเปƒเบŠเป‰เป€เบงเบฅเบฒเบ”เบปเบ™. เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”, เบ–เป‰เบฒเบชเบดเปˆเบ‡เบ™เบตเป‰เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เป‚เบซเบผเบ”เบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›เปƒเบ™เบฅเบฐเบšเบปเบš, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบˆเปเบฒเบเบฑเบ”เบกเบฑเบ™เป„เบ”เป‰.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบŠเป‰ cassandra, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบกเบฑเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบžเบฝเบ‡เปเบ•เปˆเบชเบญเบ‡เบกเบทเป‰. เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เปƒเบŠเป‰ เปเบœเปˆเบ™เบเบทเบ” เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบ•เบดเบ”โ€‹เบ•เบฒเบกโ€‹เบ–เบทเบโ€‹เป€เบเบฑเบšโ€‹เบฎเบฑเบโ€‹เบชเบฒโ€‹เป„เบงเป‰โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบ—เบธเบโ€‹เป€เบงโ€‹เบฅเบฒโ€‹เปเบฅเบฐโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบฅเบปเบšโ€‹. เบ”เบฑเบ”เบชเบฐเบ™เบตเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเปเบกเปˆเบ™เบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบกเบทเป‰, เบ•เบปเบงเบขเปˆเบฒเบ‡ jaeger-service-2019-03-04. เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เปเบฒเบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ”เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ‚เบญเบ‡เบฎเปˆเบญเบ‡เบฎเบญเบเป€เบเบปเปˆเบฒ.

เป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™:

  • เป€เบฅเบทเบญเบเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก, เบ•เบปเบงเบขเปˆเบฒเบ‡, tomcat7-default เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™ tomcat เปเบฅเบฐเบšเปเปˆเบชเบฒเบกเบฒเบ”เบกเบตเบŠเบทเปˆเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡เป„เบ”เป‰.
  • เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เป€เบฅเบทเบญเบเป€เบญเบปเบฒเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™, เป„เบฅเบเบฐเป€เบงเบฅเบฒเปเบฅเบฐเป€เบงเบฅเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™เบ•เปเบฒเปˆเบชเบธเบ”เบ—เบตเปˆ, เบ•เบปเบงเบขเปˆเบฒเบ‡เบˆเบฒเบ 10 เบงเบดเบ™เบฒเบ—เบต, เปƒเบŠเป‰เป€เบงเบฅเบฒเบžเบฝเบ‡เปเบ•เปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบง.
    เบšเปเบฅเบดเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก, OpenTracing เปเบฅเบฐ Jaeger
  • เป„เบ›เบซเบฒเบซเบ™เบถเปˆเบ‡เปƒเบ™เบฎเปˆเบญเบ‡เบฎเบญเบเปเบฅเบฐเป€เบšเบดเปˆเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบŠเป‰เบฒเบฅเบปเบ‡เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™.
    เบšเปเบฅเบดเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก, OpenTracing เปเบฅเบฐ Jaeger

เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ–เป‰เบฒเบšเบฒเบ‡ id เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเปเบกเปˆเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบฎเบนเป‰เบˆเบฑเบ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒ trace เป‚เบ”เบ id เบ™เบตเป‰เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒเปเบ—เบฑเบ, เบ–เป‰เบฒ id เบ™เบตเป‰เบ–เบทเบเบšเบฑเบ™เบ—เบถเบเบขเบนเปˆเปƒเบ™ trace span.

ะ”ะพะบัƒะผะตะฝั‚ะฐั†ะธั

เบšเบปเบ”โ€‹เบ„เบงเบฒเบกโ€‹เบ—เบตเปˆ

เบงเบตโ€‹เบ”เบตโ€‹เป‚เบญ

  • www.youtube.com/watch?v=qg0ENOdP1Lo เบงเบดเบ—เบตเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰ Jaeger เปเบฅเบฐ Prometheus เป€เบžเบทเปˆเบญเบชเบปเปˆเบ‡เบ„เปเบฒเบ–เบฒเบกเบœเบนเป‰เปƒเบŠเป‰เป„เบงเบŸเป‰เบฒเบœเปˆเบฒ - Bryan Boreham
  • www.youtube.com/watch?v=WRntQsUajow Intro: Jaeger - Yuri Shkuro, Uber & Pavol Loffay, Red Hat
  • www.youtube.com/watch?v=fsHb0qK37bc Serghei Iakovlev, "เป€เบฅเบทเปˆเบญเบ‡เป€เบฅเบฑเบเป†เบ™เป‰เบญเบเป†เบ‚เบญเบ‡เป„เบŠเบŠเบฐเบ™เบฐเปƒเบซเบเปˆ: OpenTracing, AWS เปเบฅเบฐ Jaeger"

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™