Skip to content

Commit 312a157

Browse files
committed
feat: Upgrade to opentelemetry@0.27, keeps compatibility with v0.24
1 parent 5d35da1 commit 312a157

14 files changed

+242
-121
lines changed

example/index.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
const {MeterProvider} = require('@opentelemetry/metrics')
1+
const {MeterProvider} = require('@opentelemetry/sdk-metrics-base')
22
const {PrometheusExporter} = require('@opentelemetry/exporter-prometheus')
33

4-
const exporter = new PrometheusExporter({startServer: true}, () => {
4+
const exporter = new PrometheusExporter({port: 9464, startServer: true}, () => {
55
// eslint-disable-next-line no-console
66
console.log(
77
`Prometheus scrape endpoint: http://localhost:%s%s`,
@@ -16,3 +16,8 @@ const meterProvider = new MeterProvider({
1616
})
1717

1818
require('opentelemetry-node-metrics')(meterProvider)
19+
20+
21+
// With opentelemetry 0.27, the proecss somehow doesn't keep any open handles
22+
// and stops without that
23+
setInterval(() => {}, 1000)

example/package-lock.json

Lines changed: 158 additions & 58 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/package.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@
44
"description": "",
55
"main": "index.js",
66
"dependencies": {
7-
"@opentelemetry/exporter-prometheus": "^0.14.0",
8-
"@opentelemetry/metrics": "^0.14.0",
7+
"@opentelemetry/exporter-prometheus": "^0.27.0",
8+
"@opentelemetry/sdk-metrics-base": "^0.27.0",
99
"opentelemetry-node-metrics": "file:.."
1010
},
11-
"devDependencies": {},
1211
"scripts": {
1312
"test": "echo \"Error: no test specified\" && exit 1"
1413
},

index.js

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,20 @@ module.exports = function setupNodeMetrics (meterProvider, config) {
33
config.prefix = config.prefix ? config.prefix : ''
44
config.labels = config.labels ? config.labels : {}
55

6-
const meter = meterProvider.getMeter('opentelemetry-node-metrics')
6+
let meter = meterProvider.getMeter('opentelemetry-node-metrics')
7+
8+
// keep opentelemetry compatibility with v0.24.x
9+
if (!meter.createObservableGauge) {
10+
meter = {
11+
createObservableGauge: meter.createValueObserver.bind(meter),
12+
createHistogram: meter.createValueRecorder.bind(meter),
13+
createCounter: meter.createCounter.bind(meter),
14+
createUpDownCounter: meter.createUpDownCounter.bind(meter)
15+
}
16+
}
17+
18+
require('./metrics/version')(meter, config)
19+
require('./metrics/processStartTime')(meter, config)
720
require('./metrics/eventLoopLag')(meter, config)
821
require('./metrics/gc')(meter, config)
922
require('./metrics/heapSizeAndUsed')(meter, config)
@@ -14,6 +27,4 @@ module.exports = function setupNodeMetrics (meterProvider, config) {
1427
require('./metrics/processMaxFileDescriptors')(meter, config)
1528
require('./metrics/processOpenFileDescriptors')(meter, config)
1629
require('./metrics/processRequests')(meter, config)
17-
require('./metrics/processStartTime')(meter, config)
18-
require('./metrics/version')(meter, config)
1930
}

metrics/eventLoopLag.js

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,47 +20,44 @@ module.exports = (meter, {prefix, labels, eventLoopMonitoringPrecision}) => {
2020

2121
histogram.enable()
2222

23-
const lag = meter.createValueObserver(prefix + NODEJS_EVENTLOOP_LAG, {
23+
const lag = meter.createObservableGauge(prefix + NODEJS_EVENTLOOP_LAG, {
2424
description: 'Lag of event loop in seconds.'
2525
}).bind(labels)
2626

27-
const lagMin = meter.createValueObserver(prefix + NODEJS_EVENTLOOP_LAG_MIN, {
27+
const lagMin = meter.createObservableGauge(prefix + NODEJS_EVENTLOOP_LAG_MIN, {
2828
description: 'The minimum recorded event loop delay.'
2929
}).bind(labels)
3030

31-
const lagMax = meter.createValueObserver(prefix + NODEJS_EVENTLOOP_LAG_MAX, {
31+
const lagMax = meter.createObservableGauge(prefix + NODEJS_EVENTLOOP_LAG_MAX, {
3232
description: 'The maximum recorded event loop delay.'
3333
}).bind(labels)
3434

35-
const lagMean = meter.createValueObserver(prefix + NODEJS_EVENTLOOP_LAG_MEAN, {
35+
const lagMean = meter.createObservableGauge(prefix + NODEJS_EVENTLOOP_LAG_MEAN, {
3636
description: 'The mean of the recorded event loop delays.'
3737
}).bind(labels)
3838

39-
const lagStddev = meter.createValueObserver(prefix + NODEJS_EVENTLOOP_LAG_STDDEV, {
39+
const lagStddev = meter.createObservableGauge(prefix + NODEJS_EVENTLOOP_LAG_STDDEV, {
4040
description: 'The standard deviation of the recorded event loop delays.'
4141
}).bind(labels)
4242

43-
const lagP50 = meter.createValueObserver(prefix + NODEJS_EVENTLOOP_LAG_P50, {
43+
const lagP50 = meter.createObservableGauge(prefix + NODEJS_EVENTLOOP_LAG_P50, {
4444
description: 'The 50th percentile of the recorded event loop delays.'
4545
}).bind(labels)
4646

47-
const lagP90 = meter.createValueObserver(prefix + NODEJS_EVENTLOOP_LAG_P90, {
47+
const lagP90 = meter.createObservableGauge(prefix + NODEJS_EVENTLOOP_LAG_P90, {
4848
description: 'The 90th percentile of the recorded event loop delays.'
4949
}).bind(labels)
5050

51-
const lagP99 = meter.createValueObserver(prefix + NODEJS_EVENTLOOP_LAG_P99, {
51+
const lagP99 = meter.createObservableGauge(prefix + NODEJS_EVENTLOOP_LAG_P99, {
5252
description: 'The 99th percentile of the recorded event loop delays.'
53-
}).bind(labels)
53+
}, async () => {
54+
const startTime = process.hrtime()
55+
await new Promise((resolve) => setImmediate(() => resolve()))
5456

55-
function reportEventloopLag (start) {
56-
const delta = process.hrtime(start)
57+
const delta = process.hrtime(startTime)
5758
const nanosec = (delta[0] * 1e9) + delta[1]
5859
const seconds = nanosec / 1e9
5960
lag.update(seconds)
60-
}
61-
62-
meter.createBatchObserver((observerBatchResult) => {
63-
setImmediate(reportEventloopLag, process.hrtime())
6461

6562
lagMin.update(histogram.min / 1e9)
6663
lagMax.update(histogram.max / 1e9)
@@ -69,8 +66,9 @@ module.exports = (meter, {prefix, labels, eventLoopMonitoringPrecision}) => {
6966
lagP50.update(histogram.percentile(50) / 1e9)
7067
lagP90.update(histogram.percentile(90) / 1e9)
7168
lagP99.update(histogram.percentile(99) / 1e9)
72-
})
69+
}).bind(labels)
7370

71+
lag.update(0)
7472
}
7573

7674
module.exports.metricNames = [

metrics/gc.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const DEFAULT_GC_DURATION_BUCKETS = [0.001, 0.01, 0.1, 1, 2, 5]
77
module.exports = (meter, {prefix, labels, gcDurationBuckets}) => {
88
const boundaries = gcDurationBuckets || DEFAULT_GC_DURATION_BUCKETS
99

10-
const histogram = meter.createValueRecorder(prefix + NODEJS_GC_DURATION_SECONDS, {
10+
const histogram = meter.createHistogram(prefix + NODEJS_GC_DURATION_SECONDS, {
1111
description: 'Garbage collection duration by kind, one of major, minor, incremental or weakcb.',
1212
boundaries
1313
})

0 commit comments

Comments
 (0)