So @Steve_Foster and @Muralikrishna_A
The problem with OTEL based logs and Elastic Ingest Pipelines is that the important JSON is flattened / dotted field names under resource.attributes
and Elastic Ingest Pipelines do not work with "dotted" field names (instead of proper objects)
Example
"data_stream": {
"dataset": "generic.otel",
"namespace": "default",
"type": "logs"
},
"observed_timestamp": "2025-08-29T02:59:44.356393284Z",
"resource": {
"attributes": {
"cloud.account.id": "elastic-sa", <<< DOTTED FIELD NAMES
"cloud.instance.id": "7222568281050400394",
"cloud.platform": "gcp_kubernetes_engine",
"cloud.provider": "gcp",
"cloud.region": "us-west2",
"deployment.environment": "production",
"host.arch": "amd64",
"host.cpu.cache.l2.size": 56320,
"host.cpu.family": "6",
"host.cpu.model.id": "79",
"host.cpu.model.name": "Intel(R) Xeon(R) CPU @ 2.20GHz",
"host.cpu.stepping": "0",
"host.cpu.vendor.id": "GenuineIntel",
"host.id": "7222568281050400394",
.....
"host.name": "gke-stephen-brown-gke-de-default-pool-432f31cc-9l5k",
"k8s.cluster.name": "stephen-brown-gke-dev-cluster",
"k8s.container.name": "cart",
"k8s.container.restart_count": "0",
"k8s.deployment.name": "cart",
"k8s.namespace.name": "default",
"k8s.node.name": "gke-stephen-brown-gke-de-default-pool-432f31cc-9l5k",
"k8s.pod.ip": "10.116.0.5",
"k8s.pod.name": "cart-5765f55cdc-574ls",
"k8s.pod.start_time": "2025-08-27T12:22:38Z",
"k8s.pod.uid": "08b38e9b-06c2-41b1-8fe0-3a1dfdae9cb4",
"k8s.replicaset.name": "cart-5765f55cdc",
"os.description": "Red Hat Enterprise Linux 9.6 (Plow) (Linux gke-stephen-brown-gke-de-default-pool-432f31cc-9l5k 6.6.97+ #1 SMP PREEMPT_DYNAMIC Sun Jul 27 08:50:12 UTC 2025 x86_64)",
"os.type": "linux",
"service.name": "cart"
},
"schema_url": "https://opentelemetry.io/schemas/1.6.1"
}
}
Expands a field with dots into an object field. This processor allows fields with dots in the name to be accessible by other processors in the pipeline. Otherwise these fields can’t be accessed by any processor.
So IF you want to do something you are going to need to "Expand" those dots then you can work with them..... Perhaps At some point in the future Elastic Ingest PIpelines will work natively with this Style JSON, Today it does not
So you will need to build something like this....
{
"set": {
"field": "custom_pipeline",
"value": "traces-otel@custom"
}
},
{
"set": {
"field": "resource_exp",
"copy_from": "resource"
}
},
{
"dot_expander": {
"field": "*",
"path": "resource_exp.attributes"
}
}
]
Keep in mind that you are "moving" away from OTEL Semantic convention and OTEL best practices, which will be processed in the Collector using OTTL or Extensions, not at the Sink... BUT that said, Many things in OTEL are still moving so we shall see... 