Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/docset.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
project: Elastic Agent docs
products:
- id: elastic-agent
Expand All @@ -10,6 +10,7 @@
- beats
- opentelemetry
- ecs
- integration-docs
toc:
- toc: release-notes
- toc: reference/edot-collector
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,23 +103,27 @@
- PHP: 7.3
- Ruby: 2.5
- .Net: 6
- Erlang/OTP 27.2.4
- Erlang/OTP 27.2.4

## Generate metrics from profiles

You can configure the components to generate and report metrics exclusively from profile information. This method contributes to a reduction in ingest traffic and storage costs.
The `profilingmetrics` connector transforms profiling data into OpenTelemetry metrics. It walks each sample's stack trace and produces per-resource delta metrics that break down CPU time by frame type (kernel, native, JVM, Go, Python, etc.), shared library, kernel subsystem, and system call. This reduces ingest traffic and storage costs compared to sending raw profiling data, while still providing actionable insight into where your application spends its time.

Check warning on line 110 in docs/reference/edot-collector/config/configure-profiles-collection.md

View workflow job for this annotation

GitHub Actions / build / vale

Elastic.Latinisms: Latin terms and abbreviations are a common source of confusion. Use 'and so on' instead of 'etc'.

The following example generates profiling metrics by frame, frame type, and classification:
The generated metrics power the [Elastic OTel Profiling Metrics integration](integration-docs://reference/profilingmetrics_otel.md) dashboards.

The following example sends profiling data through the connector and exports the resulting metrics to {{es}}:

::::{applies-switch}

:::{applies-item} stack: preview =9.2
```yaml
connectors:
profilingmetrics:
by_frame: true
by_frametype: true
by_classification: true
metrics:
samples.frame_type:
enabled: true
samples.classification:
enabled: true

receivers:
profiling:
Expand Down Expand Up @@ -157,6 +161,27 @@

::::

### Connector configuration

The connector supports the following settings:

| Setting | Type | Default | Description |
| --- | --- | --- | --- |
| `flush_interval` | `duration` | `30s` | Time window for aggregating delta metrics in memory before flushing. Set to `0s` to disable aggregation and forward metrics on every received profile. |

Check notice on line 170 in docs/reference/edot-collector/config/configure-profiles-collection.md

View workflow job for this annotation

GitHub Actions / build / vale

Elastic.WordChoice: Consider using 'deactivate, deselect, hide, turn off' instead of 'disable', unless the term is in the UI.
| `metrics` | `object` | — | Per-metric toggle. Each key is a metric name with an `enabled` boolean. |
| `aggregations` | `list` | `[]` | List of custom aggregation rules. Each entry has a `match` (regex applied to function names) and a `label` (value used in the output metric attribute). |

By default, the connector emits per-runtime sample count metrics (`samples.kernel.count`, `samples.native.count`, `samples.go.count`, `samples.jvm.count`, etc.) with attributes for shared library names (`shlib_name`), kernel subsystem classification (`kernel_area`, `kernel_proto`, `kernel_io`), and system call names (`syscall_name`).

Check warning on line 174 in docs/reference/edot-collector/config/configure-profiles-collection.md

View workflow job for this annotation

GitHub Actions / build / vale

Elastic.Latinisms: Latin terms and abbreviations are a common source of confusion. Use 'and so on' instead of 'etc'.

Two additional metrics are available but disabled by default:

Check notice on line 176 in docs/reference/edot-collector/config/configure-profiles-collection.md

View workflow job for this annotation

GitHub Actions / build / vale

Elastic.WordChoice: Consider using 'deactivated, deselected, hidden, turned off, unavailable' instead of 'disabled', unless the term is in the UI.

- `samples.frame_type` — frame counts grouped by frame type.
- `samples.classification` — language-specific classification (Go package, JVM class).

:::{important}
`samples.kernel.count` and `samples.user.count` must both be enabled. Their sum is the only reliable way to compute the total sample count.
:::

## Kubernetes deployments

In Kubernetes, we suggest deploying the EDOT Collector with a profiling receiver as a DaemonSet. This ensures comprehensive, node-level profiling across the entire cluster, providing consistent data collection, resilience, scalability, and simplified management. This approach is recommended for optimal performance and full observability.
Loading