Open jloveridge opened 3 years ago
Same here! Node v14.15.2
Warning: Accessing non-existent property '__ddProbeAttached__' of module exports inside circular dependency
Same here, Node v14.16.1
It's internal code unfortunately (so I cannot share it at this time), but my team managed to replace the appmetrics module completely in Node.js 14.x using methods available in the standard library
Any update on this issue?
@jokeyrhyme can you explain how you removed this package and got the required metrics?
os.cpus()
, os.freemem()
, os.totalmem()
, perf_hooks.PerformanceObserver
, perf_hooks.monitorEventLoopDelay()
, etc to collect datathis is what i could come up with
// timer start time
let trackingTime = process.hrtime();
// last cpu usage to get difference from current cpu usage (the diff will give usage over timer period)
let lastCpuUsage = process.cpuUsage();
// histogram for event loop monitoring
const histogram = perf_hooks.monitorEventLoopDelay();
histogram.enable();
// monitor cpu, memory, event loop
const monitor = () => {
// end time for the timer (diff from start time by passing as arg)
// hrtime gives nanosecond resolution ([0] seconds, [1] remaining nanoseconds)
const delta = process.hrtime(trackingTime);
const nanosec = delta[0] * 1e9 + delta[1];
// get cpu usage (user and system)
const cpuUsage = process.cpuUsage();
// diff from last cpu usage to get % usage over timer interval
const userUsage = ((cpuUsage.user - lastCpuUsage.user) / nanosec) * 1000;
const systemUsage = ((cpuUsage.system - lastCpuUsage.system) / nanosec) * 1000;
transportClient.gauge('cpu.process', userUsage);
transportClient.gauge('cpu.system', systemUsage);
// update last cpu usage for next timer cycle
lastCpuUsage = cpuUsage;
// get process memory usage
// Resident Set Size, is the amount of space occupied in the main memory device
// (that is a subset of the total allocated memory) for the process
// including all C++ and JavaScript objects and code
const memoryUsage = process.memoryUsage();
transportClient.gauge('memory.process.physical', memoryUsage.rss);
transportClient.gauge('eventloop.latency.min', histogram.min / 1e6);
transportClient.gauge('eventloop.latency.max', histogram.max / 1e6);
transportClient.gauge('eventloop.latency.avg', histogram.mean / 1e6);
// reset histogram to start new cycle
histogram.reset();
// update timer time for getting diff for next cycle
trackingTime = process.hrtime();
};
// collect process metrics every 5 seconds
setInterval(monitor, 5000);
any comments are welcome
When appmetrics is required on node 14 multiple messages are emitted which state:
The following simple script can reproduce the issue: