apm-server icon indicating copy to clipboard operation
apm-server copied to clipboard

{transaction,span}.duration.us is unset if {transaction,span}.duration exists

Open carsonip opened this issue 1 year ago • 3 comments

      {
        "script": {
          "if": "ctx[ctx.processor.event]?.duration == null",
          "source": """def eventDuration = ctx.event?.duration ?: 0;
def rootObjectName = ctx.processor?.event;
def rootObject = ctx[rootObjectName];
if (rootObject == null) {
  rootObject = [:];
  ctx[rootObjectName] = rootObject;
}
rootObject.duration = ["us": (long)(eventDuration/1000)];
"""
        }
      }

The if condition here is too strict that it forbids any other fields under {transaction,span}.duration. By default we should never set {transaction,span}.duration, but it is still possible via ingest pipelines.

carsonip avatar Dec 06 '24 16:12 carsonip

Do we know why duration is not set or in which cases we expect it not to be set? Setting it to 0 make sense (no duration = 0 duration), but is it expected to not be present in the document at all? I'm wondering if there is a bug somewhere else and this is a symptom.

endorama avatar Dec 06 '24 16:12 endorama

Great question. I've update the description to mention user ingest pipelines.

carsonip avatar Dec 06 '24 16:12 carsonip

We should probably move away from *.duration.us to event.duration. See https://github.com/elastic/apm-server/issues/5999

kruskall avatar Dec 10 '24 17:12 kruskall