diff --git a/CHANGELOG.md b/CHANGELOG.md index 41b3c037..91e6cbd2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,7 @@ This release marks our first release under the Prometheus umbrella. ### Added +- Add debug logging for metrics collection failures. - Node 26 added to the test matrix - Expanded benchmarking code - new WorkerRegistry to provide equivalent support to AggregatorRegistry diff --git a/benchmarks/index.js b/benchmarks/index.js index ef05209b..90c4211c 100644 --- a/benchmarks/index.js +++ b/benchmarks/index.js @@ -14,8 +14,9 @@ 'use strict'; +const { debuglog } = require('node:util'); +const debug = debuglog('prom:benchmark'); const Benchmark = require('faceoff').default; -const debug = require('debug')('benchmark'); /** * Async suite workaround. benchmark-regression forwards no options to diff --git a/lib/metrics/eventLoopLag.js b/lib/metrics/eventLoopLag.js index af5090f8..8b75293c 100644 --- a/lib/metrics/eventLoopLag.js +++ b/lib/metrics/eventLoopLag.js @@ -14,14 +14,17 @@ 'use strict'; +const { debuglog } = require('node:util'); const Gauge = require('../gauge'); +const debug = debuglog('prom:metrics:event-loop-lag'); + // Check if perf_hooks module is available let perf_hooks; try { perf_hooks = require('perf_hooks'); -} catch { - // node version is too old +} catch (error) { + debug('perf_hooks module is unavailable: %o', error); } // Reported always. diff --git a/lib/metrics/gc.js b/lib/metrics/gc.js index 3d9b60d7..3ea49bf6 100644 --- a/lib/metrics/gc.js +++ b/lib/metrics/gc.js @@ -13,14 +13,17 @@ // limitations under the License. 'use strict'; +const { debuglog } = require('node:util'); const Histogram = require('../histogram'); +const debug = debuglog('prom:metrics:gc'); + let perf_hooks; try { perf_hooks = require('perf_hooks'); -} catch { - // node version is too old +} catch (error) { + debug('perf_hooks module is unavailable: %o', error); } const NODEJS_GC_DURATION_SECONDS = 'nodejs_gc_duration_seconds'; diff --git a/lib/metrics/helpers/safeMemoryUsage.js b/lib/metrics/helpers/safeMemoryUsage.js index eb586515..1b72e40c 100644 --- a/lib/metrics/helpers/safeMemoryUsage.js +++ b/lib/metrics/helpers/safeMemoryUsage.js @@ -14,11 +14,16 @@ 'use strict'; +const { debuglog } = require('node:util'); + +const debug = debuglog('prom:metrics:safe-memory-usage'); + // process.memoryUsage() can throw on some platforms, see #67 function safeMemoryUsage() { try { return process.memoryUsage(); - } catch { + } catch (error) { + debug('process.memoryUsage() failed: %o', error); return; } } diff --git a/lib/metrics/helpers/safeRss.js b/lib/metrics/helpers/safeRss.js index dcd35ebd..a4a4ed8d 100644 --- a/lib/metrics/helpers/safeRss.js +++ b/lib/metrics/helpers/safeRss.js @@ -14,11 +14,16 @@ 'use strict'; +const { debuglog } = require('node:util'); + +const debug = debuglog('prom:metrics:safe-rss'); + // process.memoryUsage.rss() can throw on some platforms, see #67 function safeRss() { try { return process.memoryUsage.rss(); - } catch { + } catch (error) { + debug('process.memoryUsage.rss() failed: %o', error); return; } } diff --git a/lib/metrics/osMemoryHeapLinux.js b/lib/metrics/osMemoryHeapLinux.js index 4bdabc45..dbe1652f 100644 --- a/lib/metrics/osMemoryHeapLinux.js +++ b/lib/metrics/osMemoryHeapLinux.js @@ -14,9 +14,12 @@ 'use strict'; +const { debuglog } = require('node:util'); const Gauge = require('../gauge'); const fs = require('fs'); +const debug = debuglog('prom:metrics:os-memory-heap-linux'); + const values = ['VmSize', 'VmRSS', 'VmData']; const PROCESS_RESIDENT_MEMORY = 'process_resident_memory_bytes'; @@ -70,8 +73,8 @@ module.exports = (registry, config = {}) => { residentMemGauge.set(labels, structuredOutput.VmRSS); virtualMemGauge.set(labels, structuredOutput.VmSize); heapSizeMemGauge.set(labels, structuredOutput.VmData); - } catch { - // noop + } catch (error) { + debug('failed to collect Linux memory metrics: %o', error); } }, }); diff --git a/lib/metrics/processMaxFileDescriptors.js b/lib/metrics/processMaxFileDescriptors.js index 81cfe777..0c002d9d 100644 --- a/lib/metrics/processMaxFileDescriptors.js +++ b/lib/metrics/processMaxFileDescriptors.js @@ -14,9 +14,12 @@ 'use strict'; +const { debuglog } = require('node:util'); const Gauge = require('../gauge'); const fs = require('fs'); +const debug = debuglog('prom:metrics:process-max-fds'); + const PROCESS_MAX_FDS = 'process_max_fds'; let maxFds; @@ -34,7 +37,8 @@ module.exports = (registry, config = {}) => { break; } } - } catch { + } catch (error) { + debug('failed to collect maximum file descriptors: %o', error); return; } } diff --git a/lib/metrics/processOpenFileDescriptors.js b/lib/metrics/processOpenFileDescriptors.js index 6569c7d9..3c8150cc 100644 --- a/lib/metrics/processOpenFileDescriptors.js +++ b/lib/metrics/processOpenFileDescriptors.js @@ -14,10 +14,13 @@ 'use strict'; +const { debuglog } = require('node:util'); const Gauge = require('../gauge'); const fs = require('fs'); const process = require('process'); +const debug = debuglog('prom:metrics:process-open-fds'); + const PROCESS_OPEN_FDS = 'process_open_fds'; module.exports = (registry, config = {}) => { @@ -40,8 +43,8 @@ module.exports = (registry, config = {}) => { // Minus 1 to not count the fd that was used by readdirSync(), // it's now closed. this.set(labels, fds.length - 1); - } catch { - // noop + } catch (error) { + debug('failed to collect open file descriptors: %o', error); } }, }); diff --git a/package.json b/package.json index dc4a3eb5..0a6816c9 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,6 @@ "homepage": "https://github.com/prometheus/client_js", "devDependencies": { "@eslint/js": "^9.29.0", - "debug": "^4.4.1", "eslint": "^9.29.0", "eslint-config-prettier": "^10.1.5", "eslint-plugin-jsdoc": "^61.4.1",