Plan your metrics setup
Before you ingest metrics at scale, decide on two things: the data model your metrics are stored in, and the ingest path for your deployment type. Elastic doesn't convert metrics between schemas at ingest, so the ingest path you use determines how your data is stored, which field names you query, and which prebuilt dashboards work.
The data model is the schema your metrics are stored with: the naming conventions that determine your metric and field names. Use the OpenTelemetry schema unless you need existing Elastic Common Schema (ECS) integrations, dashboards, and alerts to keep working without customization. For that and other use cases where ECS might work better, refer to Know when to keep using classic Elastic components.
- OpenTelemetry (OTel) schema
- Metrics follow the OpenTelemetry semantic conventions, for example the metric
system.cpu.utilization, with attributes stored underattributes.*andresource.attributes.*. This is the default. It matches the OpenTelemetry ecosystem and the Elastic OpenTelemetry ingest paths. - Elastic Common Schema (ECS)
- Metrics follow Elastic's original field naming conventions, for example
system.cpu.user.pct. Elastic Agent integrations write this schema, as does Metricbeat, the standalone Beats shipper for metrics. Use ECS when you need existing ECS integrations, dashboards, and alerts to keep working without customization. - Prometheus names
- Prometheus remote write uses neither schema. It stores Prometheus metric and label names as they arrive, for example the metric
node_cpu_seconds_total, with labels stored underlabels.*. You get this data model when you keep Prometheus and add Elastic as a remote write target.
Use one schema. Mixing OpenTelemetry and ECS in one deployment works, but requires two sets of field names in your queries and dashboards.
| Ingest path | Stored as | Metric values and labels |
|---|---|---|
| Managed OTLP Endpoint, Elastic Agent configured as an OTel Collector gateway, Elasticsearch OTLP/HTTP endpoint | OpenTelemetry-native | metrics.<metric_name>, with OpenTelemetry attributes under attributes.* and resource.attributes.*, in metrics-*.otel-* data streams |
| Elastic Agent integrations, Metricbeat, Beat receivers | ECS | ECS field names, for example system.cpu.user.pct, in the integration's data streams |
APM Server or managed inputs OTLP intake (the .apm endpoint) |
ECS | Legacy path that translates OTLP data to ECS. Not recommended for new setups. |
| Prometheus remote write (Managed Prometheus Remote Write endpoint or Elasticsearch endpoint) | Prometheus names, unchanged | metrics.<metric_name>, with labels as labels.<label_name> dimensions, in metrics-*.prometheus-* data streams. No conversion to OpenTelemetry or ECS. |
For the OpenTelemetry Protocol (OTLP) paths, refer to How your ingest path determines the data format. For Prometheus remote write, refer to Data mapping.
The schema you choose affects how you ingest, which metric names you query, and which dashboards work without customization:
| Aspect | OTel schema | ECS |
|---|---|---|
| Ingest using | EDOT SDKs, any OTLP-compatible client, Elastic Agent configured as an OTel Collector | Elastic Agent integrations, Metricbeat |
| Metric names | OpenTelemetry semantic conventions (system.cpu.utilization) |
ECS (system.cpu.user.pct) |
| Prebuilt dashboards | OpenTelemetry content packs from the Kibana Integrations UI | Elastic Agent integration dashboards |
|
|
Yes | Yes, when the integration stores data as a time series data stream (TSDS) |
| Recommended for | Default | Existing ECS integrations, dashboards, and alerts |
Prometheus remote write isn't in the table because it isn't a schema you choose: metrics ingested that way always keep their Prometheus names.
PromQL support depends on storage, not schema. Elasticsearch evaluates PromQL over any TSDS matched by metrics-*, whichever ingest path filled it. OTLP and Prometheus remote write metrics always land in a TSDS. Elastic Agent integration data streams are a TSDS when the integration enables it. Refer to the PromQL reference for how Elasticsearch evaluates PromQL.
Your deployment type determines the recommended path. Use Elastic Agent integrations instead of the recommended path only when you need ECS.
| Deployment | Recommended path | Also available |
|---|---|---|
| Elastic Cloud Serverless | Managed OTLP Endpoint | - Managed Prometheus Remote Write endpoint - Elastic Agent integrations |
| Elastic Cloud Hosted | Managed OTLP Endpoint | - Managed Prometheus Remote Write endpoint
- Elastic Agent integrations |
| Self-managed Elastic Stack, Elastic Cloud Enterprise, Elastic Cloud on Kubernetes | Elastic Agent configured as an OTel Collector gateway | - Elasticsearch OTLP/HTTP endpoint
- Elasticsearch Prometheus remote write endpoint - Elastic Agent integrations |
For configuration details for each path, refer to Ingest metrics.