Runtime metrics (legacy agent)
The following content pertains to
AppOptics agents are no long receiving updates. The new SolarWinds Observability libraries are regularly updated with new features and improvements. If you are still relying on the AppOptics agents and your components are supported by the new libraries, consider migrating to SolarWinds Observability.
If you have already transitioned to the new SolarWinds Observability Nodejs Library, see the SolarWinds Nodejs Library documentation for runtime metrics information.
SolarWinds Observability libraries are not compatible with AppOptics agents. Do not use a mix of SolarWinds Observability libraries and AppOptics agents to instrument applications that are part of a distributed trace.
Node.js runtime metrics are gathered and reported by the node agent transparently to the application. The metrics cover the interval being reported, e.g., the CPU usage reported covers the interval, not the entire time the application has been running. All time-based metrics are reported in microseconds (millionths of a second).
These metrics are available throughout the AppOptics system to build dashboards and alerts. Reporting is enabled by default and make available the metrics described below. To disable reporting please refer to the runtimeMetrics
property or APPOPTICS_RUNTIME_METRICS
environment variable in the configuration guide.
CPU metrics are the same data as node's process.cpuUsage() function returns.
Metric | Description |
trace.node.process.cpuUsage.user | process.cpuUsage().user |
trace.node.process.cpuUsage.system | process.cpuUsage().system |
Memory metrics are taken from process.memoryUsage() and v8.getHeapStatistics().
Metric | Description |
trace.node.process.memoryUsage.rss | resident set size |
trace.node.process.memoryUsage.heapTotal | bytes in v8 heap |
trace.node.process.memoryUsage.heapUsed | bytes used in v8 heap |
trace.node.process.memoryUsage.external | bytes for C++ objects bound to JS objects managed by v8 |
trace.node.v8.heapStatistics.total_heap_size | bytes allocated by v8 for the heap |
trace.node.v8.heapStatistics.heap_size_executable | bytes for compiled bytecode |
trace.node.v8.heapStatistics.total_physical_size | committed size of heap |
trace.node.v8.heapStatistics.total_available_size | bytes available |
trace.node.v8.heapStatistics.used_heap_size | bytes used by application data |
trace.node.v8.heapStatistics.heap_size_limit | absolute limit the heap cannot exceed |
trace.node.v8.heapStatistics.malloced_memory | amount of memory obtained via malloc |
trace.node.v8.heapStatistics.peak_malloced_memory | peak amount of memory obtained via malloc |
Garbage collection metrics are gathered by the appoptics-bindings C++ node addon and measure how long major and minor garbage collection events take. They use the v8 garbage collection callbacks which provide a part of the garbage collection cost. These times are indicative of the costs of garbage collection but should not be used as absolute values. Garbage collection in node is increasingly being moved to interleaved and background mechanisms that neither compete with the application for resources nor can be accurately measured in a meaningful way.
Metric | Description |
trace.node.gc.count | count of major and minor GC events |
trace.node.gc.time | microseconds taken by the GC events |
trace.node.gc.[major|minor].count | count of GC events |
trace.node.gc.[major|minor].p50 | 50th percentile time |
trace.node.gc.[major|minor].p75 | 75th percentile time |
trace.node.gc.[major|minor].p90 | 90th percentile time |
trace.node.gc.[major|minor].p95 | 95th percentile time |
trace.node.gc.[major|minor].p99 | 99th percentile time |
trace.node.gc.[major|minor].min | minimum time |
trace.node.gc.[major|minor].max | maximum time |
trace.node.gc.[major|minor].mean | arithmetic mean |
trace.node.gc.[major|minor].stddev | standard deviation |
Eventloop metrics are gathered by the appoptics-bindings C++ node addon. They measure how long the application portion of the eventloop takes to execute. The percentiles are generally the most informative metrics because infrequent longer eventloop delays have little impact on the application.
Metric | Description |
trace.node.eventloop.p50 | 50th percentile time to complete |
trace.node.eventloop.p75 | 75th percentile time to complete |
trace.node.eventloop.p90 | 90th percentile time to complete |
trace.node.eventloop.p95 | 95th percentile time to complete |
trace.node.eventloop.p99 | 99th percentile time to complete |
trace.node.eventloop.min | Minimum time to complete |
trace.node.eventloop.max | maximum time to complete |
trace.node.eventloop.mean | arithmetic mean of time to complete |
trace.node.eventloop.stddev | standard deviation of time to complete |