Service Tracing, OpenTracing et Jaeger

Service Tracing, OpenTracing et Jaeger

Architectura microservice utimur in inceptis nostris. Cum perficientur bottlenecks fiunt, multum temporis consumitur magna et parsing ligna. Cum singulas operationes ad stipes lima colligationem, plerumque difficile est intelligere quid ad invocationem istarum operationum perducatur, indagare ordinem actionum vel temporis mutationem unius operationis respectu alterius in diversis officiis.

Ad laborem manualem extenuandum, unum ex instrumentis vestigandis uti decrevimus. Qualiter et quare uti possis investigando et quomodo fecerimus, et in hoc articulo tractabuntur.

Quae problemata solvi possunt cum typum

  1. Invenire operas colliculas tam intra unum servitium quam in tota arbore executionis inter omnia operas participationes. Exempli gratia:
    • Multis brevibus consecutivis inter officia vocat, exempli gratia, ad geocoding vel ad database.
    • Longum I/O manet, ut translationes retis vel orbis legit.
    • Donec data parsing.
    • Longum opus cpu.
    • Sectiones codicis quae non sunt necessariae ad ultimum exitum obtinendum et amoveri vel differri possunt.
  2. Plane intellige in quo ordine quid dicatur, et quid fit quando operatio.
    Service Tracing, OpenTracing et Jaeger
    Ex his constare potest, exempli gratia, Petitio ad ministerium WS pervenerunt -> ministerium WS additae notitiae per R servitium -> postulationem ad V ministerium missum -> ipsum V ministerium oneratum multum notitiae R e. ministerium -> ad P ministerium -> ministerium P ivit rursus ad ministerium R -> ministerium V neglecta effectus et ad servitium J -> rediit et tunc demum responsio ad servitium rediit WS, manens aliquid aliud in computare. subiectum.
    Sine tali vestigio vel documenta accurata per totum processum, difficillimum est intelligere quid agatur cum primum codicem inspicientes et codicem per diversa officia dispersum et post fasciculum spherae et interfaces latens.
  3. Collectio informationum de arbore exsecutionis pro analysi subsequenti differenda. In singulis executionis scaena indicia addere potes ad vestigium quod in hoc statu praesto est et deinde quid initus notitiae ad similem missionem spectare. Exempli gratia:
    • Sed rutrum sapien id
    • iura
    • Genus lectus modus
    • Log aut errorem supplicium
  4. Conversi vestigia in metri subset et ulterius analysis iam in metri forma.

Quod vestigium leg. Span

Est palmi notio ducens, hoc est analogum tigillum unius, ad consolandum. Spa habet:

  • Nomen consuetum est nomen methodi, quae supplicium est
  • Nomen servitutis in quo palmus generatus est
  • Proprium unique ID
  • Quaedam meta informationis in forma clavis/pretii quae in ea initium est. Exempli gratia: methodus parametri vel modus per errorem vel non
  • Initium et finis temporum huic spatio
  • Parentis spatium ID

Quodlibet spatium ad palmum collectorem mittitur, ut in datorum reconderetur, quia postea quam primum exsecutionem explevit recensionis. In futurum, lignum omnium palmorum iungendo a parente id aedificare potes. Cum resolvendo, invenire potes, exempli gratia, omnes palmos in aliquo servitio, quod plusquam aliquod tempus accepit. Praeterea, eundo ad certum spatium vide totam arborem supra et infra hoc spatium.

Service Tracing, OpenTracing et Jaeger

Apertura, Jagger et quomodo eam ad incepta nostra implevimus?

Est vexillum commune opentracein quo describit quomodo et quid colligendum sit, sine ligatione vestigandi ad certas inserendas linguas. Exempli gratia, in Java, omne opus cum vestigiis per apertum API commune exercetur, et sub eo, exempli gratia, Jaeger vel exsecutio inanis defectus, qui nihil occultari potest.
Nos utens Here Jaeger quasi exsequendum Opentraceum. Pluribus constat partibus;

Service Tracing, OpenTracing et Jaeger

  • Jaeger-agens localis est agentis qui in unaquaque machina et servitia consuevit inaugurari in eam initium facere in portum localem defaltam. Si agens non est, tunc vestigia omnium officiorum in hac machina plerumque debilitata sunt
  • Jaeger-coector - omnes agentes vestigia collectas ad eam mittunt et eas in datorum delectorum emittit
  • database in cassandra praelata est, sed elastica inquisitione utimur, exsecutiones sunt pro duobus aliis databases et in- memoria exsequenda quae nihil in disco servat.
  • Jaeger-quaestio servitium est quod datorum datorum reditque iam collectae vestigia analysi
  • Jaeger-ui interfacies telae est vestigia quaerendi et videndi, quod ad jaeger-query

Service Tracing, OpenTracing et Jaeger

Pars separata dici potest exsecutionem opentrae Jaeger ad linguas specificas, per quas mittuntur palmi ad jaeger-agentem.
Connectens Jagger in Java descendit ad exsequendum io.opentracing.Tracer interface, post quem omnia vestigia per illam ad verum agente volabunt.

Service Tracing, OpenTracing et Jaeger

Etiam elementum vernum coniungere potes opentracing ver-nubes starter and implementation from Jaeger aper-ver-jaeger-nubes starter quae sponte configurabit typum ad omnia quae per haec elementa transeunt, ex. gr. petitiones moderatoris, petitiones datorum per jdbc, etc.

Vestigia logging in Java

Alicubi in summo gradu, primus Span creandus est, hoc ipso facto fieri potest, exempli gratia, a verno moderatore cum petitio recipitur, vel manually si nulla est. Transmittitur deinde per Scopum inferius. Si quis methodus infra Spanam addere vult, hodiernam activum Spanum ex Scope capit, novum Span creat, et parentem suum span activum proveniens dicit, ac novum Span activum facit. Cum officia externa vocant, spatium hodiernum illis activum praetermittitur, et illa officia novas palmos cum hoc spatio faciunt.
Exempli gratia totum opus Tracer percurrit, illud per DI mechanismum vel GlobalTracer.get () ut global variabilis machina, si DI mechanismus non operatur. Defalta, si tractus initialis non fuerit, NoopTracer redibit qui nihil agit.
Praeterea, scopum currente a tractore per ScopeManager obtinetur, novus scopus ex currenti cum ligatione novi palmi creatur, et postea Scopus creatus clauditur, qui spatium creatum claudit et priorem scopum ad priorem revertitur. activum. Scopus filo alligatus est, ideo cum multi-filati programmatis, non debes oblivisci spatium activum in aliud stamina transferre, ad ulteriorem scopum alterius stamina cum hoc spatio referente.

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)) {
                ...
            }
        });
    }
}

Ad programmationem multi-filam, adsunt etiam TracedExecutorService et similes involucris quae sponte transmittunt spatium currentem ad sequelam cum opera asynchrona immittuntur:

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

Ad externa http petitiones est TracingHttpClient

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

Difficultates subii

  • Faba et DI non semper operantur si tractus non adhibetur in servitio vel componente, tum Autowired Tracer operari non potest et GlobalTracer.get ().
  • Annotationes non laborant si non sit componentis vel servitii, vel si modus a finitimo eiusdem generis modus vocetur. Diligenter inspicias quae opera et vestigium manualis creationis adhibeas si @Traced non fungitur. Potes etiam addere compilator additicium pro java annotationibus, tum ubique laborare.
  • In tabernus ver et verna vetus, apertio fons nubis autoconfigurationis ob cimices in DI non operatur, si vestigia in veris componentibus ad operandum automatice vis, id facere potes per analogiam cum 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
  • Experiri cum opibus non operatur in groovy, experiri debes tandem.
  • Quaelibet religio suum fontem habere debet.application.nomen sub quo vestigium initium erit. Quod separatim nomen venditionis probat, ne quid intersit.
  • Si GlobalTracer et tomcat uteris, omnia officia currentia in hoc tomo unum GlobalTracerum habent, ergo omnes idem nomen servitutis habebunt.
  • Cum vestigia methodi adieceris, pro certo debes esse quod toties in ansa non dicitur. Necessarium est unum commune omnium vocationum vestigium addere, quod totum tempus laboris praestat. Alioquin onus excessus creabitur.
  • Quondam in jaeger-ui, nimis multa petita sunt vestigia permulta, et quia responsum non exspectaverunt, iterum fecerunt. Quam ob rem, Jaeger-quaestio multum memoriae edere incepit ac retardare elasticum. Adiuva per restarting jaeger-query

Sampling, recondere ac viewing vestigia

Tria sunt genera vestigia sampling:

  1. Constat quae mittit et salvat omnia vestigia.
  2. Probabilistica quae Filtra cum aliqua probabilitate vestigantia.
  3. Ratelimiting qui numerus vestigia per alterum limitat. Hos occasus in cliente configurare potes, vel agentis jaeger vel exactoris. Nunc utimur const 1 in acervo aestimatoris, cum non sint plurimae petitiones, sed longum tempus. In posterum, si hoc onus nimiam vim exerit in ratione, potes eum circumscribere.

Si cassandra uteris, tunc tantum defaltam reponit per duos dies vestigia. Nos utens elasticsearch et vestigia in omne tempus reposita nec deleta sunt. Index separatus singulis diebus creatur, exempli gratia: Jaeger-service-2019-03-04. In posterum, vestigia veterum purgatio latae sententiae configurare debes.

Ut vestigia videre debes:

  • Servitutem qua vis vestigia emittere, exempli gratia, tomcat7-default pro servitio quod in tomcat currit et nomen proprium habere non potest.
  • Deinde operandi tempus, temporis intervallum et tempus minimum operationis, exempli gratia ex 10 secundis, ad longum supplicium sumendum.
    Service Tracing, OpenTracing et Jaeger
  • Vade ad unum vestigia, et vide quid ibi retardatio.
    Service Tracing, OpenTracing et Jaeger

Etiam si petitio aliqua id nota est, vestigium per hoc id per tag inquisitionem invenire potes, si id id in vestigio vestigandi initium est.

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

Articles

Video

Source: www.habr.com