opentelemetry-node-metrics
Advanced tools
Comparing version 1.0.3 to 1.1.0
@@ -1,5 +0,5 @@ | ||
const {MeterProvider} = require('@opentelemetry/metrics') | ||
const {MeterProvider} = require('@opentelemetry/sdk-metrics-base') | ||
const {PrometheusExporter} = require('@opentelemetry/exporter-prometheus') | ||
const exporter = new PrometheusExporter({startServer: true}, () => { | ||
const exporter = new PrometheusExporter({port: 9464, startServer: true}, () => { | ||
// eslint-disable-next-line no-console | ||
@@ -19,1 +19,6 @@ console.log( | ||
require('opentelemetry-node-metrics')(meterProvider) | ||
// With opentelemetry 0.27, the proecss somehow doesn't keep any open handles | ||
// and stops without that | ||
setInterval(() => {}, 1000) |
{ | ||
"name": "opentelemetry-node-metrics-example", | ||
"version": "1.0.0", | ||
"lockfileVersion": 1, | ||
"lockfileVersion": 2, | ||
"requires": true, | ||
"packages": { | ||
"": { | ||
"name": "opentelemetry-node-metrics-example", | ||
"version": "1.0.0", | ||
"license": "ISC", | ||
"dependencies": { | ||
"@opentelemetry/exporter-prometheus": "^0.27.0", | ||
"@opentelemetry/sdk-metrics-base": "^0.27.0", | ||
"opentelemetry-node-metrics": "file:.." | ||
} | ||
}, | ||
"..": { | ||
"version": "0.0.0-placeholder", | ||
"license": "Apache-2.0" | ||
}, | ||
"node_modules/@opentelemetry/api": { | ||
"version": "1.0.3", | ||
"resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.0.3.tgz", | ||
"integrity": "sha512-puWxACExDe9nxbBB3lOymQFrLYml2dVOrd7USiVRnSbgXE+KwBu+HxFvxrzfqsiSda9IWsXJG1ef7C1O2/GmKQ==", | ||
"peer": true, | ||
"engines": { | ||
"node": ">=8.0.0" | ||
} | ||
}, | ||
"node_modules/@opentelemetry/api-metrics": { | ||
"version": "0.27.0", | ||
"resolved": "https://registry.npmjs.org/@opentelemetry/api-metrics/-/api-metrics-0.27.0.tgz", | ||
"integrity": "sha512-tB79288bwjkdhPNpw4UdOEy3bacVwtol6Que7cAu8KEJ9ULjRfSiwpYEwJY/oER3xZ7zNFz0uiJ7N1jSiotpVA==", | ||
"engines": { | ||
"node": ">=8.0.0" | ||
} | ||
}, | ||
"node_modules/@opentelemetry/core": { | ||
"version": "1.0.1", | ||
"resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.0.1.tgz", | ||
"integrity": "sha512-90nQ2X6b/8X+xjcLDBYKooAcOsIlwLRYm+1VsxcX5cHl6V4CSVmDpBreQSDH/A21SqROzapk6813008SatmPpQ==", | ||
"dependencies": { | ||
"@opentelemetry/semantic-conventions": "1.0.1" | ||
}, | ||
"engines": { | ||
"node": ">=8.5.0" | ||
}, | ||
"peerDependencies": { | ||
"@opentelemetry/api": ">=1.0.0 <1.1.0" | ||
} | ||
}, | ||
"node_modules/@opentelemetry/exporter-prometheus": { | ||
"version": "0.27.0", | ||
"resolved": "https://registry.npmjs.org/@opentelemetry/exporter-prometheus/-/exporter-prometheus-0.27.0.tgz", | ||
"integrity": "sha512-fbdV+iQAv/WNhiv57C6+9Lwyhc6yJuDy3eyYSyPSVPgCyclGS3fvyTaWNwPbrkE53W8zZHPm+88rAaeQgEjo0w==", | ||
"dependencies": { | ||
"@opentelemetry/api-metrics": "0.27.0", | ||
"@opentelemetry/core": "1.0.1", | ||
"@opentelemetry/sdk-metrics-base": "0.27.0" | ||
}, | ||
"engines": { | ||
"node": ">=8.0.0" | ||
}, | ||
"peerDependencies": { | ||
"@opentelemetry/api": "^1.0.0" | ||
} | ||
}, | ||
"node_modules/@opentelemetry/sdk-metrics-base": { | ||
"version": "0.27.0", | ||
"resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics-base/-/sdk-metrics-base-0.27.0.tgz", | ||
"integrity": "sha512-HpiWI4sVNsjp3FGyUlc24KvUY2Whl4PQVwcbA/gWv2kHaLQrDJrWC+3rjUR+87Mrd0nsiqJ85xhGFU6IK8h7gg==", | ||
"dependencies": { | ||
"@opentelemetry/api-metrics": "0.27.0", | ||
"@opentelemetry/core": "1.0.1", | ||
"@opentelemetry/resources": "1.0.1", | ||
"lodash.merge": "^4.6.2" | ||
}, | ||
"engines": { | ||
"node": ">=8.0.0" | ||
}, | ||
"peerDependencies": { | ||
"@opentelemetry/api": "^1.0.0" | ||
} | ||
}, | ||
"node_modules/@opentelemetry/sdk-metrics-base/node_modules/@opentelemetry/resources": { | ||
"version": "1.0.1", | ||
"resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.0.1.tgz", | ||
"integrity": "sha512-p8DevOaAEepPucUtImR4cZKHOE2L1jgQAtkdZporV+XnxPA/HqCHPEESyUVuo4f5M0NUlL6k5Pba75KwNJlTRg==", | ||
"dependencies": { | ||
"@opentelemetry/core": "1.0.1", | ||
"@opentelemetry/semantic-conventions": "1.0.1" | ||
}, | ||
"engines": { | ||
"node": ">=8.0.0" | ||
}, | ||
"peerDependencies": { | ||
"@opentelemetry/api": ">=1.0.0 <1.1.0" | ||
} | ||
}, | ||
"node_modules/@opentelemetry/semantic-conventions": { | ||
"version": "1.0.1", | ||
"resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.0.1.tgz", | ||
"integrity": "sha512-7XU1sfQ8uCVcXLxtAHA8r3qaLJ2oq7sKtEwzZhzuEXqYmjW+n+J4yM3kNo0HQo3Xp1eUe47UM6Wy6yuAvIyllg==", | ||
"engines": { | ||
"node": ">=8.0.0" | ||
} | ||
}, | ||
"node_modules/lodash.merge": { | ||
"version": "4.6.2", | ||
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", | ||
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" | ||
}, | ||
"node_modules/opentelemetry-node-metrics": { | ||
"resolved": "..", | ||
"link": true | ||
} | ||
}, | ||
"dependencies": { | ||
"@opentelemetry/api": { | ||
"version": "0.14.0", | ||
"resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-0.14.0.tgz", | ||
"integrity": "sha512-L7RMuZr5LzMmZiQSQDy9O1jo0q+DaLy6XpYJfIGfYSfoJA5qzYwUP3sP1uMIQ549DvxAgM3ng85EaPTM/hUHwQ==", | ||
"requires": { | ||
"@opentelemetry/context-base": "^0.14.0" | ||
} | ||
"version": "1.0.3", | ||
"resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.0.3.tgz", | ||
"integrity": "sha512-puWxACExDe9nxbBB3lOymQFrLYml2dVOrd7USiVRnSbgXE+KwBu+HxFvxrzfqsiSda9IWsXJG1ef7C1O2/GmKQ==", | ||
"peer": true | ||
}, | ||
"@opentelemetry/context-base": { | ||
"version": "0.14.0", | ||
"resolved": "https://registry.npmjs.org/@opentelemetry/context-base/-/context-base-0.14.0.tgz", | ||
"integrity": "sha512-sDOAZcYwynHFTbLo6n8kIbLiVF3a3BLkrmehJUyEbT9F+Smbi47kLGS2gG2g0fjBLR/Lr1InPD7kXL7FaTqEkw==" | ||
"@opentelemetry/api-metrics": { | ||
"version": "0.27.0", | ||
"resolved": "https://registry.npmjs.org/@opentelemetry/api-metrics/-/api-metrics-0.27.0.tgz", | ||
"integrity": "sha512-tB79288bwjkdhPNpw4UdOEy3bacVwtol6Que7cAu8KEJ9ULjRfSiwpYEwJY/oER3xZ7zNFz0uiJ7N1jSiotpVA==" | ||
}, | ||
"@opentelemetry/core": { | ||
"version": "0.14.0", | ||
"resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-0.14.0.tgz", | ||
"integrity": "sha512-HJ4VM0cV6c5qjdW7C7koB2IT4ADunCOehxnKFRslQkbDqAEA1w42AZ9679siYALpWYxNqcJyqF2jxCNtfNHa6Q==", | ||
"version": "1.0.1", | ||
"resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.0.1.tgz", | ||
"integrity": "sha512-90nQ2X6b/8X+xjcLDBYKooAcOsIlwLRYm+1VsxcX5cHl6V4CSVmDpBreQSDH/A21SqROzapk6813008SatmPpQ==", | ||
"requires": { | ||
"@opentelemetry/api": "^0.14.0", | ||
"@opentelemetry/context-base": "^0.14.0", | ||
"semver": "^7.1.3" | ||
"@opentelemetry/semantic-conventions": "1.0.1" | ||
} | ||
}, | ||
"@opentelemetry/exporter-prometheus": { | ||
"version": "0.14.0", | ||
"resolved": "https://registry.npmjs.org/@opentelemetry/exporter-prometheus/-/exporter-prometheus-0.14.0.tgz", | ||
"integrity": "sha512-pgNqKxk3AHugW5niVqAmcdcIuGTUYjK0ylIN5x2FWxLExVnD1aj9ZEsuNfl7vfr1sxBNJ4jhTVV4ixVirmKFeQ==", | ||
"version": "0.27.0", | ||
"resolved": "https://registry.npmjs.org/@opentelemetry/exporter-prometheus/-/exporter-prometheus-0.27.0.tgz", | ||
"integrity": "sha512-fbdV+iQAv/WNhiv57C6+9Lwyhc6yJuDy3eyYSyPSVPgCyclGS3fvyTaWNwPbrkE53W8zZHPm+88rAaeQgEjo0w==", | ||
"requires": { | ||
"@opentelemetry/api": "^0.14.0", | ||
"@opentelemetry/core": "^0.14.0", | ||
"@opentelemetry/metrics": "^0.14.0" | ||
"@opentelemetry/api-metrics": "0.27.0", | ||
"@opentelemetry/core": "1.0.1", | ||
"@opentelemetry/sdk-metrics-base": "0.27.0" | ||
} | ||
}, | ||
"@opentelemetry/metrics": { | ||
"version": "0.14.0", | ||
"resolved": "https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.14.0.tgz", | ||
"integrity": "sha512-gIC/ykE7V+5qKybSHr+83ATTaXEZLUdADLjLmd8ZIu1+I7dx8ZM+OJCmWyGyZppD1ZlclvhybQDUQOCRKpWMWQ==", | ||
"@opentelemetry/sdk-metrics-base": { | ||
"version": "0.27.0", | ||
"resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics-base/-/sdk-metrics-base-0.27.0.tgz", | ||
"integrity": "sha512-HpiWI4sVNsjp3FGyUlc24KvUY2Whl4PQVwcbA/gWv2kHaLQrDJrWC+3rjUR+87Mrd0nsiqJ85xhGFU6IK8h7gg==", | ||
"requires": { | ||
"@opentelemetry/api": "^0.14.0", | ||
"@opentelemetry/core": "^0.14.0", | ||
"@opentelemetry/resources": "^0.14.0" | ||
"@opentelemetry/api-metrics": "0.27.0", | ||
"@opentelemetry/core": "1.0.1", | ||
"@opentelemetry/resources": "1.0.1", | ||
"lodash.merge": "^4.6.2" | ||
}, | ||
"dependencies": { | ||
"@opentelemetry/resources": { | ||
"version": "1.0.1", | ||
"resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.0.1.tgz", | ||
"integrity": "sha512-p8DevOaAEepPucUtImR4cZKHOE2L1jgQAtkdZporV+XnxPA/HqCHPEESyUVuo4f5M0NUlL6k5Pba75KwNJlTRg==", | ||
"requires": { | ||
"@opentelemetry/core": "1.0.1", | ||
"@opentelemetry/semantic-conventions": "1.0.1" | ||
} | ||
} | ||
} | ||
}, | ||
"@opentelemetry/resources": { | ||
"version": "0.14.0", | ||
"resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-0.14.0.tgz", | ||
"integrity": "sha512-7XVML4HxvoH6kWY+x0mhMc5m0a2YBvPCTSX7yAqyp9XIGvFpdjzAE2ggJ40DZrL1sPv9f0QYAbnIKFDVLBTfGA==", | ||
"requires": { | ||
"@opentelemetry/api": "^0.14.0", | ||
"@opentelemetry/core": "^0.14.0" | ||
} | ||
"@opentelemetry/semantic-conventions": { | ||
"version": "1.0.1", | ||
"resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.0.1.tgz", | ||
"integrity": "sha512-7XU1sfQ8uCVcXLxtAHA8r3qaLJ2oq7sKtEwzZhzuEXqYmjW+n+J4yM3kNo0HQo3Xp1eUe47UM6Wy6yuAvIyllg==" | ||
}, | ||
"lru-cache": { | ||
"version": "6.0.0", | ||
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", | ||
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", | ||
"requires": { | ||
"yallist": "^4.0.0" | ||
} | ||
"lodash.merge": { | ||
"version": "4.6.2", | ||
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", | ||
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" | ||
}, | ||
"opentelemetry-node-metrics": { | ||
"version": "file:.." | ||
}, | ||
"semver": { | ||
"version": "7.3.4", | ||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", | ||
"integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", | ||
"requires": { | ||
"lru-cache": "^6.0.0" | ||
} | ||
}, | ||
"yallist": { | ||
"version": "4.0.0", | ||
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", | ||
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" | ||
} | ||
} | ||
} |
@@ -7,7 +7,6 @@ { | ||
"dependencies": { | ||
"@opentelemetry/exporter-prometheus": "^0.14.0", | ||
"@opentelemetry/metrics": "^0.14.0", | ||
"@opentelemetry/exporter-prometheus": "^0.27.0", | ||
"@opentelemetry/sdk-metrics-base": "^0.27.0", | ||
"opentelemetry-node-metrics": "file:.." | ||
}, | ||
"devDependencies": {}, | ||
"scripts": { | ||
@@ -14,0 +13,0 @@ "test": "echo \"Error: no test specified\" && exit 1" |
17
index.js
@@ -6,3 +6,16 @@ module.exports = function setupNodeMetrics (meterProvider, config) { | ||
const meter = meterProvider.getMeter('opentelemetry-node-metrics') | ||
let meter = meterProvider.getMeter('opentelemetry-node-metrics') | ||
// keep opentelemetry compatibility with v0.24.x | ||
if (!meter.createObservableGauge) { | ||
meter = { | ||
createObservableGauge: meter.createValueObserver.bind(meter), | ||
createHistogram: meter.createValueRecorder.bind(meter), | ||
createCounter: meter.createCounter.bind(meter), | ||
createUpDownCounter: meter.createUpDownCounter.bind(meter) | ||
} | ||
} | ||
require('./metrics/version')(meter, config) | ||
require('./metrics/processStartTime')(meter, config) | ||
require('./metrics/eventLoopLag')(meter, config) | ||
@@ -18,4 +31,2 @@ require('./metrics/gc')(meter, config) | ||
require('./metrics/processRequests')(meter, config) | ||
require('./metrics/processStartTime')(meter, config) | ||
require('./metrics/version')(meter, config) | ||
} |
@@ -23,44 +23,41 @@ 'use strict' | ||
const lag = meter.createValueObserver(prefix + NODEJS_EVENTLOOP_LAG, { | ||
const lag = meter.createObservableGauge(prefix + NODEJS_EVENTLOOP_LAG, { | ||
description: 'Lag of event loop in seconds.' | ||
}).bind(labels) | ||
const lagMin = meter.createValueObserver(prefix + NODEJS_EVENTLOOP_LAG_MIN, { | ||
const lagMin = meter.createObservableGauge(prefix + NODEJS_EVENTLOOP_LAG_MIN, { | ||
description: 'The minimum recorded event loop delay.' | ||
}).bind(labels) | ||
const lagMax = meter.createValueObserver(prefix + NODEJS_EVENTLOOP_LAG_MAX, { | ||
const lagMax = meter.createObservableGauge(prefix + NODEJS_EVENTLOOP_LAG_MAX, { | ||
description: 'The maximum recorded event loop delay.' | ||
}).bind(labels) | ||
const lagMean = meter.createValueObserver(prefix + NODEJS_EVENTLOOP_LAG_MEAN, { | ||
const lagMean = meter.createObservableGauge(prefix + NODEJS_EVENTLOOP_LAG_MEAN, { | ||
description: 'The mean of the recorded event loop delays.' | ||
}).bind(labels) | ||
const lagStddev = meter.createValueObserver(prefix + NODEJS_EVENTLOOP_LAG_STDDEV, { | ||
const lagStddev = meter.createObservableGauge(prefix + NODEJS_EVENTLOOP_LAG_STDDEV, { | ||
description: 'The standard deviation of the recorded event loop delays.' | ||
}).bind(labels) | ||
const lagP50 = meter.createValueObserver(prefix + NODEJS_EVENTLOOP_LAG_P50, { | ||
const lagP50 = meter.createObservableGauge(prefix + NODEJS_EVENTLOOP_LAG_P50, { | ||
description: 'The 50th percentile of the recorded event loop delays.' | ||
}).bind(labels) | ||
const lagP90 = meter.createValueObserver(prefix + NODEJS_EVENTLOOP_LAG_P90, { | ||
const lagP90 = meter.createObservableGauge(prefix + NODEJS_EVENTLOOP_LAG_P90, { | ||
description: 'The 90th percentile of the recorded event loop delays.' | ||
}).bind(labels) | ||
const lagP99 = meter.createValueObserver(prefix + NODEJS_EVENTLOOP_LAG_P99, { | ||
const lagP99 = meter.createObservableGauge(prefix + NODEJS_EVENTLOOP_LAG_P99, { | ||
description: 'The 99th percentile of the recorded event loop delays.' | ||
}).bind(labels) | ||
}, async () => { | ||
const startTime = process.hrtime() | ||
await new Promise((resolve) => setImmediate(() => resolve())) | ||
function reportEventloopLag (start) { | ||
const delta = process.hrtime(start) | ||
const delta = process.hrtime(startTime) | ||
const nanosec = (delta[0] * 1e9) + delta[1] | ||
const seconds = nanosec / 1e9 | ||
lag.update(seconds) | ||
} | ||
meter.createBatchObserver((observerBatchResult) => { | ||
setImmediate(reportEventloopLag, process.hrtime()) | ||
lagMin.update(histogram.min / 1e9) | ||
@@ -73,4 +70,5 @@ lagMax.update(histogram.max / 1e9) | ||
lagP99.update(histogram.percentile(99) / 1e9) | ||
}) | ||
}).bind(labels) | ||
lag.update(0) | ||
} | ||
@@ -77,0 +75,0 @@ |
@@ -10,3 +10,3 @@ 'use strict' | ||
const histogram = meter.createValueRecorder(prefix + NODEJS_GC_DURATION_SECONDS, { | ||
const histogram = meter.createHistogram(prefix + NODEJS_GC_DURATION_SECONDS, { | ||
description: 'Garbage collection duration by kind, one of major, minor, incremental or weakcb.', | ||
@@ -13,0 +13,0 @@ boundaries |
@@ -0,1 +1,2 @@ | ||
'use strict' | ||
const safeMemoryUsage = require('./helpers/safeMemoryUsage') | ||
@@ -7,15 +8,13 @@ const NODEJS_HEAP_SIZE_TOTAL = 'nodejs_heap_size_total_bytes' | ||
module.exports = (meter, {labels, prefix}) => { | ||
const heapSizeTotal = meter.createValueObserver(prefix + NODEJS_HEAP_SIZE_TOTAL, { | ||
const heapSizeTotal = meter.createObservableGauge(prefix + NODEJS_HEAP_SIZE_TOTAL, { | ||
description: 'Process heap size from Node.js in bytes.' | ||
}).bind(labels) | ||
const heapSizeUsed = meter.createValueObserver(prefix + NODEJS_HEAP_SIZE_USED, { | ||
const heapSizeUsed = meter.createObservableGauge(prefix + NODEJS_HEAP_SIZE_USED, { | ||
description: 'Process heap size used from Node.js in bytes.' | ||
}).bind(labels) | ||
const externalMemUsed = meter.createValueObserver(prefix + NODEJS_EXTERNAL_MEMORY, { | ||
const externalMemUsed = meter.createObservableGauge(prefix + NODEJS_EXTERNAL_MEMORY, { | ||
description: 'Node.js external memory size in bytes.' | ||
}).bind(labels) | ||
meter.createBatchObserver(() => { | ||
}, () => { | ||
const memUsage = safeMemoryUsage() | ||
@@ -26,3 +25,3 @@ if (!memUsage) return | ||
if (memUsage.external !== undefined) externalMemUsed.update(memUsage.external) | ||
}) | ||
}).bind(labels) | ||
} | ||
@@ -29,0 +28,0 @@ |
@@ -0,1 +1,2 @@ | ||
'use strict' | ||
const v8 = require('v8') | ||
@@ -10,17 +11,31 @@ const METRICS = ['total', 'used', 'available'] | ||
module.exports = (meter, {prefix, labels}) => { | ||
const gauges = {} | ||
for (const metricType of METRICS) { | ||
gauges[metricType] = meter.createValueObserver(prefix + NODEJS_HEAP_SIZE[metricType], { | ||
description: `Process heap space size ${metricType} from Node.js in bytes.` | ||
}) | ||
} | ||
const boundMetricsBySpace = {} | ||
meter.createBatchObserver((observerBatchResult) => { | ||
const total = meter.createObservableGauge(prefix + NODEJS_HEAP_SIZE.total, { | ||
description: `Process heap space size total from Node.js in bytes.` | ||
}) | ||
const used = meter.createObservableGauge(prefix + NODEJS_HEAP_SIZE.used, { | ||
description: `Process heap space size used from Node.js in bytes.` | ||
}) | ||
const available = meter.createObservableGauge(prefix + NODEJS_HEAP_SIZE.available, { | ||
description: `Process heap space size available from Node.js in bytes.` | ||
}, () => { | ||
for (const space of v8.getHeapSpaceStatistics()) { | ||
const spaceName = space.space_name.substr(0, space.space_name.indexOf('_space')) | ||
observerBatchResult.observe({space: spaceName, ...labels}, [ | ||
gauges.total.observation(space.space_size), | ||
gauges.used.observation(space.space_used_size), | ||
gauges.available.observation(space.space_available_size) | ||
]) | ||
let bound = boundMetricsBySpace[space.space_name] | ||
if (!bound) { | ||
const spaceName = space.space_name.substr(0, space.space_name.indexOf('_space')) | ||
boundMetricsBySpace[space.space_name] = { | ||
total: total.bind({...labels, space: spaceName}), | ||
used: used.bind({...labels, space: spaceName}), | ||
available: available.bind({...labels, space: spaceName}) | ||
} | ||
bound = boundMetricsBySpace[space.space_name] | ||
} | ||
bound.total.update(space.space_size) | ||
bound.used.update(space.space_used_size) | ||
bound.available.update(space.space_available_size) | ||
} | ||
@@ -27,0 +42,0 @@ }) |
@@ -0,1 +1,2 @@ | ||
'use strict' | ||
function createAggregatorByObjectName () { | ||
@@ -2,0 +3,0 @@ const all = new Map() |
@@ -0,1 +1,2 @@ | ||
'use strict' | ||
// process.memoryUsage() can throw on some platforms, see https://github.com/siimon/prom-client/issues/67 | ||
@@ -2,0 +3,0 @@ module.exports = function safeMemoryUsage () { |
@@ -0,1 +1,2 @@ | ||
'use strict' | ||
const linuxVariant = require('./osMemoryHeapLinux') | ||
@@ -6,3 +7,3 @@ const safeMemoryUsage = require('./helpers/safeMemoryUsage') | ||
function notLinuxVariant (meter, {prefix, labels}) { | ||
const boundMeter = meter.createValueObserver(prefix + PROCESS_RESIDENT_MEMORY, { | ||
const boundMeter = meter.createObservableGauge(prefix + PROCESS_RESIDENT_MEMORY, { | ||
description: 'Resident memory size in bytes.' | ||
@@ -9,0 +10,0 @@ }, () => { |
@@ -32,15 +32,13 @@ 'use strict' | ||
module.exports = (meter, {prefix, labels}) => { | ||
const residentMemGauge = meter.createValueObserver(prefix + PROCESS_RESIDENT_MEMORY, { | ||
const residentMemGauge = meter.createObservableGauge(prefix + PROCESS_RESIDENT_MEMORY, { | ||
description: 'Resident memory size in bytes.' | ||
}).bind(labels) | ||
const virtualMemGauge = meter.createValueObserver(prefix + PROCESS_VIRTUAL_MEMORY, { | ||
const virtualMemGauge = meter.createObservableGauge(prefix + PROCESS_VIRTUAL_MEMORY, { | ||
description: 'Virtual memory size in bytes.' | ||
}).bind(labels) | ||
const heapSizeMemGauge = meter.createValueObserver(prefix + PROCESS_HEAP, { | ||
const heapSizeMemGauge = meter.createObservableGauge(prefix + PROCESS_HEAP, { | ||
description: 'Process heap size in bytes.' | ||
}).bind(labels) | ||
meter.createBatchObserver(() => { | ||
}, () => { | ||
try { | ||
@@ -62,3 +60,3 @@ // Sync I/O is often problematic, but /proc isn't really I/O, it | ||
} | ||
}) | ||
}).bind(labels) | ||
} | ||
@@ -65,0 +63,0 @@ |
@@ -0,1 +1,2 @@ | ||
'use strict' | ||
const PROCESS_CPU_USER_SECONDS = 'process_cpu_user_seconds_total' | ||
@@ -18,5 +19,3 @@ const PROCESS_CPU_SYSTEM_SECONDS = 'process_cpu_system_seconds_total' | ||
description: 'Total user and system CPU time spent in seconds.' | ||
}).bind(labels) | ||
meter.createBatchObserver(() => { | ||
}, () => { | ||
const cpuUsage = process.cpuUsage() | ||
@@ -30,3 +29,3 @@ const userUsageMicros = cpuUsage.user - lastCpuUsage.user | ||
cpuUsageCounter.add((userUsageMicros + systemUsageMicros) / 1e6) | ||
}) | ||
}).bind(labels) | ||
} | ||
@@ -33,0 +32,0 @@ |
@@ -0,1 +1,2 @@ | ||
'use strict' | ||
const {createAggregatorByObjectName} = require('./helpers/processMetricsHelpers') | ||
@@ -11,3 +12,3 @@ | ||
const aggregateByObjectName = createAggregatorByObjectName() | ||
const activeHandlesMetric = meter.createValueObserver(prefix + NODEJS_ACTIVE_HANDLES, { | ||
const activeHandlesMetric = meter.createObservableGauge(prefix + NODEJS_ACTIVE_HANDLES, { | ||
description: 'Number of active libuv handles grouped by handle type. Every handle type is C++ class name.' // eslint-disable-line max-len | ||
@@ -18,3 +19,3 @@ }, () => { | ||
const boundTotalMetric = meter.createValueObserver(prefix + NODEJS_ACTIVE_HANDLES_TOTAL, { | ||
const boundTotalMetric = meter.createObservableGauge(prefix + NODEJS_ACTIVE_HANDLES_TOTAL, { | ||
description: 'Total number of active handles.' | ||
@@ -21,0 +22,0 @@ }, () => { |
@@ -0,1 +1,2 @@ | ||
'use strict' | ||
const fs = require('fs') | ||
@@ -2,0 +3,0 @@ const PROCESS_MAX_FDS = 'process_max_fds' |
@@ -0,1 +1,2 @@ | ||
'use strict' | ||
const fs = require('fs') | ||
@@ -8,3 +9,3 @@ const process = require('process') | ||
const boundInstrument = meter.createValueObserver(prefix + PROCESS_OPEN_FDS, { | ||
const boundInstrument = meter.createObservableGauge(prefix + PROCESS_OPEN_FDS, { | ||
description: 'Number of open file descriptors.' | ||
@@ -11,0 +12,0 @@ }, () => { |
@@ -0,1 +1,2 @@ | ||
'use strict' | ||
const {createAggregatorByObjectName} = require('./helpers/processMetricsHelpers') | ||
@@ -11,3 +12,3 @@ | ||
const aggregateByObjectName = createAggregatorByObjectName() | ||
const activeRequestsMetric = meter.createValueObserver(prefix + NODEJS_ACTIVE_REQUESTS, { | ||
const activeRequestsMetric = meter.createObservableGauge(prefix + NODEJS_ACTIVE_REQUESTS, { | ||
description: 'Number of active libuv requests grouped by request type. Every request type is C++ class name.' // eslint-disable-line max-len | ||
@@ -18,3 +19,3 @@ }, () => { | ||
const boundTotalRequests = meter.createValueObserver(prefix + NODEJS_ACTIVE_REQUESTS_TOTAL, { | ||
const boundTotalRequests = meter.createObservableGauge(prefix + NODEJS_ACTIVE_REQUESTS_TOTAL, { | ||
description: 'Total number of active requests.' | ||
@@ -21,0 +22,0 @@ }, () => { |
@@ -0,1 +1,2 @@ | ||
'use strict' | ||
const startInSeconds = Math.round((Date.now() / 1000) - process.uptime()) | ||
@@ -2,0 +3,0 @@ const PROCESS_START_TIME = 'process_start_time_seconds' |
@@ -0,1 +1,2 @@ | ||
'use strict' | ||
const NODE_VERSION_INFO = 'nodejs_version_info' | ||
@@ -2,0 +3,0 @@ |
{ | ||
"name": "opentelemetry-node-metrics", | ||
"version": "1.0.3", | ||
"version": "1.1.0", | ||
"description": "An adoption of the node process metrics of prom-client", | ||
@@ -10,4 +10,3 @@ "main": "index.js", | ||
"scripts": { | ||
"test": "echo No tests to run", | ||
"postversion": "/release/node_modules/.bin/set-ci" | ||
"test": "echo No tests to run" | ||
}, | ||
@@ -39,9 +38,9 @@ "author": "marcbachmann", | ||
"service": "drone", | ||
"commit": "191958fec1330dabe9c8c2fa5c56570c7ee57057", | ||
"build": "7", | ||
"commit": "312a157d3a651da86a75e0db245184d3e1d4dcb4", | ||
"build": "12", | ||
"branch": "master", | ||
"isPr": false, | ||
"slug": "marcbachmann/opentelemetry-node-metrics", | ||
"date": "2021-09-12T13:54:11.780Z" | ||
"date": "2021-12-14T14:08:15.378Z" | ||
} | ||
} |
Sorry, the diff of this file is not supported yet
47316
829