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
| Family | Name (OTEL) | Name (Prometheus) | Type | Unit | Description |
|---|---|---|---|---|---|
| Application | http.client.request.duration | http_client_request_duration_seconds | Histogram | seconds | Time taken for outbound HTTP calls from client applications |
| Application | http.client.request.body.size | http_client_request_body_size_bytes | Histogram | bytes | Size of HTTP request payloads sent by clients |
| Application | http.client.response.body.size | http_client_response_body_size_bytes | Histogram | bytes | Size of HTTP responses received by clients |
| Application | http.server.request.duration | http_server_request_duration_seconds | Histogram | seconds | Time taken to process inbound HTTP requests on servers |
| Application | http.server.request.body.size | http_server_request_body_size_bytes | Histogram | bytes | Size of incoming HTTP request bodies received by servers |
| Application | http.server.response.body.size | http_server_response_body_size_bytes | Histogram | bytes | Size of outbound HTTP response bodies sent by servers |
| Application | rpc.client.duration | rpc_client_duration_seconds | Histogram | seconds | Duration of outbound gRPC service calls |
| Application | rpc.server.duration | rpc_server_duration_seconds | Histogram | seconds | Duration of inbound RPC service calls |
| Application | sql.client.duration | sql_client_duration_seconds | Histogram | seconds | Time taken for SQL client operations (Experimental) |
| Application | redis.client.duration | redis_client_duration_seconds | Histogram | seconds | Time taken for Redis client operations (Experimental) |
| Application | messaging.publish.duration | messaging_publish_duration | Histogram | seconds | Time taken for message publication (e.g., Kafka) (Experimental) |
| Application | messaging.process.duration | messaging_process_duration | Histogram | seconds | Time taken for message processing (e.g., Kafka) (Experimental) |
| Application Process | process.cpu.time | process_cpu_time_seconds_total | Counter | seconds | Total CPU time consumed, broken down by state (system/user/wait) |
| Application Process | process.cpu.utilization | process_cpu_utilization_ratio | Gauge | ratio | CPU time usage change over time, normalized by CPU count |
| Application Process | process.memory.usage | process_memory_usage_bytes | UpDownCounter | bytes | Physical memory currently used |
| Application Process | process.memory.virtual | process_memory_virtual_bytes | UpDownCounter | bytes | Virtual memory committed |
| Application Process | process.disk.io | process_disk_io_bytes_total | Counter | bytes | Total disk I/O bytes transferred |
| Application Process | process.network.io | process_network_io_bytes_total | Counter | bytes | Total network I/O bytes transferred |
| Go runtime | go.memory.limit | go_memory_limit_bytes | UpDownCounter | bytes | Go runtime memory limit. Added in OBI v0.10.0. |
| Go runtime | go.memory.gc.goal | go_memory_gc_goal_bytes | UpDownCounter | bytes | Committed GC heap goal. Added in OBI v0.11.0. Omitted when the runtime offset and the fallback symbol are both unavailable. |
| Go runtime | go.memory.gc.cycles | go_memory_gc_cycles_total | Counter | count | Completed Go GC cycles. Added in OBI v0.10.0. |
| Go runtime | go.memory.gc.pause.duration | go_memory_gc_pause_duration_seconds | Histogram | seconds | Cumulative stop-the-world GC pause duration. Added in OBI v0.11.0. Requires Go 1.22+. |
| Go runtime | go.memory.used | go_memory_used_bytes | UpDownCounter | bytes | Memory in use, broken down by go.memory.type (stack or other). Added in OBI v0.11.0. Requires Go 1.23+. |
| Go runtime | go.memory.allocated | go_memory_allocated_bytes_total | Counter | bytes | Cumulative allocated heap bytes. Added in OBI v0.11.0. Requires Go 1.23+. |
| Go runtime | go.memory.allocations | go_memory_allocations_total | Counter | allocations | Cumulative heap allocation count. Added in OBI v0.11.0. Requires Go 1.23+. |
| Go runtime | go.cpu.time | go_cpu_time_seconds_total | Counter | seconds | Cumulative CPU time, broken down by go.cpu.state (and go.cpu.detailed_state where applicable). Added in OBI v0.11.0. Requires Go 1.23+. |
| Go runtime | go.goroutine.count | go_goroutine_count | UpDownCounter | goroutines | Current goroutine count. Added in OBI v0.11.0. Omitted rather than reported partially when the runtime snapshot is incomplete. |
| Go runtime | go.processor.limit | go_processor_limit | UpDownCounter | processors | GOMAXPROCS value. Added in OBI v0.10.0. |
| Go runtime | go.config.gogc | go_config_gogc_percent | UpDownCounter | percent | GOGC configuration value. Added in OBI v0.10.0. |
| Go runtime | go.schedule.duration | go_schedule_duration_seconds | Histogram | seconds | Cumulative runnable-to-running goroutine latency. Added in OBI v0.11.0. Requires Go 1.20+. |
| JVM | jvm.memory.used | jvm_memory_used_bytes | UpDownCounter | bytes | HotSpot JVM memory used, per memory pool. Added in OBI v0.10.0. Sum by jvm.memory.type for heap and non-heap totals. |
| JVM | jvm.memory.committed | jvm_memory_committed_bytes | UpDownCounter | bytes | HotSpot JVM memory committed. Added in OBI v0.10.0. |
| JVM | jvm.memory.limit | jvm_memory_limit_bytes | UpDownCounter | bytes | HotSpot JVM memory limit. Added in OBI v0.10.0. |
| JVM | jvm.memory.used_after_last_gc | jvm_memory_used_after_last_gc_bytes | UpDownCounter | bytes | HotSpot JVM memory used after the last GC. Added in OBI v0.10.0. |
| Network | obi.network.flow.bytes | obi_network_flow_bytes | Counter | bytes | Bytes transmitted between source and destination network endpoints |
| Network | obi.network.flow.packets | obi_network_flow_packets_total | Counter | count | Packets transmitted between source and destination network endpoints. Added in OBI v0.10.0. |
| Network | obi.network.inter.zone.bytes | obi_network_inter_zone_bytes | Counter | bytes | Cross-zone network bytes within Kubernetes clusters (Experimental) |
| Network | obi.stat.tcp.io | obi_stat_tcp_io_bytes_total | Counter | bytes | TCP bytes transferred. Added in OBI v0.10.0. |
| Network | obi.stat.tcp.retransmits | obi_stat_tcp_retransmits_total | Counter | count | TCP segment retransmissions. Added in OBI v0.10.0. The Prometheus name gained the _total suffix in OBI v0.11.0. |
| Network | obi.stat.tcp.failed.connections | obi_stat_tcp_failed_connections_total | Counter | connections | TCP failed connection count, labeled by network.tcp.handshake.role (client or server) and failure reason. Added in OBI v0.9.0. The reason label is disabled by default. The Prometheus name gained the _total suffix in OBI v0.11.0. |
Go runtime and JVM metrics are both enabled through the shared application_runtime metrics feature. From OBI v0.11.0 that is the only way to enable them: the application_jvm alias and the jvm_runtime_metrics.enabled flag were removed, though jvm_runtime_metrics.sampling_interval remains as a sampling control.
OBI also supports exporting Span metrics and Service Graph metrics, which can be toggled via feature configuration options.
From OBI v0.11.0, Prometheus metric names are derived from their OTLP definitions rather than declared separately, which corrected several of them — see the _total suffix notes in the table above and the CUDA GPU renames in What's changed. On the OTLP export path, target_info, traces_target_info, traces_host_info, traces_span_metrics_calls_total, and traces_span_metrics_duration are now 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. The OBI-specific obi.jvm.heap.used metric (obi_jvm_heap_used_bytes) was removed — sum jvm.memory.used by jvm.memory.type for heap totals instead.
From OBI v0.10.0, 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. See What's changed in the overview.
From OBI v0.9.0, database error response bodies are no longer included on SQL spans by default. If you previously relied on sql.client.duration spans carrying database error responses, enable that capture explicitly. See What's changed in the overview.
From OBI v0.7.0+, DNS calls are excluded from span metrics and service-graph metrics by default. SQL operations (MySQL, PostgreSQL, MariaDB) are now reported as SERVER spans, so any aggregations or filters that key on span kind for SQL traffic should be updated accordingly. See What's changed in the overview for details.
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
| Metrics | Attribute Name | Default |
|---|---|---|
| Application (all) | http.request.method | shown |
| Application (all) | http.response.status_code | shown |
| Application (all) | http.route | shown if routes config exists |
| Application (all) | k8s.daemonset.name | shown if Kubernetes metadata is on |
| Application (all) | k8s.deployment.name | shown if Kubernetes metadata is on |
| Application (all) | k8s.namespace.name | shown if Kubernetes metadata is on |
| Application (all) | k8s.node.name | shown if Kubernetes metadata is on |
| Application (all) | k8s.owner.name | shown if Kubernetes metadata is on |
| Application (all) | k8s.pod.name | shown if Kubernetes metadata is on |
| Application (all) | k8s.container.name | shown if Kubernetes metadata is on |
| Application (all) | k8s.pod.start_time | shown if Kubernetes metadata is on |
| Application (all) | k8s.pod.uid | shown if Kubernetes metadata is on |
| Application (all) | k8s.replicaset.name | shown if Kubernetes metadata is on |
| Application (all) | k8s.statefulset.name | shown if Kubernetes metadata is on |
| Application (all) | k8s.cluster.name | shown if Kubernetes metadata is on |
| Application (all) | service.name | shown |
| Application (all) | service.namespace | shown |
| Application (all) | target.instance | shown |
| Application (all) | url.path | hidden |
| Application (client) | server.address | hidden |
| Application (client) | server.port | hidden |
| Application (process) | various process-specific attributes (e.g., process.command, process.executable.path) | shown if process metrics enabled |
| Application RPC | various RPC attributes (rpc.method, rpc.grpc.status_code) | shown |
| Application (server) | client.address | hidden |
| Network | network-specific attributes (e.g., src.address, dst.address, iface) | mostly hidden or conditional |
| Network (TCP failed connections) | network.tcp.handshake.role — values client or server | shown |
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.
Internal OBI metrics
OBI provides several internal Prometheus-format metrics to help monitor its own health and activity:
| Name | Type | Description |
|---|---|---|
obi_ebpf_tracer_flushes | Histogram | Size of trace groups flushed from eBPF to pipeline |
obi_otel_metric_exports_total | Counter | Total metric batches sent to remote OTEL collector |
obi_otel_metric_export_errors_total | CounterVec | Count of OTEL metric export errors by type |
obi_otel_trace_exports_total | Counter | Total trace batches sent to remote OTEL collector |
obi_otel_trace_export_errors_total | CounterVec | Count of OTEL trace export errors by type |
obi_prometheus_http_requests_total | CounterVec | Prometheus scrape endpoint request count by port and path |
obi_instrumented_processes | GaugeVec | Number of processes instrumented by Obi, labeled by process name |
obi_instrumentation_errors_total | CounterVec | Instrumentation errors, labeled by process executable name and error type |
obi_avoided_services | GaugeVec | Services 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_info | GaugeVec | Obi version information including build timestamp and commit ID |
From OBI v0.11.0, obi_otel_trace_exports_total and obi_otel_trace_export_errors_total reflect the real outcome reported by the exporter instead of counting attempts, so error counts that previously read as zero may become non-zero without anything else changing. 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.