How to adjust apm client .setLabel() index field type to "geo_point"

@rgroleau welcome to the forum!

What you're recording sounds to me like it fits with the definition of client.geo.location in ECS (Elastic Common Schema). I think it would be sensible for the Elastic APM agents to provide a more specific API to record this information, and then we could record it with the correct field name and type – something like the apm.setGeoLocation() you propose.

Would that work for you? If so, I'll open a feature request to track it.

In the mean time you can use an Ingest node pipeline to rename labels.location to client.geo.location:

  1. Create a "rename_location" pipeline:
PUT /_ingest/pipeline/rename_location
{
  "description" : "rename labels.location to client.geo.location",
  "processors" : [
    {
      "rename" : {
        "field": "labels.location",
        "target_field": "client.geo.location",
        "ignore_missing": true
      }
    }
  ]
}
  1. Query the existing "apm" pipeline:
GET /_ingest/pipeline/apm

Elasticsearch responds with something like::

{
  "apm" : {
    "description" : "Default enrichment for APM events",
    "processors" : [
      {
        "pipeline" : {
          "name" : "apm_user_agent"
        }
      },
      {
        "pipeline" : {
          "name" : "apm_user_geo"
        }
      },
      {
        "pipeline" : {
          "name" : "apm_ingest_timestamp"
        }
      }
    ]
  }
}
  1. Update "apm" pipeline to call the new "rename_locations" pipeline:
PUT /_ingest/pipeline/apm
{
  "description": "Default enrichment for APM events",
  "processors": [
    {
      "pipeline": {
        "name": "apm_user_agent"
      }
    },
    {
      "pipeline": {
        "name": "apm_user_geo"
      }
    },
    {
      "pipeline": {
        "name": "apm_ingest_timestamp"
      }
    },
    {
      "pipeline": {
        "name": "rename_location"
      }
    }
  ]
}