ืฉื™ืจื•ืช ืื™ืชื•ืจ, OpenTracing ื•ื™ื’ืจ

ืฉื™ืจื•ืช ืื™ืชื•ืจ, OpenTracing ื•ื™ื’ืจ

ื‘ืคืจื•ื™ืงื˜ื™ื ืฉืœื ื• ืื ื• ืžืฉืชืžืฉื™ื ื‘ืืจื›ื™ื˜ืงื˜ื•ืจืช microservice. ื›ืืฉืจ ืฆื•ื•ืืจื™ ื‘ืงื‘ื•ืง ื‘ื‘ื™ืฆื•ืขื™ื ืžืชืจื—ืฉื™ื, ื–ืžืŸ ืจื‘ ืžื•ืฉืงืข ื‘ื ื™ื˜ื•ืจ ื•ื ื™ืชื•ื— ื™ื•ืžื ื™ื. ื›ืืฉืจ ืจื•ืฉืžื™ื ืืช ื”ืชื–ืžื•ื ื™ื ืฉืœ ืคืขื•ืœื•ืช ื‘ื•ื“ื“ื•ืช ืœืงื•ื‘ืฅ ื™ื•ืžืŸ, ื‘ื“ืจืš ื›ืœืœ ืงืฉื” ืœื”ื‘ื™ืŸ ืžื” ื”ื•ื‘ื™ืœ ืœืงืจื™ืื” ืฉืœ ืคืขื•ืœื•ืช ืืœื•, ืœืขืงื•ื‘ ืื—ืจ ืจืฆืฃ ื”ืคืขื•ืœื•ืช ืื• ื”ื–ื–ืช ื”ื–ืžืŸ ืฉืœ ืคืขื•ืœื” ืื—ืช ื‘ื™ื—ืก ืœืื—ืจืช ื‘ืฉื™ืจื•ืชื™ื ืฉื•ื ื™ื.

ื›ื“ื™ ืœืžื–ืขืจ ืืช ื”ืขื‘ื•ื“ื” ื”ื™ื“ื ื™ืช, ื”ื—ืœื˜ื ื• ืœื”ืฉืชืžืฉ ื‘ืื—ื“ ืžื›ืœื™ ื”ืื™ืชื•ืจ. ื›ื™ืฆื“ ื•ืœืžื” ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืžืขืงื‘ ื•ื›ื™ืฆื“ ืขืฉื™ื ื• ื–ืืช ื™ื™ื“ื•ื ื• ื‘ืžืืžืจ ื–ื”.

ืื™ืœื• ื‘ืขื™ื•ืช ื ื™ืชืŸ ืœืคืชื•ืจ ื‘ืืžืฆืขื•ืช ืžืขืงื‘?

  1. ืžืฆื ืฆื•ื•ืืจื™ ื‘ืงื‘ื•ืง ื‘ื‘ื™ืฆื•ืขื™ื ื”ืŸ ื‘ืชื•ืš ืฉื™ืจื•ืช ื‘ื•ื“ื“ ื•ื”ืŸ ืขืœ ืคื ื™ ื›ืœ ืขืฅ ื”ื‘ื™ืฆื•ืข ื‘ื™ืŸ ื›ืœ ื”ืฉื™ืจื•ืชื™ื ื”ืžืฉืชืชืคื™ื. ืœื“ื•ื’ืžื”:
    • ืฉื™ื—ื•ืช ืขื•ืงื‘ื•ืช ืจื‘ื•ืช ื‘ื™ืŸ ืฉื™ืจื•ืชื™ื, ืœืžืฉืœ, ืœืงื™ื“ื•ื“ ื’ื™ืื•ื’ืจืคื™ ืื• ืœืžืกื“ ื ืชื•ื ื™ื.
    • ื”ืžืชื ื” ืืจื•ื›ื” ืฉืœ ืงืœื˜/ืคืœื˜, ื›ื’ื•ืŸ ื”ืขื‘ืจืช ื ืชื•ื ื™ื ื‘ืจืฉืช ืื• ืงืจื™ืื” ืžื”ื“ื™ืกืง.
    • ื ื™ืชื•ื— ื ืชื•ื ื™ื ืืจื•ืš.
    • ืคืขื•ืœื•ืช ืืจื•ื›ื•ืช ื”ื“ื•ืจืฉื•ืช ืžืขื‘ื“.
    • ืงื˜ืขื™ ืงื•ื“ ืฉืื™ื ื ื ื—ื•ืฆื™ื ืœื”ืฉื’ืช ื”ืชื•ืฆืื” ื”ืกื•ืคื™ืช ื•ื ื™ืชืŸ ืœื”ืกื™ืจื ืื• ืœื“ื—ื•ืช ืื•ืชื.
  2. ืœื”ื‘ื™ืŸ ื‘ื‘ื™ืจื•ืจ ื‘ืื™ื–ื” ืกื“ืจ ืžื” ื ืงืจื ื•ืžื” ืงื•ืจื” ื‘ืขืช ื‘ื™ืฆื•ืข ื”ืคืขื•ืœื”.
    ืฉื™ืจื•ืช ืื™ืชื•ืจ, OpenTracing ื•ื™ื’ืจ
    ื ื™ืชืŸ ืœืจืื•ืช, ืœืžืฉืœ, ื”-Request ื”ื’ื™ืข ืœืฉื™ืจื•ืช WS -> ืฉื™ืจื•ืช WS ื”ืฉืœื™ื ืืช ื”ื ืชื•ื ื™ื ื“ืจืš ืฉื™ืจื•ืช R -> ื•ืื– ืฉืœื— ืืช ื”ื‘ืงืฉื” ืœืฉื™ืจื•ืช V -> ืฉื™ืจื•ืช V ื”ื•ืจื™ื“ ื”ืจื‘ื” ื ืชื•ื ื™ื ืžื”- ืฉื™ืจื•ืช R -> ื”ืœืš ืœืฉื™ืจื•ืช P -> ืฉื™ืจื•ืช P ื”ืœืš ืฉื•ื‘ ืœืฉื™ืจื•ืช R -> ืฉื™ืจื•ืช V ื”ืชืขืœื ืžื”ืชื•ืฆืื” ื•ื”ืœืš ืœืฉื™ืจื•ืช J -> ื•ืจืง ืื– ื”ื—ื–ื™ืจ ืืช ื”ืชืฉื•ื‘ื” ืœืฉื™ืจื•ืช WS, ืชื•ืš ื›ื“ื™ ื”ืžืฉืš ื—ื™ืฉื•ื‘ ืžืฉื”ื• ืื—ืจ ื‘ ื”ืจืงืข.
    ืœืœื ืžืขืงื‘ ื›ื–ื” ืื• ืชื™ืขื•ื“ ืžืคื•ืจื˜ ืœื›ืœ ื”ืชื”ืœื™ืš, ืงืฉื” ืžืื•ื“ ืœื”ื‘ื™ืŸ ืžื” ืงื•ืจื” ืœืื—ืจ ืฉืžืกืชื›ืœื™ื ืขืœ ื”ืงื•ื“ ื‘ืคืขื ื”ืจืืฉื•ื ื”, ื•ื”ืงื•ื“ ืžืคื•ื–ืจ ืขืœ ืคื ื™ ืฉื™ืจื•ืชื™ื ืฉื•ื ื™ื ื•ืžื•ืกืชืจ ืžืื—ื•ืจื™ ืฉืœืœ ืฉืขื•ืขื™ืช ื•ืžืžืฉืงื™ื.
  3. ืื™ืกื•ืฃ ืžื™ื“ืข ืขืœ ืขืฅ ื”ื‘ื™ืฆื•ืข ืœืฆื•ืจืš ื ื™ืชื•ื— ื“ื—ื•ื™ ืœืื—ืจ ืžื›ืŸ. ื‘ื›ืœ ืฉืœื‘ ืฉืœ ื‘ื™ืฆื•ืข, ื ื™ืชืŸ ืœื”ื•ืกื™ืฃ ืžื™ื“ืข ืฉื–ืžื™ืŸ ื‘ืฉืœื‘ ื–ื” ืœืžืขืงื‘ ื•ืœืื—ืจ ืžื›ืŸ ืœื”ื‘ื™ืŸ ืื™ืœื• ื ืชื•ื ื™ ืงืœื˜ ื”ื•ื‘ื™ืœื• ืœืชืจื—ื™ืฉ ื›ื–ื”. ืœื“ื•ื’ืžื”:
    • ื–ื”ื•ืช ื”ืžืฉืชืžืฉ
    • ื–ื›ื•ื™ื•ืช
    • ืกื•ื’ ื”ืฉื™ื˜ื” ืฉื ื‘ื—ืจื”
    • ืฉื’ื™ืืช ื™ื•ืžืŸ ืื• ื‘ื™ืฆื•ืข
  4. ื”ืคื™ื›ืช ืขืงื‘ื•ืช ืœืชืช-ืงื‘ื•ืฆื” ืฉืœ ืžื“ื“ื™ื ื•ื ื™ืชื•ื— ื ื•ืกืฃ ื‘ืฆื•ืจื” ืฉืœ ืžื“ื“ื™ื.

ืื™ื–ื” ืžืขืงื‘ ื™ื›ื•ืœ ืœืจืฉื•ื. ืœึฐื”ึทืงึดื™ืฃ

ื‘ืžืขืงื‘ ื™ืฉ ืืช ื”ืžื•ืฉื’ span, ื–ื”ื• ืื ืœื•ื’ื™ ืฉืœ ื™ื•ืžืŸ ืื—ื“ ืœืงื•ื ืกื•ืœื”. ืœื˜ื•ื•ื— ื™ืฉ:

  • ืฉื, ื‘ื“ืจืš ื›ืœืœ ืฉื ื”ืฉื™ื˜ื” ืฉื‘ื•ืฆืขื”
  • ืฉื ื”ืฉื™ืจื•ืช ืฉื‘ื• ื ื•ืฆืจ ื”ื˜ื•ื•ื—
  • ืชืขื•ื“ื” ืžื–ื”ื” ื™ื™ื—ื•ื“ื™ืช ืžืฉืœื•
  • ืงืฆืช ืžื˜ื ืžื™ื“ืข ื‘ืฆื•ืจื” ืฉืœ ืžืคืชื—/ืขืจืš ืฉื ื›ืœืœ ื‘ื•. ืœื“ื•ื’ืžื”, ืคืจืžื˜ืจื™ื ืฉืœ ืฉื™ื˜ื” ืื• ื”ืื ื”ืฉื™ื˜ื” ื”ืกืชื™ื™ืžื” ื‘ืฉื’ื™ืื” ืื• ืœื
  • ื–ืžื ื™ ื”ื”ืชื—ืœื” ื•ื”ืกื™ื•ื ืฉืœ ื‘ื™ืฆื•ืข ื˜ื•ื•ื— ื–ื”
  • ืžื–ื”ื” ื˜ื•ื•ื— ื”ื•ืจื”

ื›ืœ ื˜ื•ื•ื— ื ืฉืœื— ืœืืกืคืŸ ื”ื˜ื•ื•ื— ื›ื“ื™ ืœื”ื™ืฉืžืจ ื‘ืžืกื“ ื”ื ืชื•ื ื™ื ืœืฆืคื™ื™ื” ืžืื•ื—ืจืช ื‘ืจื’ืข ืฉื”ื•ื ืกื™ื™ื ืืช ื‘ื™ืฆื•ืขื•. ื‘ืขืชื™ื“, ืชื•ื›ืœ ืœื‘ื ื•ืช ืขืฅ ืžื›ืœ ื”ื˜ื•ื•ื—ื™ื ืขืœ ื™ื“ื™ ื—ื™ื‘ื•ืจื ืœืคื™ ืžื–ื”ื” ืื‘. ื‘ืขืช ื ื™ืชื•ื—, ืืชื” ื™ื›ื•ืœ ืœืžืฆื•ื, ืœืžืฉืœ, ืืช ื›ืœ ื”ื˜ื•ื•ื—ื™ื ื‘ืฉื™ืจื•ืช ื›ืœืฉื”ื• ืฉืœืงื— ื™ื•ืชืจ ืžื›ืžื” ื–ืžืŸ. ืœืื—ืจ ืžื›ืŸ, ืขื•ื‘ืจื™ื ืœื˜ื•ื•ื— ืžืกื•ื™ื, ืจืื” ืืช ื›ืœ ื”ืขืฅ ืžืขืœ ื•ืžืชื—ืช ืœื˜ื•ื•ื— ื–ื”.

ืฉื™ืจื•ืช ืื™ืชื•ืจ, OpenTracing ื•ื™ื’ืจ

Opentrace, Jagger ื•ื›ื™ืฆื“ ื™ื™ืฉืžื ื• ืืช ื–ื” ืขื‘ื•ืจ ื”ืคืจื•ื™ืงื˜ื™ื ืฉืœื ื•

ื™ืฉ ืชืงืŸ ืžืฉื•ืชืฃ Opentrace, ื”ืžืชืืจ ื›ื™ืฆื“ ื•ืžื” ื™ืฉ ืœืืกื•ืฃ, ืžื‘ืœื™ ืœื”ื™ื•ืช ืงืฉื•ืจ ื‘ืขืงื‘ื•ืช ืœืžื™ืžื•ืฉ ืกืคืฆื™ืคื™ ื‘ืืฃ ืฉืคื”. ืœื“ื•ื’ืžื”, ื‘-Java ื›ืœ ื”ืขื‘ื•ื“ื” ืขื traces ืžืชื‘ืฆืขืช ื“ืจืš ื”-API ื”ื ืคื•ืฅ ืฉืœ Opentrace, ื•ืžืชื—ืชื™ื• ื ื™ืชืŸ ืœื”ืกืชื™ืจ, ืœืžืฉืœ, Jaeger ืื• ืžื™ืžื•ืฉ ื‘ืจื™ืจืช ืžื—ื“ืœ ืจื™ืง ืฉืœื ืขื•ืฉื” ื›ืœื•ื.
ืื ื• ืžืฉืชืžืฉื™ื ื™ื’ืจ ื›ื™ื™ืฉื•ื ืฉืœ Opentrace. ื”ื•ื ืžื•ืจื›ื‘ ืžืžืกืคืจ ืžืจื›ื™ื‘ื™ื:

ืฉื™ืจื•ืช ืื™ืชื•ืจ, OpenTracing ื•ื™ื’ืจ

  • Jaeger-agent ื”ื•ื ืกื•ื›ืŸ ืžืงื•ืžื™ ื”ืžื•ืชืงืŸ ื‘ื“ืจืš ื›ืœืœ ื‘ื›ืœ ืžื—ืฉื‘ ื•ืฉื™ืจื•ืชื™ื ืžื—ื•ื‘ืจื™ื ืืœื™ื• ื‘ื™ืฆื™ืืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ืžืงื•ืžื™ืช. ืื ืื™ืŸ ืกื•ื›ืŸ, ืื– ื”ืขืงื‘ื•ืช ืฉืœ ื›ืœ ื”ืฉื™ืจื•ืชื™ื ื‘ืžื—ืฉื‘ ื–ื” ื‘ื“ืจืš ื›ืœืœ ื›ื‘ื•ื™ื™ื
  • Jaeger-collector - ื›ืœ ื”ืกื•ื›ื ื™ื ืฉื•ืœื—ื™ื ืืœื™ื• ืขืงื‘ื•ืช ืฉื ืืกืคื•, ื•ื”ื•ื ืžื›ื ื™ืก ืื•ืชื ืœืžืกื“ ื”ื ืชื•ื ื™ื ื”ื ื‘ื—ืจ
  • ืžืกื“ ื ืชื•ื ื™ื - ื”ืžื•ืขื“ืฃ ืขืœื™ื”ื ื”ื•ื ืงืกื ื“ืจื”, ืื‘ืœ ืื ื—ื ื• ืžืฉืชืžืฉื™ื ื‘-elasticsearch, ื™ืฉ ื”ื˜ืžืขื•ืช ืœื›ืžื” ืžืกื“ื™ ื ืชื•ื ื™ื ืื—ืจื™ื ื•ื™ื™ืฉื•ื ื‘ื–ื™ื›ืจื•ืŸ ืฉืœื ืฉื•ืžืจ ืฉื•ื ื“ื‘ืจ ื‘ื“ื™ืกืง
  • Jaeger-query ื”ื•ื ืฉื™ืจื•ืช ืฉื ื›ื ืก ืœืžืกื“ ื”ื ืชื•ื ื™ื ื•ืžืกืคืง ืขืงื‘ื•ืช ืฉื›ื‘ืจ ื ืืกืคื• ืœื ื™ืชื•ื—
  • Jaeger-ui ื”ื•ื ืžืžืฉืง ืื™ื ื˜ืจื ื˜ ืœื—ื™ืคื•ืฉ ื•ืฆืคื™ื™ื” ื‘ืขืงื‘ื•ืช, ื”ื•ื ืคื•ืขืœ ื‘-jaeger-query

ืฉื™ืจื•ืช ืื™ืชื•ืจ, OpenTracing ื•ื™ื’ืจ

ื ื™ืชืŸ ืœืงืจื•ื ืœืจื›ื™ื‘ ื ืคืจื“ ืžื™ืžื•ืฉ ืฉืœ opentrace jaeger ืขื‘ื•ืจ ืฉืคื•ืช ืกืคืฆื™ืคื™ื•ืช, ืฉื“ืจื›ื• ื ืฉืœื—ื•ืช ื˜ื•ื•ื—ื™ื ืœ-jaeger-agent.
ื—ื™ื‘ื•ืจ ื’'ืื’ืจ ื‘ื’'ืื•ื•ื” ืžืกืชื›ื ื‘ื™ื™ืฉื•ื ืžืžืฉืง io.opentracing.Tracer, ืฉืœืื—ืจื™ื• ื›ืœ ื”ืขืงื‘ื•ืช ื“ืจื›ื• ื™ืขื‘ืจื• ืœืกื•ื›ืŸ ื”ืืžื™ืชื™.

ืฉื™ืจื•ืช ืื™ืชื•ืจ, OpenTracing ื•ื™ื’ืจ

ื ื™ืชืŸ ื’ื ืœื—ื‘ืจ ืจื›ื™ื‘ื™ ืงืคื™ืฅ opentracing-spring-cloud-starter ื•ื™ื™ืฉื•ื ืž-Jaeger opentracing-spring-jaeger-cloud-starter ืฉืชื’ื“ื™ืจ ืžืขืงื‘ ืื•ื˜ื•ืžื˜ื™ืช ืœื›ืœ ืžื” ืฉืขื•ื‘ืจ ื“ืจืš ื”ืจื›ื™ื‘ื™ื ื”ืœืœื•, ืœืžืฉืœ ื‘ืงืฉื•ืช http ืœื‘ืงืจื™ื, ื‘ืงืฉื•ืช ืœื‘ืกื™ืก ื”ื ืชื•ื ื™ื ื“ืจืš jdbc ื•ื›ื•'.

ืจื™ืฉื•ื ืขืงื‘ื•ืช ื‘-Java

ืื™ืคืฉื”ื• ื‘ืจืžื” ื”ืขืœื™ื•ื ื” ื™ืฉ ืœื™ืฆื•ืจ ืืช Span ื”ืจืืฉื•ืŸ, ื ื™ืชืŸ ืœืขืฉื•ืช ื–ืืช ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™, ืœืžืฉืœ ืขืœ ื™ื“ื™ ื‘ืงืจ ื”ืงืคื™ืฅ ื‘ืขืช ืงื‘ืœืช ื‘ืงืฉื”, ืื• ื‘ืื•ืคืŸ ื™ื“ื ื™ ืื ืื™ืŸ. ืœืื—ืจ ืžื›ืŸ ื”ื•ื ืžื•ืขื‘ืจ ื‘ืืžืฆืขื•ืช Scope ืœืžื˜ื”. ืื ืฉื™ื˜ื” ื›ืœืฉื”ื™ ืœืžื˜ื” ืจื•ืฆื” ืœื”ื•ืกื™ืฃ Span, ื”ื™ื ืœื•ืงื—ืช ืืช ื”-activeSpan ื”ื ื•ื›ื—ื™ ืž-Scope, ื™ื•ืฆืจืช Span ื—ื“ืฉ ื•ืื•ืžืจืช ืฉื”ื”ื•ืจื” ืฉืœื” ืงื™ื‘ืœ ActiveSpan, ื•ื”ื•ืคื›ืช ืืช ื”-Span ื”ื—ื“ืฉ ืœืคืขื™ืœ. ื›ืืฉืจ ืงื•ืจืื™ื ืœืฉื™ืจื•ืชื™ื ื—ื™ืฆื•ื ื™ื™ื, ื”ื˜ื•ื•ื— ื”ืคืขื™ืœ ื”ื ื•ื›ื—ื™ ืžื•ืขื‘ืจ ืืœื™ื”ื, ื•ืฉื™ืจื•ืชื™ื ืืœื” ื™ื•ืฆืจื™ื ื˜ื•ื•ื—ื™ื ื—ื“ืฉื™ื ื”ืžืงื•ืฉืจื™ื ืœื˜ื•ื•ื— ื–ื”.
ื›ืœ ื”ืขื‘ื•ื“ื” ืขื•ื‘ืจืช ื“ืจืš ื”ืžื•ืคืข ืฉืœ Tracer; ืืชื” ื™ื›ื•ืœ ืœืงื‘ืœ ืื•ืชื” ื“ืจืš ืžื ื’ื ื•ืŸ DI, ืื• GlobalTracer.get() ื›ืžืฉืชื ื” ื’ืœื•ื‘ืœื™ ืื ืžื ื’ื ื•ืŸ DI ืœื ืขื•ื‘ื“. ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืื ื”-Tracer ืœื ืื•ืชื—ืœ, NoopTracer ื™ื•ื—ื–ืจ ืฉืœื ืขื•ืฉื” ื›ืœื•ื.
ืœืื—ืจ ืžื›ืŸ, ื”-Scoop ื”ื ื•ื›ื—ื™ ืžืชืงื‘ืœ ืžื”-Tracer ื“ืจืš ScopeManager, ื ื•ืฆืจ scope ื—ื“ืฉ ืžื”ื ื•ื›ื—ื™ ืขื ืกืคื™ืจื” ื—ื“ืฉื” ืžืฆื•ืจืฃ, ื•ืื– ื ืกื’ืจ ื”-Scoop ืฉื ื•ืฆืจ, ืžื” ืฉืกื•ื’ืจ ืืช ื”-Scoop ืฉื ื•ืฆืจ ื•ืžื—ื–ื™ืจ ืืช ื”-Scoop ื”ืงื•ื“ื ืœืžืฆื‘ ื”ืคืขื™ืœ . ื”ื™ืงืฃ ืงืฉื•ืจ ืœืฉืจืฉื•ืจ, ืœื›ืŸ ื‘ืขืช โ€‹โ€‹ืชื›ื ื•ืช ืžืจื•ื‘ื”-ื”ื‘ืจื’ื”, ืขืœื™ืš ืœื–ื›ื•ืจ ืœื”ืขื‘ื™ืจ ืืช ื”ื˜ื•ื•ื— ื”ืคืขื™ืœ ืœืฉืจืฉื•ืจ ืื—ืจ, ืœื”ืคืขืœื” ื ื•ืกืคืช ืฉืœ ื”-Scoop ืฉืœ ื—ื•ื˜ ืื—ืจ ื”ืžื—ื•ื‘ืจ ืœื˜ื•ื•ื— ื–ื”.

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 ืœื ื™ืขื‘ื•ื“ ื•ืชืฆื˜ืจืš ืœื”ืฉืชืžืฉ ื‘-GlobalTracer.get().
  • ื”ืขืจื•ืช ืื™ื ืŸ ืคื•ืขืœื•ืช ืื ื–ื” ืœื ืจื›ื™ื‘ ืื• ืฉื™ืจื•ืช, ืื• ืื ืงืจื™ืืช ื”ืฉื™ื˜ื” ืžื’ื™ืขื” ืžืฉื™ื˜ื” ืฉื›ื ื” ืžืื•ืชื” ืžื—ืœืงื”. ืืชื” ืฆืจื™ืš ืœื”ื™ื•ืช ื–ื”ื™ืจ, ืœื‘ื“ื•ืง ืžื” ืขื•ื‘ื“, ื•ืœื”ืฉืชืžืฉ ื‘ื™ืฆื™ืจืช ืขืงื‘ื•ืช ื™ื“ื ื™ืช ืื @Traced ืœื ืขื•ื‘ื“. ืืชื” ื™ื›ื•ืœ ื’ื ืœืฆืจืฃ ืžื”ื“ืจ ื ื•ืกืฃ ืœื”ืขืจื•ืช Java, ื•ืื– ื–ื” ืืžื•ืจ ืœืขื‘ื•ื“ ื‘ื›ืœ ืžืงื•ื.
  • ื‘ืžื’ืฃ ืงืคื™ืฅ ื•ืงืคื™ืฅ ื™ืฉืŸ, ื”ืชืฆื•ืจื” ื”ืื•ื˜ื•ืžื˜ื™ืช ืฉืœ ืขื ืŸ ืงืคื™ืฅ ืคืชื•ื— ืœื ืขื•ื‘ื“ืช ื‘ื’ืœืœ ื‘ืื’ื™ื ื‘-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
  • ื ืกื” ืขื ืžืฉืื‘ื™ื ืœื ืขื•ื‘ื“ ื‘ื’ืจื•ื‘ื™; ืืชื” ื—ื™ื™ื‘ ืœื”ืฉืชืžืฉ ื ืกื” ืœื‘ืกื•ืฃ.
  • ืœื›ืœ ืฉื™ืจื•ืช ื—ื™ื™ื‘ ืœื”ื™ื•ืช spring.application.name ืžืฉืœื• ืฉืชื—ืชื™ื• ื™ื™ืจืฉืžื• ืขืงื‘ื•ืช. ืžื” ื“ืขืชืš ืขืœ ืฉื ื ืคืจื“ ืœืžื›ื™ืจื•ืช ื•ืœื‘ื“ื™ืงื”, ื›ื“ื™ ืœื ืœืขืจื‘ื‘ ื‘ื™ื ื™ื”ื.
  • ืื ืืชื” ืžืฉืชืžืฉ ื‘-GlobalTracer ื•ื‘-tomcat, ืื– ืœื›ืœ ื”ืฉื™ืจื•ืชื™ื ื”ืคื•ืขืœื™ื ื‘-tomcat ื–ื” ื™ืฉ GlobalTracer ืื—ื“, ื›ืš ืฉืœื›ื•ืœื ื™ื”ื™ื” ืื•ืชื• ืฉื ืฉื™ืจื•ืช.
  • ื‘ืขืช ื”ื•ืกืคืช ืขืงื‘ื•ืช ืœืฉื™ื˜ื”, ืืชื” ืฆืจื™ืš ืœื”ื™ื•ืช ื‘ื˜ื•ื— ืฉื”ื™ื ืœื ื ืงืจืืช ื‘ืœื•ืœืื” ืคืขืžื™ื ืจื‘ื•ืช. ืขืœื™ืš ืœื”ื•ืกื™ืฃ ืžืขืงื‘ ืื—ื“ ืžืฉื•ืชืฃ ืœื›ืœ ื”ืฉื™ื—ื•ืช, ืืฉืจ ื™ืชืขื“ ืืช ื–ืžืŸ ื”ืคืขื•ืœื” ื”ื›ื•ืœืœ. ืื—ืจืช, ื™ื•ื•ืฆืจ ืขื•ืžืก ืขื•ื“ืฃ.
  • ืคืขื ืื—ืช ื‘-jaeger-ui ื”ื ื”ื’ื™ืฉื• ื‘ืงืฉื•ืช ื’ื“ื•ืœื•ืช ืžื“ื™ ืœืžืกืคืจ ืจื‘ ืฉืœ ืขืงื‘ื•ืช, ื•ืžื›ื™ื•ื•ืŸ ืฉื”ื ืœื ื—ื™ื›ื• ืœืชื’ื•ื‘ื”, ื”ื ืขืฉื• ื–ืืช ืฉื•ื‘. ื›ืชื•ืฆืื” ืžื›ืš, jaeger-query ื”ื—ืœื” ืœืื›ื•ืœ ื”ืจื‘ื” ื–ื™ื›ืจื•ืŸ ื•ืœื”ืื˜ ืืช ื”ื’ืžื™ืฉื•ืช. ืขื–ืจ ืขืœ ื™ื“ื™ ื”ืคืขืœื” ืžื—ื“ืฉ ืฉืœ jaeger-query

ื“ื’ื™ืžื”, ืื—ืกื•ืŸ ื•ืฆืคื™ื™ื” ืขืงื‘ื•ืช

ื™ืฉื ื ืฉืœื•ืฉื” ืกื•ื’ื™ื ื“ื’ื™ืžืช ืขืงื‘ื•ืช:

  1. Const ืฉืฉื•ืœื— ื•ืฉื•ืžืจ ืืช ื›ืœ ื”ืขืงื‘ื•ืช.
  2. ื”ืกืชื‘ืจื•ืชื™ ืฉืžืกื ืŸ ืขืงื‘ื•ืช ื‘ื”ืกืชื‘ืจื•ืช ืžืกื•ื™ืžืช.
  3. Ratemiting ื”ืžื’ื‘ื™ืœ ืืช ืžืกืคืจ ื”ืขืงื‘ื•ืช ืœืฉื ื™ื™ื”. ืืชื” ื™ื›ื•ืœ ืœื”ื’ื“ื™ืจ ื”ื’ื“ืจื•ืช ืืœื” ื‘ืœืงื•ื—, ืื• ื‘-jaeger-agent ืื• ื‘-collector. ื›ืขืช ืื ื• ืžืฉืชืžืฉื™ื ื‘-const 1 ื‘ืขืจื™ืžืช ืžืขืจื™ืš ื”ืฉื•ื•ื™ ืžื›ื™ื•ื•ืŸ ืฉืื™ืŸ ื”ืจื‘ื” ื‘ืงืฉื•ืช, ืื‘ืœ ื”ืŸ ืœื•ืงื—ื•ืช ื”ืจื‘ื” ื–ืžืŸ. ื‘ืขืชื™ื“, ืื ื–ื” ื™ืคืขื™ืœ ืขื•ืžืก ืžื™ื•ืชืจ ืขืœ ื”ืžืขืจื›ืช, ืชื•ื›ืœ ืœื”ื’ื‘ื™ืœ ืื•ืชื•.

ืื ืืชื” ืžืฉืชืžืฉ ื‘ืงืกื ื“ืจื”, ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ื”ื™ื ืžืื—ืกื ืช ืขืงื‘ื•ืช ืจืง ืœื™ื•ืžื™ื™ื. ืื ื• ืžืฉืชืžืฉื™ื ืืœืกื˜ื™ืงื” ื•ืขืงื‘ื•ืช ื ืฉืžืจื™ื ืœืžืฉืš ื›ืœ ื”ื–ืžืŸ ื•ืื™ื ื ื ืžื—ืงื™ื. ื ื•ืฆืจ ืื™ื ื“ืงืก ื ืคืจื“ ืœื›ืœ ื™ื•ื, ืœืžืฉืœ jaeger-service-2019-03-04. ื‘ืขืชื™ื“, ืขืœื™ืš ืœื”ื’ื“ื™ืจ ื ื™ืงื•ื™ ืื•ื˜ื•ืžื˜ื™ ืฉืœ ืขืงื‘ื•ืช ื™ืฉื ื•ืช.

ื›ื“ื™ ืœืจืื•ืช ืืช ื”ืขืงื‘ื•ืช ืขืœื™ืš:

  • ื‘ื—ืจ ืืช ื”ืฉื™ืจื•ืช ืฉืœืคื™ื• ืชืจืฆื” ืœืกื ืŸ ืขืงื‘ื•ืช, ืœืžืฉืœ tomcat7-default ืขื‘ื•ืจ ืฉื™ืจื•ืช ืฉืคื•ืขืœ ื‘-Tomcat ื•ืื™ืŸ ืœื• ืฉื ืžืฉืœื•.
  • ืœืื—ืจ ืžื›ืŸ, ื‘ื—ืจ ืืช ื”ืคืขื•ืœื”, ืคืจืง ื”ื–ืžืŸ ื•ื–ืžืŸ ื”ืคืขื•ืœื” ื”ืžื™ื ื™ืžืœื™, ืœืžืฉืœ ืž-10 ืฉื ื™ื•ืช, ื›ื“ื™ ืœืงื—ืช ืจืง ื‘ื™ืฆื•ืขื™ื ืืจื•ื›ื™ื.
    ืฉื™ืจื•ืช ืื™ืชื•ืจ, OpenTracing ื•ื™ื’ืจ
  • ืœืš ืœืื—ืช ื”ืขืงื‘ื•ืช ื•ืจืื” ืžื” ืžืื˜ ืฉื.
    ืฉื™ืจื•ืช ืื™ืชื•ืจ, OpenTracing ื•ื™ื’ืจ

ื›ืžื• ื›ืŸ, ืื ืžื–ื”ื” ื‘ืงืฉื” ื™ื“ื•ืข, ืื– ืืชื” ื™ื›ื•ืœ ืœืžืฆื•ื ืžืขืงื‘ ืขืœ ื™ื“ื™ ืžื–ื”ื” ื–ื” ื‘ืืžืฆืขื•ืช ื—ื™ืคื•ืฉ ืชื’ื™ื, ืื ืžื–ื”ื” ื–ื” ื ืจืฉื ื‘ื˜ื•ื•ื— ืฉืœ ื”ืžืขืงื‘.

ืจืฉื•ืžื•ืช

ืžืืžืจื™ื

ื•ื™ื“ืื•

  • www.youtube.com/watch?v=qg0ENOdP1Lo ืื™ืš ื”ืฉืชืžืฉื ื• ื‘ื™ื’ืจ ื•ืคืจื•ืžืชืื•ืก ื›ื“ื™ ืœืกืคืง ืฉืื™ืœืชื•ืช ืžืฉืชืžืฉื™ื ื‘ืžื”ื™ืจื•ืช ื”ื‘ื–ืง - ื‘ืจื™ืืŸ ื‘ื•ืจื”ืื
  • www.youtube.com/watch?v=WRntQsUajow ื”ืงื“ืžื”: ื™ื™ื’ืจ - ื™ื•ืจื™ ืฉืงื•ืจื•, ืื•ื‘ืจ ื•ืคื‘ื•ืœ ืœื•ืคื™, ืจื“ ื”ืื˜
  • www.youtube.com/watch?v=fsHb0qK37bc ืกืจื’ื™ื™ ื™ืืงื•ื‘ืœื‘, "ืกื™ืคื•ืจ ืงื˜ืŸ ืฉืœ ื ื™ืฆื—ื•ืŸ ื’ื“ื•ืœ: OpenTracing, AWS ื•ื™ื’ืจ"

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”