Moleculer: Trace spans have inconsistent timing

Created on 26 Mar 2021  路  4Comments  路  Source: moleculerjs/moleculer

Prerequisites

Please answer the following questions for yourself before submitting an issue.

  • [x] I am running the latest version
  • [x] I checked the documentation and found no answer
  • [x] I checked to make sure that this issue has not already been filed
  • [x] I'm reporting the issue to the correct repository

Current Behavior

Trace spans from moleculer don't line up with spans from third-party modules or moleculer spans from remote services (different processes/brokers). For example, the red span in the image below should fully contain the green and purple spans under it.

span offset

Expected Behavior

Span times should be as consistent as possible across all modules.

Screen Shot 2021-03-26 at 4 50 01 PM

Failure Information

This is caused by clock drift in moleculer's tracing/now.js implementation, which is used to set the startTime of spans. The following code and charts test this behavior and show how much a span could drift compared to Date.now().

Reproduce code snippet

const now = require("./src/tracing/now");

// Output CSV for analysis
console.log(`"Time elapsed (ms)","Drift (ms)"`);

const startTime = Date.now();
console.log(`0,${now() - startTime}`);

setInterval(() => {
    const time = Date.now();
    console.log(`${time - startTime},${now() - time}`);
}, 5e3);

Here are charts from two sample runs:

20 minutes, 25 ms drift
span time drift

60 minutes, 42 ms max drift
span time drift 2

Context

  • Moleculer version: master
  • NodeJS version: 12.21.0
  • Operating System: macOS 10.15.7
Tracing Low Review Needed Enhancement good first issue

Most helpful comment

@intech I made the fix while the second test was running 馃榿

All 4 comments

@icebob maybe we should go to perf_hook?

@ngraef fast PR, thanks!

@intech I made the fix while the second test was running 馃榿

I also think that it is necessary to fix a similar problem in other places of the project, such as rate limiter and metrics. 馃

Was this page helpful?
0 / 5 - 0 ratings

Related issues

HighSoftWare96 picture HighSoftWare96  路  4Comments

Kamil93 picture Kamil93  路  3Comments

DeividasJackus picture DeividasJackus  路  4Comments

dylanwulf picture dylanwulf  路  4Comments

thatisuday picture thatisuday  路  3Comments