-
Notifications
You must be signed in to change notification settings - Fork 25.6k
Description
With dynamic templates in bulk requests (#69948) merged, we are considering the option of creating a default template to allow for dynamic metrics ingestion. This would be leveraged by many Elastic Agent integrations, and is specially interesting for the ones reporting dynamic metrics (where we only get to know the metric / field names at runtime, and hence, we cannot define a mapping before ingestion).
The overall idea is to map all possible combinations of <metric_type> and <unit>, so each combination gets a unique predictable name that can be referenced at ingest time. For example:
{
"mappings": {
"dynamic_templates": [{
"gauge_double_s": {
"mapping": {
"type": "double",
"meta": {
"metric_type": "gauge",
"unit": "s"
}
}
}
},
{
"gauge_double_byte": {
"mapping": {
"type": "double",
"meta": {
"metric_type": "gauge",
"unit": "byte"
}
}
}
},
...]
}
}
The obvious concern is: We would be creating a dynamic mapping entry per every combination of <metric_type> and , which will explode into many entries:
- metric_type: gauge, counter, histogram. Not expected to grow much
- unit:
byte,percent,d,h,m,s,ms,micros,nanos, with more units to come as we onboard other metrics. - ES field type:
long,double,integer,byte,float,scaled_float.
So the main question is: Would this be considered a good practice? Can it cause any issues because of a too large mapping template? Perhaps we should do this in a different way?