Skip to main content

Exposed metrics

The following tables describe the metrics exported by OBI in both OpenTelemetry (OTEL) and Prometheus formats, for use within Coralogix observability workflows.

Application metrics

FamilyName (OTEL)Name (Prometheus)TypeUnitDescription
Applicationhttp.client.request.durationhttp_client_request_duration_secondsHistogramseconds

Time taken for outbound HTTP calls from client applications

Applicationhttp.client.request.body.sizehttp_client_request_body_size_bytesHistogrambytes

Size of HTTP request payloads sent by clients

Applicationhttp.client.response.body.sizehttp_client_response_body_size_bytesHistogrambytes

Size of HTTP responses received by clients

Applicationhttp.server.request.durationhttp_server_request_duration_secondsHistogramseconds

Time taken to process inbound HTTP requests on servers

Applicationhttp.server.request.body.sizehttp_server_request_body_size_bytesHistogrambytes

Size of incoming HTTP request bodies received by servers

Applicationhttp.server.response.body.sizehttp_server_response_body_size_bytesHistogrambytes

Size of outbound HTTP response bodies sent by servers

Applicationrpc.client.durationrpc_client_duration_secondsHistogramseconds

Duration of outbound gRPC service calls

Applicationrpc.server.durationrpc_server_duration_secondsHistogramseconds

Duration of inbound RPC service calls

Applicationsql.client.durationsql_client_duration_secondsHistogramseconds

Time taken for SQL client operations (Experimental)

Applicationredis.client.durationredis_client_duration_secondsHistogramseconds

Time taken for Redis client operations (Experimental)

Applicationdb.server.operation.durationdb_server_operation_duration_secondsHistogramseconds

Server-side database operation duration for Redis, Memcached, and SQL.

Applicationmessaging.publish.durationmessaging_publish_durationHistogramseconds

Time taken for message publication (e.g., Kafka) (Experimental)

Applicationmessaging.process.durationmessaging_process_durationHistogramseconds

Time taken for message processing (e.g., Kafka) (Experimental)

Application Processprocess.cpu.timeprocess_cpu_time_seconds_totalCounterseconds

Total CPU time consumed, broken down by state (system/user/wait)

Application Processprocess.cpu.utilizationprocess_cpu_utilization_ratioGaugeratio

CPU time usage change over time, normalized by CPU count

Application Processprocess.memory.usageprocess_memory_usage_bytesUpDownCounterbytes

Physical memory currently used

Application Processprocess.memory.virtualprocess_memory_virtual_bytesUpDownCounterbytes

Virtual memory committed

Application Processprocess.disk.ioprocess_disk_io_bytes_totalCounterbytes

Total disk I/O bytes transferred

Application Processprocess.network.ioprocess_network_io_bytes_totalCounterbytes

Total network I/O bytes transferred

Go runtimego.memory.limitgo_memory_limit_bytesUpDownCounterbytes

Go runtime memory limit.

Go runtimego.memory.gc.goalgo_memory_gc_goal_bytesUpDownCounterbytes

Committed GC heap goal. Omitted when the runtime offset and the fallback symbol are both unavailable.

Go runtimego.memory.gc.cyclesgo_memory_gc_cycles_totalCountercount

Completed Go GC cycles.

Go runtimego.memory.gc.pause.durationgo_memory_gc_pause_duration_secondsHistogramseconds

Cumulative stop-the-world GC pause duration. Requires Go 1.22+.

Go runtimego.memory.usedgo_memory_used_bytesUpDownCounterbytes

Memory in use, broken down by go.memory.type (stack or other). Requires Go 1.23+.

Go runtimego.memory.allocatedgo_memory_allocated_bytes_totalCounterbytes

Cumulative allocated heap bytes. Requires Go 1.23+.

Go runtimego.memory.allocationsgo_memory_allocations_totalCounterallocations

Cumulative heap allocation count. Requires Go 1.23+.

Go runtimego.cpu.timego_cpu_time_seconds_totalCounterseconds

Cumulative CPU time, broken down by go.cpu.state (and go.cpu.detailed_state where applicable). Requires Go 1.23+.

Go runtimego.goroutine.countgo_goroutine_countUpDownCountergoroutines

Current goroutine count. Omitted rather than reported partially when the runtime snapshot is incomplete.

Go runtimego.processor.limitgo_processor_limitUpDownCounterprocessors

GOMAXPROCS value.

Go runtimego.config.gogcgo_config_gogc_percentUpDownCounterpercent

GOGC configuration value.

Go runtimego.schedule.durationgo_schedule_duration_secondsHistogramseconds

Cumulative runnable-to-running goroutine latency. Requires Go 1.20+.

JVMjvm.memory.usedjvm_memory_used_bytesUpDownCounterbytes

HotSpot JVM memory used, per memory pool. Sum by jvm.memory.type for heap and non-heap totals.

JVMjvm.memory.committedjvm_memory_committed_bytesUpDownCounterbytes

HotSpot JVM memory committed.

JVMjvm.memory.limitjvm_memory_limit_bytesUpDownCounterbytes

HotSpot JVM memory limit.

JVMjvm.memory.used_after_last_gcjvm_memory_used_after_last_gc_bytesUpDownCounterbytes

HotSpot JVM memory used after the last GC.

JVMjvm.class.loadedjvm_class_loaded_totalCounterclasses

Classes loaded since JVM start.

JVMjvm.class.unloadedjvm_class_unloaded_totalCounterclasses

Classes unloaded since JVM start.

JVMjvm.class.countjvm_class_countUpDownCounterclasses

Classes currently loaded.

JVMjvm.thread.countjvm_thread_countUpDownCounterthreads

Current executing thread count.

JVMjvm.cpu.timejvm_cpu_time_seconds_totalCounterseconds

CPU time used by the JVM process.

JVMjvm.cpu.countjvm_cpu_countUpDownCounterprocessors

Processors available to the JVM.

JVMjvm.cpu.recent_utilizationjvm_cpu_recent_utilization_ratioGaugeratio

Recent CPU utilization of the JVM process.

Node.js runtimenodejs.eventloop.utilizationnodejs_eventloop_utilization_ratioGaugeratio

Event-loop utilization. Requires Node.js 14.10+.

Node.js runtimenodejs.eventloop.timenodejs_eventloop_time_seconds_totalCounterseconds

Cumulative event-loop time, broken down by nodejs.eventloop.state (idle or active). Requires Node.js 14.10+.

Node.js runtimenodejs.eventloop.delay.*nodejs_eventloop_delay_*_secondsGaugeseconds

Event-loop delay statistics. min, max, mean, stddev, p50, p90, p99. Requires Node.js 16.14+.

Node.js runtimev8js.gc.durationv8js_gc_duration_secondsHistogramseconds

V8 garbage-collection pause duration.

Node.js runtimev8js.memory.heap.usedv8js_memory_heap_used_bytesUpDownCounterbytes

V8 heap memory used.

Node.js runtimev8js.memory.heap.limitv8js_memory_heap_limit_bytesUpDownCounterbytes

V8 heap memory limit.

Node.js runtimev8js.memory.heap.space.available_sizev8js_memory_heap_space_available_size_bytesUpDownCounterbytes

Available V8 heap-space memory.

Node.js runtimev8js.memory.heap.space.physical_sizev8js_memory_heap_space_physical_size_bytesUpDownCounterbytes

Physical (committed) V8 heap-space memory.

Python runtimecpython.gc.collectionscpython_gc_collections_totalCountercollections

CPython garbage-collection runs.

Python runtimecpython.gc.collected_objectscpython_gc_collected_objects_totalCounterobjects

Objects reclaimed by the CPython garbage collector.

Python runtimecpython.gc.uncollectable_objectscpython_gc_uncollectable_objects_totalCounterobjects

Uncollectable objects found by the CPython garbage collector.

Networkobi.network.flow.bytesobi_network_flow_bytesCounterbytes

Bytes transmitted between source and destination network endpoints

Networkobi.network.flow.packetsobi_network_flow_packets_totalCountercount

Packets transmitted between source and destination network endpoints.

Networkobi.network.inter.zone.bytesobi_network_inter_zone_bytesCounterbytes

Cross-zone network bytes within Kubernetes clusters (Experimental)

Networkobi.stat.tcp.ioobi_stat_tcp_io_bytes_totalCounterbytes

TCP bytes transferred.

Networkobi.stat.tcp.retransmitsobi_stat_tcp_retransmits_totalCountercount

TCP segment retransmissions.

Networkobi.stat.tcp.failed.connectionsobi_stat_tcp_failed_connections_totalCounterconnections

TCP failed connection count, labeled by network.tcp.handshake.role (client or server) and failure reason. The reason label is disabled by default.

Enabling runtime metrics

Go, JVM, Node.js, and Python runtime metrics are all enabled through the shared application_runtime metrics feature; jvm_runtime_metrics.sampling_interval controls the JVM sampling rate. The Node.js event-loop and V8 metrics require the Node.js injector (nodejs.enabled, on by default). Each metric's introducing release is noted in the table above; see the OBI changelog for details.

Span and service-graph metrics

OBI also supports exporting Span metrics and Service Graph metrics, which can be toggled via feature configuration options.

The legacy application_span and application_span_sizes span-metric features are deprecated in favor of application_span_otel. The deprecated features still emit the Grafana-convention traces_spanmetrics_* metrics and keep working with a startup warning, while application_span_otel emits the OpenTelemetry-convention traces_span_metrics_* metrics. application_span_sizes has no direct replacement. The closest are http.server.request.body.size and http.server.response.body.size. Enabling a legacy feature together with application_span_otel is rejected, and the * (all) selector keeps only the OTel version.

Metric naming

Prometheus metric names are derived from their OTLP definitions rather than declared separately. On the OTLP export path, target_info, traces_target_info, traces_host_info, traces_span_metrics_calls_total, and traces_span_metrics_duration are emitted in dot notation as target.info, traces.target.info, traces.host.info, traces.span.metrics.calls, and traces.span.metrics.duration; the Prometheus scrape path keeps the underscore names. For heap totals, sum jvm.memory.used by jvm.memory.type (the OBI-specific obi.jvm.heap.used metric is not emitted). The OBI changelog lists the metric renames this introduced.

Span attributes

Database duration metrics carry the db.namespace, db.response.status_code, and server.port attributes, and messaging spans carry messaging.operation.name.

HTTP spans emit url.query by default when present, and client HTTP spans include the query string in url.full. Sensitive parameters are automatically redacted; extend the redaction list with OTEL_EBPF_SENSITIVE_QUERY_PARAMS_ADD. Java route harvesting is disabled by default, so the http.route attribute on Java spans falls back to the raw URL path.

Capture defaults

Database error response bodies are not included on SQL spans by default. Enable that capture explicitly if you need sql.client.duration spans to carry database error responses.

DNS calls are excluded from span metrics and service-graph metrics by default. SQL operations (MySQL, PostgreSQL, MariaDB) are reported as SERVER spans, so aggregations or filters that key on span kind for SQL traffic should account for that.

Attribute selection for OBI metrics

Metrics and attributes follow OTEL dot.notation but are converted to Prometheus underscore_notation in Prometheus outputs.

You can customize which attributes are exposed or hidden by using the attributes->select section in the configuration.

Common attributes table

MetricsAttribute NameDefault
Application (all)http.request.methodShown
Application (all)http.response.status_codeShown
Application (all)http.routeShown if routes config exists
Application (all)k8s.daemonset.nameShown if Kubernetes metadata is on
Application (all)k8s.deployment.nameShown if Kubernetes metadata is on
Application (all)k8s.namespace.nameShown if Kubernetes metadata is on
Application (all)k8s.node.nameShown if Kubernetes metadata is on
Application (all)k8s.owner.nameShown if Kubernetes metadata is on
Application (all)k8s.pod.nameShown if Kubernetes metadata is on
Application (all)k8s.container.nameShown if Kubernetes metadata is on
Application (all)k8s.pod.start_timeShown if Kubernetes metadata is on
Application (all)k8s.pod.uidShown if Kubernetes metadata is on
Application (all)k8s.replicaset.nameShown if Kubernetes metadata is on
Application (all)k8s.statefulset.nameShown if Kubernetes metadata is on
Application (all)k8s.cluster.nameShown if Kubernetes metadata is on
Application (all)service.nameResource attribute only
Application (all)service.namespaceResource attribute only
Application (all)target.instanceShown
Application (all)url.pathHidden
Application (client)server.addressHidden
Application (client)server.portHidden
Application (process)various process-specific attributes (e.g., process.command, process.executable.path)Shown if process metrics enabled
Application RPCvarious RPC attributes (rpc.method, rpc.grpc.status_code)Shown
Application (server)client.addressHidden
Networknetwork-specific attributes (e.g., src.address, dst.address, iface)Mostly hidden or conditional
Network (TCP failed connections)network.tcp.handshake.role: values client or serverShown

Note: The obi.network.inter.zone.bytes metric shares the same attribute set as obi.network.flow.bytes but all are hidden by default except k8s.cluster.name, src.zone, and dst.zone.

Note: service.name and service.namespace are no longer default metric labels. They are still reported as resource attributes (through target_info and the OTLP resource). To keep them on metric series, add them to the metric's include list under attributes->select.

Internal OBI metrics

OBI provides several internal Prometheus-format metrics to help monitor its own health and activity:

NameTypeDescription
obi_ebpf_tracer_flushesHistogramSize of trace groups flushed from eBPF to pipeline
obi_otel_metric_exports_totalCounterTotal metric batches sent to remote OTEL collector
obi_otel_metric_export_errors_totalCounterVecCount of OTEL metric export errors by type
obi_otel_trace_exports_totalCounterTotal trace batches sent to remote OTEL collector
obi_otel_trace_export_errors_totalCounterVecCount of OTEL trace export errors by type
obi_prometheus_http_requests_totalCounterVecPrometheus scrape endpoint request count by port and path
obi_instrumented_processesGaugeVecNumber of processes instrumented by Obi, labeled by process name
obi_instrumentation_errors_totalCounterVecInstrumentation errors, labeled by process executable name and error type
obi_avoided_servicesGaugeVecServices OBI skipped because they already carry OpenTelemetry instrumentation, labeled by service name, namespace, and telemetry type. Emitted only when the avoided-services internal metric is enabled.
obi_internal_build_infoGaugeVecObi version information including build timestamp and commit ID

obi_otel_trace_exports_total and obi_otel_trace_export_errors_total reflect the real outcome reported by the exporter rather than counting attempts. Internal metrics also carry host metadata as resource attributes.

OBI can additionally report eBPF probe latency and map utilization, but that family is opt-in. It requires the ebpf metrics feature with a Prometheus endpoint, or internal_metrics.bpf_metric_scrape_interval set above zero. See the upstream BPF metrics collection reference for the metric names and labels.

Last updated on
On this page
Was this page helpful?