Documentation forAppOptics

Runtime metrics (legacy agent)

The following content pertains to runtime metrics for the legacy AppOptics Nodejs Agent.

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

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

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
gc

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

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