1.5 KiB
1.5 KiB
SmartMetrics Implementation Hints
Prometheus Integration
The package now supports exposing metrics in Prometheus format through two mechanisms:
- Direct Export:
getPrometheusFormattedMetrics()
returns metrics in Prometheus text exposition format - HTTP Endpoint:
enablePrometheusEndpoint(port)
starts an HTTP server that exposes metrics on/metrics
Architecture Decisions
- We use the prom-client library's default collectors for standard Node.js metrics
- Custom gauges are created for our calculated metrics (CPU percentage, memory percentage, memory bytes)
- The
getMetrics()
method calculates values directly rather than parsing the Prometheus registry JSON - For metrics like
nodejs_active_handles_total
andnodejs_active_requests_total
, we return 0 ingetMetrics()
since these require deprecated Node.js APIs, but the Prometheus collectors still track the real values
Consolidation Approach
Initially, we were mixing two approaches:
- Extracting values from the Prometheus registry JSON for default metrics
- Creating custom gauges for calculated metrics
We consolidated by:
- Calculating all values directly in
getMetrics()
where possible - Only using the Prometheus registry for the text exposition format
- This eliminates the dependency on parsing registry JSON and makes the code cleaner
Memory Calculation
The package tracks memory usage across the main process and all child processes using pidtree
and pidusage
. This provides a more comprehensive view than just the main process memory.