From fa7ee8dc542810c5e6e73a70211cc1dd58537e3a Mon Sep 17 00:00:00 2001 From: Andrew Wilkins Date: Wed, 26 Aug 2020 12:14:34 +0800 Subject: [PATCH] Add event.outcome to transactions and spans (#4064) * spec: add {transaction,span}.outcome * model: add {Span,Transaction}.Outcome fields * model/modeldecoder: {span,transaction}.outcome * Update fields, tests, generated docs * Add changelog entry --- _meta/fields.common.yml | 14 +++++++ ...TestPublishIntegrationEvents.approved.json | 6 +++ ...lishIntegrationMinimalEvents.approved.json | 9 ++++ .../TestPublishIntegrationSpans.approved.json | 18 ++++++++ ...blishIntegrationTransactions.approved.json | 12 ++++++ changelogs/head.asciidoc | 1 + docs/data/elasticsearch/generated/spans.json | 39 +++++++++++------ .../elasticsearch/generated/transactions.json | 30 +++++++------ .../intake-api/generated/rum_v3_events.ndjson | 2 +- docs/fields.asciidoc | 13 ++++++ docs/spec/outcome.json | 7 ++++ docs/spec/spans/rum_v3_span.json | 4 ++ docs/spec/spans/span.json | 4 ++ .../spec/transactions/rum_v3_transaction.json | 4 ++ docs/spec/transactions/transaction.json | 4 ++ include/fields.go | 2 +- model/modeldecoder/field/rum_v3_mapping.go | 1 + model/modeldecoder/span.go | 4 ++ model/modeldecoder/span_test.go | 12 ++++++ model/modeldecoder/transaction.go | 4 ++ model/modeldecoder/transaction_test.go | 22 ++++++++-- model/span.go | 2 + model/span/generated/schema/rum_v3_span.go | 8 ++++ model/span/generated/schema/span.go | 8 ++++ model/span_test.go | 25 +++++++++-- model/transaction.go | 2 + .../generated/schema/rum_v3_transaction.go | 16 +++++++ .../generated/schema/transaction.go | 8 ++++ model/transaction_test.go | 8 ++++ processor/otel/consumer.go | 2 + .../test_approved/consume_span.approved.json | 6 +++ .../metadata_jaeger-no-language.approved.json | 3 ++ .../metadata_jaeger-version.approved.json | 3 ++ .../metadata_jaeger.approved.json | 3 ++ ...metadata_jaeger_full-traceid.approved.json | 3 ++ .../metadata_jaeger_minimal.approved.json | 3 ++ .../metadata_minimal.approved.json | 3 ++ .../span_jaeger_custom.approved.json | 3 ++ .../span_jaeger_db.approved.json | 3 ++ .../span_jaeger_http.approved.json | 3 ++ ...span_jaeger_http_status_code.approved.json | 3 ++ ...an_jaeger_https_default_port.approved.json | 3 ++ .../span_jaeger_messaging.approved.json | 3 ++ .../transaction_jaeger_custom.approved.json | 3 ++ .../transaction_jaeger_full.approved.json | 3 ++ .../transaction_jaeger_no_attrs.approved.json | 3 ++ ...saction_jaeger_sampling_rate.approved.json | 3 ++ ...action_jaeger_type_component.approved.json | 3 ++ ...action_jaeger_type_messaging.approved.json | 3 ++ ...nsaction_jaeger_type_request.approved.json | 3 ++ ...n_jaeger_type_request_result.approved.json | 3 ++ .../stream/package_tests/error_attrs_test.go | 2 + .../package_tests/metadata_attrs_test.go | 1 + .../stream/package_tests/span_attrs_test.go | 1 + .../package_tests/transaction_attrs_test.go | 1 + .../testIntakeIntegrationEvents.approved.json | 6 +++ ...ntakeIntegrationInvalidEvent.approved.json | 3 ++ ...eIntegrationInvalidJSONEvent.approved.json | 3 ++ ...ntegrationOptionalTimestamps.approved.json | 6 +++ ...keIntegrationRumTransactions.approved.json | 6 +++ .../testIntakeIntegrationSpans.approved.json | 18 ++++++++ ...ntakeIntegrationTransactions.approved.json | 12 ++++++ .../testIntakeRUMV3Events.approved.json | 27 ++++++++++++ testdata/intake-v2/spans.ndjson | 2 +- testdata/intake-v2/transactions.ndjson | 2 +- testdata/intake-v3/rum_events.ndjson | 2 +- testdata/jaeger/batch_0.approved.json | 3 ++ testdata/jaeger/batch_1.approved.json | 42 +++++++++++++++++++ .../drop_unsampled_transactions.approved.json | 17 ++++---- ...ger_batch_0_auth_tag_removed.approved.json | 27 ++++++------ ...jaeger_batch_0_authorization.approved.json | 27 ++++++------ tests/system/jaeger_span.approved.json | 3 +- .../keep_unsampled_transactions.approved.json | 24 ++++++----- tests/system/spans.approved.json | 39 +++++++++++------ tests/system/transaction.approved.json | 30 +++++++------ 75 files changed, 555 insertions(+), 106 deletions(-) create mode 100644 docs/spec/outcome.json diff --git a/_meta/fields.common.yml b/_meta/fields.common.yml index f59a809e1c4..807961a35bb 100644 --- a/_meta/fields.common.yml +++ b/_meta/fields.common.yml @@ -777,3 +777,17 @@ description: Cloud region name example: us-east1 overwrite: true + + - name: event + type: group + fields: + + - name: outcome + level: core + type: keyword + ignore_above: 1024 + description: > + `event.outcome` simply denotes whether the event represents a success or a + failure from the perspective of the entity that produced the event. + example: success + overwrite: true diff --git a/beater/test_approved_es_documents/TestPublishIntegrationEvents.approved.json b/beater/test_approved_es_documents/TestPublishIntegrationEvents.approved.json index eafddce8827..cc64b9a02bc 100644 --- a/beater/test_approved_es_documents/TestPublishIntegrationEvents.approved.json +++ b/beater/test_approved_es_documents/TestPublishIntegrationEvents.approved.json @@ -22,6 +22,9 @@ "ecs": { "version": "1.5.0" }, + "event": { + "outcome": "unknown" + }, "host": { "architecture": "amd64", "hostname": "node-name", @@ -218,6 +221,9 @@ "ecs": { "version": "1.5.0" }, + "event": { + "outcome": "unknown" + }, "host": { "architecture": "amd64", "hostname": "node-name", diff --git a/beater/test_approved_es_documents/TestPublishIntegrationMinimalEvents.approved.json b/beater/test_approved_es_documents/TestPublishIntegrationMinimalEvents.approved.json index 73ad6671ba8..469eca39ea4 100644 --- a/beater/test_approved_es_documents/TestPublishIntegrationMinimalEvents.approved.json +++ b/beater/test_approved_es_documents/TestPublishIntegrationMinimalEvents.approved.json @@ -15,6 +15,9 @@ "ecs": { "version": "1.5.0" }, + "event": { + "outcome": "unknown" + }, "host": { "ip": "127.0.0.1" }, @@ -69,6 +72,9 @@ "ecs": { "version": "1.5.0" }, + "event": { + "outcome": "unknown" + }, "host": { "ip": "127.0.0.1" }, @@ -123,6 +129,9 @@ "ecs": { "version": "1.5.0" }, + "event": { + "outcome": "unknown" + }, "host": { "ip": "127.0.0.1" }, diff --git a/beater/test_approved_es_documents/TestPublishIntegrationSpans.approved.json b/beater/test_approved_es_documents/TestPublishIntegrationSpans.approved.json index 8e43bbca91d..7f266ee1bf1 100644 --- a/beater/test_approved_es_documents/TestPublishIntegrationSpans.approved.json +++ b/beater/test_approved_es_documents/TestPublishIntegrationSpans.approved.json @@ -43,6 +43,9 @@ "ecs": { "version": "1.5.0" }, + "event": { + "outcome": "success" + }, "host": { "architecture": "x64", "hostname": "node-name", @@ -172,6 +175,9 @@ "ecs": { "version": "1.5.0" }, + "event": { + "outcome": "unknown" + }, "host": { "architecture": "x64", "hostname": "node-name", @@ -302,6 +308,9 @@ "ecs": { "version": "1.5.0" }, + "event": { + "outcome": "unknown" + }, "host": { "architecture": "x64", "hostname": "node-name", @@ -436,6 +445,9 @@ "ecs": { "version": "1.5.0" }, + "event": { + "outcome": "unknown" + }, "host": { "architecture": "x64", "hostname": "node-name", @@ -572,6 +584,9 @@ "ecs": { "version": "1.5.0" }, + "event": { + "outcome": "unknown" + }, "host": { "architecture": "x64", "hostname": "node-name", @@ -784,6 +799,9 @@ "ecs": { "version": "1.5.0" }, + "event": { + "outcome": "unknown" + }, "host": { "architecture": "x64", "hostname": "node-name", diff --git a/beater/test_approved_es_documents/TestPublishIntegrationTransactions.approved.json b/beater/test_approved_es_documents/TestPublishIntegrationTransactions.approved.json index c0b6042210a..2dbad95e5d9 100644 --- a/beater/test_approved_es_documents/TestPublishIntegrationTransactions.approved.json +++ b/beater/test_approved_es_documents/TestPublishIntegrationTransactions.approved.json @@ -38,6 +38,9 @@ "ecs": { "version": "1.5.0" }, + "event": { + "outcome": "unknown" + }, "host": { "architecture": "x64", "hostname": "node-name", @@ -170,6 +173,9 @@ "ecs": { "version": "1.5.0" }, + "event": { + "outcome": "success" + }, "host": { "architecture": "x64", "hostname": "node-name", @@ -393,6 +399,9 @@ "ecs": { "version": "1.5.0" }, + "event": { + "outcome": "unknown" + }, "host": { "architecture": "x64", "hostname": "node-name", @@ -543,6 +552,9 @@ "ecs": { "version": "1.5.0" }, + "event": { + "outcome": "unknown" + }, "host": { "architecture": "x64", "hostname": "node-name", diff --git a/changelogs/head.asciidoc b/changelogs/head.asciidoc index d2a0b97ac10..41d8401b601 100644 --- a/changelogs/head.asciidoc +++ b/changelogs/head.asciidoc @@ -26,3 +26,4 @@ https://github.com/elastic/apm-server/compare/7.9\...master[View commits] * Upgrade Go to 1.14.7 {pull}4067[4067] * Added apm-server.kibana.headers configuration {pull}4087[4087] * Add a new Docker image based on UBI minimal 8 to packaging. {pull}4105[4105] +* Add event.outcome to transactions and spans {pull}4064[4064] diff --git a/docs/data/elasticsearch/generated/spans.json b/docs/data/elasticsearch/generated/spans.json index 72c858ff774..788cc4795b5 100644 --- a/docs/data/elasticsearch/generated/spans.json +++ b/docs/data/elasticsearch/generated/spans.json @@ -8,6 +8,9 @@ "ecs": { "version": "1.5.0" }, + "event": { + "outcome": "unknown" + }, "labels": { "span_tag": "something" }, @@ -121,10 +124,13 @@ "ecs": { "version": "1.5.0" }, + "event": { + "outcome": "unknown" + }, "observer": { - "ephemeral_id": "c0cea3b6-97d7-4e15-9e35-c868e7a3c869", - "hostname": "ix.lan", - "id": "a49b4a08-689a-4724-8050-8bd0ae043281", + "ephemeral_id": "2f13d8fa-83cd-4356-8123-aabfb47a1808", + "hostname": "goat", + "id": "17ad47dd-5671-4c89-979f-ef4533565ba2", "type": "apm-server", "version": "8.0.0", "version_major": 8 @@ -187,10 +193,13 @@ "ecs": { "version": "1.5.0" }, + "event": { + "outcome": "unknown" + }, "observer": { - "ephemeral_id": "c0cea3b6-97d7-4e15-9e35-c868e7a3c869", - "hostname": "ix.lan", - "id": "a49b4a08-689a-4724-8050-8bd0ae043281", + "ephemeral_id": "2f13d8fa-83cd-4356-8123-aabfb47a1808", + "hostname": "goat", + "id": "17ad47dd-5671-4c89-979f-ef4533565ba2", "type": "apm-server", "version": "8.0.0", "version_major": 8 @@ -237,10 +246,13 @@ "ecs": { "version": "1.5.0" }, + "event": { + "outcome": "unknown" + }, "observer": { - "ephemeral_id": "c0cea3b6-97d7-4e15-9e35-c868e7a3c869", - "hostname": "ix.lan", - "id": "a49b4a08-689a-4724-8050-8bd0ae043281", + "ephemeral_id": "2f13d8fa-83cd-4356-8123-aabfb47a1808", + "hostname": "goat", + "id": "17ad47dd-5671-4c89-979f-ef4533565ba2", "type": "apm-server", "version": "8.0.0", "version_major": 8 @@ -293,10 +305,13 @@ "ecs": { "version": "1.5.0" }, + "event": { + "outcome": "unknown" + }, "observer": { - "ephemeral_id": "c0cea3b6-97d7-4e15-9e35-c868e7a3c869", - "hostname": "ix.lan", - "id": "a49b4a08-689a-4724-8050-8bd0ae043281", + "ephemeral_id": "2f13d8fa-83cd-4356-8123-aabfb47a1808", + "hostname": "goat", + "id": "17ad47dd-5671-4c89-979f-ef4533565ba2", "type": "apm-server", "version": "8.0.0", "version_major": 8 diff --git a/docs/data/elasticsearch/generated/transactions.json b/docs/data/elasticsearch/generated/transactions.json index 17e67dac12a..024ab9d4273 100644 --- a/docs/data/elasticsearch/generated/transactions.json +++ b/docs/data/elasticsearch/generated/transactions.json @@ -12,7 +12,8 @@ "version": "1.5.0" }, "event": { - "ingested": "2020-04-22T14:49:24.899906Z" + "ingested": "2020-08-11T09:55:04.391451Z", + "outcome": "unknown" }, "host": { "architecture": "x64", @@ -107,7 +108,8 @@ "version": "1.5.0" }, "event": { - "ingested": "2020-04-22T14:49:24.900309Z" + "ingested": "2020-08-11T09:55:04.391568Z", + "outcome": "unknown" }, "host": { "architecture": "x64", @@ -124,9 +126,9 @@ } }, "observer": { - "ephemeral_id": "f78f6762-2157-4322-95aa-aecd2f486c1a", - "hostname": "ix.lan", - "id": "80b79979-4a7d-450d-b2ce-75c589f7fffd", + "ephemeral_id": "fb037b97-0027-401a-9dc4-17d162f2687f", + "hostname": "goat", + "id": "a4daf4ca-b280-4ede-90df-bf62482cec37", "type": "apm-server", "version": "8.0.0", "version_major": 8 @@ -202,7 +204,8 @@ "version": "1.5.0" }, "event": { - "ingested": "2020-04-22T14:49:24.900644Z" + "ingested": "2020-08-11T09:55:04.391639Z", + "outcome": "unknown" }, "host": { "architecture": "x64", @@ -219,9 +222,9 @@ } }, "observer": { - "ephemeral_id": "f78f6762-2157-4322-95aa-aecd2f486c1a", - "hostname": "ix.lan", - "id": "80b79979-4a7d-450d-b2ce-75c589f7fffd", + "ephemeral_id": "fb037b97-0027-401a-9dc4-17d162f2687f", + "hostname": "goat", + "id": "a4daf4ca-b280-4ede-90df-bf62482cec37", "type": "apm-server", "version": "8.0.0", "version_major": 8 @@ -309,7 +312,8 @@ "version": "1.5.0" }, "event": { - "ingested": "2020-04-22T14:49:24.844687Z" + "ingested": "2020-08-11T09:55:04.338986Z", + "outcome": "unknown" }, "host": { "architecture": "x64", @@ -388,9 +392,9 @@ "organization_uuid": "9f0e9d64-c185-4d21-a6f4-4673ed561ec8" }, "observer": { - "ephemeral_id": "f78f6762-2157-4322-95aa-aecd2f486c1a", - "hostname": "ix.lan", - "id": "80b79979-4a7d-450d-b2ce-75c589f7fffd", + "ephemeral_id": "fb037b97-0027-401a-9dc4-17d162f2687f", + "hostname": "goat", + "id": "a4daf4ca-b280-4ede-90df-bf62482cec37", "type": "apm-server", "version": "8.0.0", "version_major": 8 diff --git a/docs/data/intake-api/generated/rum_v3_events.ndjson b/docs/data/intake-api/generated/rum_v3_events.ndjson index 77d0e6b73a7..88bcbe51df8 100644 --- a/docs/data/intake-api/generated/rum_v3_events.ndjson +++ b/docs/data/intake-api/generated/rum_v3_events.ndjson @@ -1,3 +1,3 @@ {"m": {"se": {"n": "apm-a-rum-test-e2e-general-usecase","ve": "0.0.1","en": "prod","a": {"n": "js-base","ve": "4.8.1"},"ru": {"n": "v8","ve": "8.0"},"la": {"n": "javascript","ve": "6"},"fw": {"n": "angular","ve": "2"}},"u": {"id": 123,"em": "user@email.com","un": "John Doe"},"l": {"testTagKey": "testTagValue"}}} -{"x": {"id": "ec2e280be8345240","tid": "286ac3ad697892c406528f13c82e0ce1","pid": "1ef08ac234fca23b455d9e27c660f1ab","n": "general-usecase-initial-p-load","t": "p-load","d": 295,"me": [{"sa": {"xdc": {"v": 1},"xds": {"v": 295},"xbc": {"v": 1}}},{"y": {"t": "Request"},"sa": {"ysc": {"v": 1},"yss": {"v": 1}}},{"y": {"t": "Response"},"sa": {"ysc": {"v": 1},"yss": {"v": 1}}}],"y": [{"id": "bbd8bcc3be14d814","n": "Requesting and receiving the document","t": "hard-navigation","su": "browser-timing","s": 4,"d": 2},{"id": "fc546e87a90a774f","n": "Parsing the document, executing sy. scripts","t": "hard-navigation","su": "browser-timing","s": 14,"d": 106},{"id": "fb8f717930697299","n": "http://localhost:8000/test/e2e/general-usecase/app.e2e-bundle.min.js","t": "rc","su": "script","s": 22.53499999642372,"d": 35.060000023804605,"c": {"h": {"url": "http://localhost:8000/test/e2e/general-usecase/app.e2e-bundle.min.js?token=REDACTED","r": {"ts": 677175,"ebs": 676864,"dbs": 676864}},"dt": {"se": {"n": "http://localhost:8000","rc": "localhost:8000","t": "rc"},"ad": "localhost","po": 8000}}},{"id": "9b80535c4403c9fb","n": "OpenTracing y","t": "cu","s": 96.92999999970198,"d": 198.07000000029802},{"id": "5ecb8ee030749715","n": "GET /test/e2e/common/data.json","t": "external","su": "h","sy": true,"s": 98.94000005442649,"d": 6.72499998472631,"c": {"h": {"mt": "GET","url": "http://localhost:8000/test/e2e/common/data.json?test=hamid","sc": 200},"dt": {"se": {"n": "http://localhost:8000","rc": "localhost:8000","t": "external"},"ad": "localhost","po": 8000}}},{"id": "27f45fd274f976d4","n": "POST http://localhost:8003/data","t": "external","su": "h","sy": true,"s": 106.52000003028661,"d": 11.584999971091747,"c": {"h": {"mt": "POST","url": "http://localhost:8003/data","sc": 200},"dt": {"se": {"n": "http://localhost:8003","rc": "localhost:8003","t": "external"},"ad": "localhost","po": 8003}}},{"id": "a3c043330bc2015e","pi": 0,"n": "POST http://localhost:8003/fetch","t": "external","su": "h","ac": "action","sy": false,"s": 119.93500008247793,"d": 15.949999913573265,"c": {"h": {"mt": "POST","url": "http://localhost:8003/fetch","sc": 200},"dt": {"se": {"n": "http://localhost:8003","rc": "localhost:8003","t": "external"},"ad": "localhost","po": 8003}}},{"id": "bc7665dc25629379","st": [{"ap": "http://localhost:8000/test/e2e/general-usecase/app.e2e-bundle.min.js?token=secret","f": "test/e2e/general-usecase/app.e2e-bundle.min.js?token=secret","fn": "generateError","li": 7662,"co": 9},{"ap": "http://localhost:8000/test/e2e/general-usecase/app.e2e-bundle.min.js?token=secret","f": "test/e2e/general-usecase/app.e2e-bundle.min.js?token=secret","fn": "","li": 7666,"co": 3}],"n": "Fire \"DOMContentLoaded\" event","t": "hard-navigation","su": "browser-timing","s": 120,"d": 2}],"c": {"p": {"rf": "http://localhost:8000/test/e2e/","url": "http://localhost:8000/test/e2e/general-usecase/"},"r": {"sc": 200,"ts": 983,"ebs": 690,"dbs": 690,"he": {"Content-Type": "application/json"}},"q": {"he": {"Accept": "application/json"},"hve": "1.1","mt": "GET"},"u": {"id": "uId","un": "un","em": "em"},"cu": {"testContext": "testContext"},"g": {"testTagKey": "testTagValue"}},"k": {"a": {"lp": 131.03000004775822,"fb": 5,"di": 120,"dc": 138,"ds": 100,"de": 110,"fp": 70.82500003930181},"nt": {"fs": 0,"ls": 0,"le": 0,"cs": 0,"ce": 0,"qs": 4,"rs": 5,"re": 6,"dl": 14,"di": 120,"ds": 120,"de": 122,"dc": 138,"es": 138,"ee": 138}},"yc": {"sd": 8,"dd": 1},"sm": true,"exp":{"cls":1,"fid":2.0,"tbt":3.4,"ignored":5,"also":"ignored"}}} +{"x": {"id": "ec2e280be8345240","tid": "286ac3ad697892c406528f13c82e0ce1","pid": "1ef08ac234fca23b455d9e27c660f1ab","n": "general-usecase-initial-p-load","t": "p-load","d": 295,"me": [{"sa": {"xdc": {"v": 1},"xds": {"v": 295},"xbc": {"v": 1}}},{"y": {"t": "Request"},"sa": {"ysc": {"v": 1},"yss": {"v": 1}}},{"y": {"t": "Response"},"sa": {"ysc": {"v": 1},"yss": {"v": 1}}}],"y": [{"id": "bbd8bcc3be14d814","n": "Requesting and receiving the document","t": "hard-navigation","su": "browser-timing","s": 4,"d": 2},{"id": "fc546e87a90a774f","n": "Parsing the document, executing sy. scripts","t": "hard-navigation","su": "browser-timing","s": 14,"d": 106},{"id": "fb8f717930697299","n": "http://localhost:8000/test/e2e/general-usecase/app.e2e-bundle.min.js","t": "rc","su": "script","s": 22.53499999642372,"d": 35.060000023804605,"c": {"h": {"url": "http://localhost:8000/test/e2e/general-usecase/app.e2e-bundle.min.js?token=REDACTED","r": {"ts": 677175,"ebs": 676864,"dbs": 676864}},"dt": {"se": {"n": "http://localhost:8000","rc": "localhost:8000","t": "rc"},"ad": "localhost","po": 8000}}},{"id": "9b80535c4403c9fb","n": "OpenTracing y","t": "cu","s": 96.92999999970198,"d": 198.07000000029802},{"id": "5ecb8ee030749715","n": "GET /test/e2e/common/data.json","t": "external","su": "h","sy": true,"s": 98.94000005442649,"d": 6.72499998472631,"c": {"h": {"mt": "GET","url": "http://localhost:8000/test/e2e/common/data.json?test=hamid","sc": 200},"dt": {"se": {"n": "http://localhost:8000","rc": "localhost:8000","t": "external"},"ad": "localhost","po": 8000}}},{"id": "27f45fd274f976d4","n": "POST http://localhost:8003/data","t": "external","su": "h","sy": true,"s": 106.52000003028661,"d": 11.584999971091747,"c": {"h": {"mt": "POST","url": "http://localhost:8003/data","sc": 200},"dt": {"se": {"n": "http://localhost:8003","rc": "localhost:8003","t": "external"},"ad": "localhost","po": 8003}}},{"id": "a3c043330bc2015e","pi": 0,"n": "POST http://localhost:8003/fetch","t": "external","su": "h","ac": "action","sy": false,"s": 119.93500008247793,"d": 15.949999913573265,"c": {"h": {"mt": "POST","url": "http://localhost:8003/fetch","sc": 200},"dt": {"se": {"n": "http://localhost:8003","rc": "localhost:8003","t": "external"},"ad": "localhost","po": 8003}}},{"id": "bc7665dc25629379","st": [{"ap": "http://localhost:8000/test/e2e/general-usecase/app.e2e-bundle.min.js?token=secret","f": "test/e2e/general-usecase/app.e2e-bundle.min.js?token=secret","fn": "generateError","li": 7662,"co": 9},{"ap": "http://localhost:8000/test/e2e/general-usecase/app.e2e-bundle.min.js?token=secret","f": "test/e2e/general-usecase/app.e2e-bundle.min.js?token=secret","fn": "","li": 7666,"co": 3}],"n": "Fire \"DOMContentLoaded\" event","t": "hard-navigation","su": "browser-timing","s": 120,"d": 2,"o":"success"}],"c": {"p": {"rf": "http://localhost:8000/test/e2e/","url": "http://localhost:8000/test/e2e/general-usecase/"},"r": {"sc": 200,"ts": 983,"ebs": 690,"dbs": 690,"he": {"Content-Type": "application/json"}},"q": {"he": {"Accept": "application/json"},"hve": "1.1","mt": "GET"},"u": {"id": "uId","un": "un","em": "em"},"cu": {"testContext": "testContext"},"g": {"testTagKey": "testTagValue"}},"k": {"a": {"lp": 131.03000004775822,"fb": 5,"di": 120,"dc": 138,"ds": 100,"de": 110,"fp": 70.82500003930181},"nt": {"fs": 0,"ls": 0,"le": 0,"cs": 0,"ce": 0,"qs": 4,"rs": 5,"re": 6,"dl": 14,"di": 120,"ds": 120,"de": 122,"dc": 138,"es": 138,"ee": 138}},"yc": {"sd": 8,"dd": 1},"sm": true,"exp":{"cls":1,"fid":2.0,"tbt":3.4,"ignored":5,"also":"ignored"}}} {"me": {"y": {"t": "Processing","su": "subtype"},"sa": {"ysc": {"v": 1},"yss": {"v": 124}},"g": {"tag1": "value1"}}} diff --git a/docs/fields.asciidoc b/docs/fields.asciidoc index 2928fc7b1a6..a077d65ca84 100644 --- a/docs/fields.asciidoc +++ b/docs/fields.asciidoc @@ -1125,6 +1125,19 @@ example: us-east1 -- + +*`event.outcome`*:: ++ +-- +`event.outcome` simply denotes whether the event represents a success or a failure from the perspective of the entity that produced the event. + + +type: keyword + +example: success + +-- + [[exported-fields-apm-error]] == APM Error fields diff --git a/docs/spec/outcome.json b/docs/spec/outcome.json new file mode 100644 index 00000000000..36231ee8824 --- /dev/null +++ b/docs/spec/outcome.json @@ -0,0 +1,7 @@ +{ + "$id": "docs/spec/outcome.json", + "title": "Outcome", + "type": ["string", "null"], + "enum": [null, "success", "failure", "unknown"], + "description": "The outcome of the transaction: success, failure, or unknown. This is similar to 'result', but has a limited set of permitted values describing the success or failure of the transaction from the service's perspective. This field can be used for calculating error rates." +} diff --git a/docs/spec/spans/rum_v3_span.json b/docs/spec/spans/rum_v3_span.json index 02a0202e537..00f58b7814d 100644 --- a/docs/spec/spans/rum_v3_span.json +++ b/docs/spec/spans/rum_v3_span.json @@ -42,6 +42,10 @@ "description": "The specific kind of event within the sub-type represented by the span (e.g. query, connect)", "maxLength": 1024 }, + "o": { + "$ref": "../outcome.json", + "description": "The outcome of the span: success, failure, or unknown. Outcome may be one of a limited set of permitted values describing the success or failure of the span. This field can be used for calculating error rates for outgoing requests." + }, "c": { "type": [ "object", diff --git a/docs/spec/spans/span.json b/docs/spec/spans/span.json index 568ab4a05f4..fb29c3bcd9a 100644 --- a/docs/spec/spans/span.json +++ b/docs/spec/spans/span.json @@ -47,6 +47,10 @@ "description": "The specific kind of event within the sub-type represented by the span (e.g. query, connect)", "maxLength": 1024 }, + "outcome": { + "$ref": "../outcome.json", + "description": "The outcome of the span: success, failure, or unknown. Outcome may be one of a limited set of permitted values describing the success or failure of the span. This field can be used for calculating error rates for outgoing requests." + }, "context": { "type": ["object", "null"], "description": "Any other arbitrary data captured by the agent, optionally provided by the user", diff --git a/docs/spec/transactions/rum_v3_transaction.json b/docs/spec/transactions/rum_v3_transaction.json index 8d20ffe1b84..0130af11311 100644 --- a/docs/spec/transactions/rum_v3_transaction.json +++ b/docs/spec/transactions/rum_v3_transaction.json @@ -79,6 +79,10 @@ "description": "The result of the transaction. For HTTP-related transactions, this should be the status code formatted like 'HTTP 2xx'.", "maxLength": 1024 }, + "o": { + "$ref": "../outcome.json", + "description": "The outcome of the transaction: success, failure, or unknown. This is similar to 'result', but has a limited set of permitted values describing the success or failure of the transaction from the service's perspective. This field can be used for calculating error rates for incoming requests." + }, "k": { "type": [ "object", diff --git a/docs/spec/transactions/transaction.json b/docs/spec/transactions/transaction.json index 3de85ac0e3b..0654371641f 100644 --- a/docs/spec/transactions/transaction.json +++ b/docs/spec/transactions/transaction.json @@ -52,6 +52,10 @@ "description": "The result of the transaction. For HTTP-related transactions, this should be the status code formatted like 'HTTP 2xx'.", "maxLength": 1024 }, + "outcome": { + "$ref": "../outcome.json", + "description": "The outcome of the transaction: success, failure, or unknown. This is similar to 'result', but has a limited set of permitted values describing the success or failure of the transaction from the service's perspective. This field can be used for calculating error rates for incoming requests." + }, "marks": { "type": ["object", "null"], "description": "A mark captures the timing of a significant event during the lifetime of a transaction. Marks are organized into groups and can be set by the user or the agent.", diff --git a/include/fields.go b/include/fields.go index 4fe8a4cd179..79d1301968e 100644 --- a/include/fields.go +++ b/include/fields.go @@ -32,5 +32,5 @@ func init() { // AssetBuildFieldsFieldsYml returns asset data. // This is the base64 encoded gzipped contents of build/fields/fields.yml. func AssetBuildFieldsFieldsYml() string { - return "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" + return "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" } diff --git a/model/modeldecoder/field/rum_v3_mapping.go b/model/modeldecoder/field/rum_v3_mapping.go index 79eed06176b..c66f3ba6750 100644 --- a/model/modeldecoder/field/rum_v3_mapping.go +++ b/model/modeldecoder/field/rum_v3_mapping.go @@ -78,6 +78,7 @@ var rumV3Mapping = map[string]string{ "module": "mo", "name": "n", "navigationTiming": "nt", + "outcome": "o", "page": "p", "param_message": "pmg", "parent_id": "pid", diff --git a/model/modeldecoder/span.go b/model/modeldecoder/span.go index 0b6a68c345f..f935883f459 100644 --- a/model/modeldecoder/span.go +++ b/model/modeldecoder/span.go @@ -93,6 +93,10 @@ func decodeSpan(input Input, schema *jsonschema.Schema) (_ *model.Span, parentIn decodeString(raw, fieldName("parent_id"), &event.ParentID) decodeString(raw, fieldName("trace_id"), &event.TraceID) decodeString(raw, fieldName("transaction_id"), &event.TransactionID) + decodeString(raw, fieldName("outcome"), &event.Outcome) + if event.Outcome == "" { + event.Outcome = "unknown" + } ctx := decoder.MapStr(raw, fieldName("context")) if ctx != nil { diff --git a/model/modeldecoder/span_test.go b/model/modeldecoder/span_test.go index 9a9ed39adfd..58b25356f82 100644 --- a/model/modeldecoder/span_test.go +++ b/model/modeldecoder/span_test.go @@ -45,6 +45,7 @@ func TestDecodeSpan(t *testing.T) { instance, statement, dbType, user, link, rowsAffected := "db01", "select *", "sql", "joe", "other.db.com", 34 address, port := "localhost", 8080 destServiceType, destServiceName, destServiceResource := "db", "elasticsearch", "elasticsearch" + outcome := "success" context := map[string]interface{}{ "a": "b", "tags": map[string]interface{}{"a": "tag", "tag_key": 17}, @@ -101,6 +102,7 @@ func TestDecodeSpan(t *testing.T) { ParentID: parentID, ID: id, TraceID: traceID, + Outcome: "unknown", }, }, "no timestamp specified, request time + start used": { @@ -118,6 +120,7 @@ func TestDecodeSpan(t *testing.T) { TraceID: traceID, Start: &start, Timestamp: requestTime.Add(time.Duration(start * float64(time.Millisecond))), + Outcome: "unknown", }, }, "event experimental=false": { @@ -139,6 +142,7 @@ func TestDecodeSpan(t *testing.T) { ID: id, TraceID: traceID, TransactionID: transactionID, + Outcome: "unknown", }, }, "event experimental=true, no experimental payload": { @@ -160,6 +164,7 @@ func TestDecodeSpan(t *testing.T) { ID: id, TraceID: traceID, TransactionID: transactionID, + Outcome: "unknown", }, cfg: Config{Experimental: true}, }, @@ -183,6 +188,7 @@ func TestDecodeSpan(t *testing.T) { TraceID: traceID, TransactionID: transactionID, Experimental: 123, + Outcome: "unknown", }, cfg: Config{Experimental: true}, }, @@ -191,6 +197,7 @@ func TestDecodeSpan(t *testing.T) { "name": name, "type": "messaging", "subtype": subtype, "action": action, "start": start, "duration": duration, "context": context, "timestamp": timestampEpoch, "stacktrace": stacktrace, "id": id, "parent_id": parentID, "trace_id": traceID, "transaction_id": transactionID, + "outcome": outcome, }, e: &m.Span{ Metadata: metadata, @@ -201,6 +208,7 @@ func TestDecodeSpan(t *testing.T) { Start: &start, Duration: duration, Timestamp: spanTime, + Outcome: outcome, Stacktrace: m.Stacktrace{ &m.StacktraceFrame{Filename: tests.StringPtr("file")}, }, @@ -296,6 +304,10 @@ func TestDecodeSpanInvalid(t *testing.T) { input: map[string]interface{}{"duration": -1.0}, err: "duration.*must be >= 0 but found -1", }, + "invalid outcome": { + input: map[string]interface{}{"outcome": `¯\_(ツ)_/¯`}, + err: `outcome.*must be one of , "success", "failure", "unknown"`, + }, } { t.Run(name, func(t *testing.T) { input := make(map[string]interface{}) diff --git a/model/modeldecoder/transaction.go b/model/modeldecoder/transaction.go index 44e44d06c2d..818fead35bc 100644 --- a/model/modeldecoder/transaction.go +++ b/model/modeldecoder/transaction.go @@ -163,7 +163,11 @@ func decodeTransaction(input Input, schema *jsonschema.Schema) (*model.Transacti decodeString(raw, fieldName("type"), &e.Type) decodeString(raw, fieldName("name"), &e.Name) decodeString(raw, fieldName("result"), &e.Result) + decodeString(raw, fieldName("outcome"), &e.Outcome) decodeFloat64(raw, fieldName("duration"), &e.Duration) + if e.Outcome == "" { + e.Outcome = "unknown" + } if obj := getObject(raw, fieldName("experience")); obj != nil { var experience model.UserExperience diff --git a/model/modeldecoder/transaction_test.go b/model/modeldecoder/transaction_test.go index 2adfa264741..e2c15075a78 100644 --- a/model/modeldecoder/transaction_test.go +++ b/model/modeldecoder/transaction_test.go @@ -33,10 +33,11 @@ import ( ) var ( - trID = "123" - trType = "type" - trName = "foo()" - trResult = "555" + trID = "123" + trType = "type" + trName = "foo()" + trResult = "555" + trOutcome = "success" trDuration = 6.0 @@ -68,6 +69,7 @@ var fullTransactionInput = map[string]interface{}{ "duration": trDuration, "timestamp": timestampEpoch, "result": trResult, + "outcome": trOutcome, "sampled": true, "trace_id": traceID, "parent_id": parentID, @@ -124,6 +126,10 @@ func TestDecodeTransactionInvalid(t *testing.T) { input: map[string]interface{}{"duration": -1.0}, err: "duration.*must be >= 0 but found -1", }, + "invalid outcome": { + input: map[string]interface{}{"outcome": `¯\_(ツ)_/¯`}, + err: `outcome.*must be one of , "success", "failure", "unknown"`, + }, } { t.Run(name, func(t *testing.T) { input := make(map[string]interface{}) @@ -170,6 +176,7 @@ func TestTransactionDecodeRUMV3Marks(t *testing.T) { func TestTransactionEventDecode(t *testing.T) { id, trType, name, result := "123", "type", "foo()", "555" + outcome := "success" requestTime := time.Now() timestampParsed := time.Date(2017, 5, 30, 18, 53, 27, 154*1e6, time.UTC) timestampEpoch := json.Number(fmt.Sprintf("%d", timestampParsed.UnixNano()/1000)) @@ -217,6 +224,7 @@ func TestTransactionEventDecode(t *testing.T) { Duration: duration, Timestamp: requestTime, SpanCount: model.SpanCount{Dropped: &dropped, Started: &started}, + Outcome: "unknown", }, }, "event experimental=true, no experimental payload": { @@ -234,6 +242,7 @@ func TestTransactionEventDecode(t *testing.T) { Duration: duration, Timestamp: timestampParsed, SpanCount: model.SpanCount{Dropped: &dropped, Started: &started}, + Outcome: "unknown", }, }, "event experimental=false": { @@ -251,6 +260,7 @@ func TestTransactionEventDecode(t *testing.T) { Duration: duration, Timestamp: timestampParsed, SpanCount: model.SpanCount{Dropped: &dropped, Started: &started}, + Outcome: "unknown", }, }, "event experimental=true": { @@ -269,6 +279,7 @@ func TestTransactionEventDecode(t *testing.T) { Timestamp: timestampParsed, SpanCount: model.SpanCount{Dropped: &dropped, Started: &started}, Experimental: map[string]interface{}{"foo": "bar"}, + Outcome: "unknown", }, }, "messaging event": { @@ -293,6 +304,7 @@ func TestTransactionEventDecode(t *testing.T) { Duration: duration, Timestamp: timestampParsed, SpanCount: model.SpanCount{Dropped: &dropped, Started: &started}, + Outcome: "unknown", Message: &model.Message{ QueueName: tests.StringPtr("order"), Body: tests.StringPtr("confirmed"), @@ -305,6 +317,7 @@ func TestTransactionEventDecode(t *testing.T) { input: map[string]interface{}{ "timestamp": timestampEpoch, "result": result, + "outcome": outcome, "sampled": sampled, "parent_id": parentID, "marks": marks, @@ -336,6 +349,7 @@ func TestTransactionEventDecode(t *testing.T) { Type: trType, Name: name, Result: result, + Outcome: outcome, ParentID: parentID, TraceID: traceID, Duration: duration, diff --git a/model/span.go b/model/span.go index a1f6e378fbb..8a2464a967f 100644 --- a/model/span.go +++ b/model/span.go @@ -54,6 +54,7 @@ type Span struct { Message *Message Name string + Outcome string Start *float64 Duration float64 Service *Service @@ -203,6 +204,7 @@ func (e *Span) Transform(ctx context.Context, cfg *transform.Config) []beat.Even utility.Set(fields, "experimental", e.Experimental) utility.Set(fields, "destination", e.Destination.fields()) utility.Set(fields, "timestamp", utility.TimeAsMicros(e.Timestamp)) + utility.DeepUpdate(fields, "event.outcome", e.Outcome) return []beat.Event{ { diff --git a/model/span/generated/schema/rum_v3_span.go b/model/span/generated/schema/rum_v3_span.go index bc0eb407a8f..a0d23f8bcb9 100644 --- a/model/span/generated/schema/rum_v3_span.go +++ b/model/span/generated/schema/rum_v3_span.go @@ -61,6 +61,14 @@ const RUMV3Schema = `{ "description": "The specific kind of event within the sub-type represented by the span (e.g. query, connect)", "maxLength": 1024 }, + "o": { + "$id": "docs/spec/outcome.json", + "title": "Outcome", + "type": ["string", "null"], + "enum": [null, "success", "failure", "unknown"], + "description": "The outcome of the transaction: success, failure, or unknown. This is similar to 'result', but has a limited set of permitted values describing the success or failure of the transaction from the service's perspective. This field can be used for calculating error rates.", + "description": "The outcome of the span: success, failure, or unknown. Outcome may be one of a limited set of permitted values describing the success or failure of the span. This field can be used for calculating error rates for outgoing requests." + }, "c": { "type": [ "object", diff --git a/model/span/generated/schema/span.go b/model/span/generated/schema/span.go index c70d368f976..5b563ec3107 100644 --- a/model/span/generated/schema/span.go +++ b/model/span/generated/schema/span.go @@ -93,6 +93,14 @@ const ModelSchema = `{ "description": "The specific kind of event within the sub-type represented by the span (e.g. query, connect)", "maxLength": 1024 }, + "outcome": { + "$id": "docs/spec/outcome.json", + "title": "Outcome", + "type": ["string", "null"], + "enum": [null, "success", "failure", "unknown"], + "description": "The outcome of the transaction: success, failure, or unknown. This is similar to 'result', but has a limited set of permitted values describing the success or failure of the transaction from the service's perspective. This field can be used for calculating error rates.", + "description": "The outcome of the span: success, failure, or unknown. Outcome may be one of a limited set of permitted values describing the success or failure of the span. This field can be used for calculating error rates for outgoing requests." + }, "context": { "type": ["object", "null"], "description": "Any other arbitrary data captured by the agent, optionally provided by the user", diff --git a/model/span_test.go b/model/span_test.go index dbeb8d924bf..cf52c54a1a2 100644 --- a/model/span_test.go +++ b/model/span_test.go @@ -55,6 +55,7 @@ func TestSpanTransform(t *testing.T) { Msg string }{ { + Msg: "Span without a Stacktrace", Span: Span{Timestamp: timestamp, Metadata: metadata}, Output: common.MapStr{ "processor": common.MapStr{"event": "span", "name": "transaction"}, @@ -64,12 +65,29 @@ func TestSpanTransform(t *testing.T) { "name": "", "type": "", }, + "event": common.MapStr{"outcome": ""}, "labels": metadataLabels, "timestamp": common.MapStr{"us": timestampUs}, }, - Msg: "Span without a Stacktrace", }, { + Msg: "Span with outcome", + Span: Span{Timestamp: timestamp, Metadata: metadata, Outcome: "success"}, + Output: common.MapStr{ + "processor": common.MapStr{"event": "span", "name": "transaction"}, + "service": common.MapStr{"name": serviceName, "environment": env, "version": serviceVersion}, + "span": common.MapStr{ + "duration": common.MapStr{"us": 0}, + "name": "", + "type": "", + }, + "timestamp": common.MapStr{"us": timestampUs}, + "labels": metadataLabels, + "event": common.MapStr{"outcome": "success"}, + }, + }, + { + Msg: "Full Span", Span: Span{ Metadata: metadata, ID: hexID, @@ -81,6 +99,7 @@ func TestSpanTransform(t *testing.T) { Action: &action, Timestamp: timestamp, Start: &start, + Outcome: "unknown", Duration: 1.20, RUM: true, Stacktrace: Stacktrace{{AbsPath: &path}}, @@ -144,8 +163,8 @@ func TestSpanTransform(t *testing.T) { "trace": common.MapStr{"id": traceID}, "parent": common.MapStr{"id": parentID}, "destination": common.MapStr{"address": address, "ip": address, "port": port}, + "event": common.MapStr{"outcome": "unknown"}, }, - Msg: "Full Span", }, } @@ -154,6 +173,6 @@ func TestSpanTransform(t *testing.T) { RUM: transform.RUMConfig{SourcemapStore: &sourcemap.Store{}}, }) fields := output[0].Fields - assert.Equal(t, test.Output, fields) + assert.Equal(t, test.Output, fields, test.Msg) } } diff --git a/model/transaction.go b/model/transaction.go index 5a711eaadd9..105470dd1fd 100644 --- a/model/transaction.go +++ b/model/transaction.go @@ -52,6 +52,7 @@ type Transaction struct { Type string Name string Result string + Outcome string Duration float64 Marks TransactionMarks Message *Message @@ -136,6 +137,7 @@ func (e *Transaction) Transform(_ context.Context, _ *transform.Config) []beat.E utility.Set(fields, "url", e.Page.URL.Fields()) } } + utility.DeepUpdate(fields, "event.outcome", e.Outcome) utility.Set(fields, "experimental", e.Experimental) return []beat.Event{{Fields: fields, Timestamp: e.Timestamp}} diff --git a/model/transaction/generated/schema/rum_v3_transaction.go b/model/transaction/generated/schema/rum_v3_transaction.go index 98e395d5502..6a5518485b5 100644 --- a/model/transaction/generated/schema/rum_v3_transaction.go +++ b/model/transaction/generated/schema/rum_v3_transaction.go @@ -100,6 +100,14 @@ const RUMV3Schema = `{ "description": "The specific kind of event within the sub-type represented by the span (e.g. query, connect)", "maxLength": 1024 }, + "o": { + "$id": "docs/spec/outcome.json", + "title": "Outcome", + "type": ["string", "null"], + "enum": [null, "success", "failure", "unknown"], + "description": "The outcome of the transaction: success, failure, or unknown. This is similar to 'result', but has a limited set of permitted values describing the success or failure of the transaction from the service's perspective. This field can be used for calculating error rates.", + "description": "The outcome of the span: success, failure, or unknown. Outcome may be one of a limited set of permitted values describing the success or failure of the span. This field can be used for calculating error rates for outgoing requests." + }, "c": { "type": [ "object", @@ -850,6 +858,14 @@ const RUMV3Schema = `{ "description": "The result of the transaction. For HTTP-related transactions, this should be the status code formatted like 'HTTP 2xx'.", "maxLength": 1024 }, + "o": { + "$id": "docs/spec/outcome.json", + "title": "Outcome", + "type": ["string", "null"], + "enum": [null, "success", "failure", "unknown"], + "description": "The outcome of the transaction: success, failure, or unknown. This is similar to 'result', but has a limited set of permitted values describing the success or failure of the transaction from the service's perspective. This field can be used for calculating error rates.", + "description": "The outcome of the transaction: success, failure, or unknown. This is similar to 'result', but has a limited set of permitted values describing the success or failure of the transaction from the service's perspective. This field can be used for calculating error rates for incoming requests." + }, "k": { "type": [ "object", diff --git a/model/transaction/generated/schema/transaction.go b/model/transaction/generated/schema/transaction.go index e231f74cd4f..5dd3ea7556c 100644 --- a/model/transaction/generated/schema/transaction.go +++ b/model/transaction/generated/schema/transaction.go @@ -459,6 +459,14 @@ const ModelSchema = `{ "description": "The result of the transaction. For HTTP-related transactions, this should be the status code formatted like 'HTTP 2xx'.", "maxLength": 1024 }, + "outcome": { + "$id": "docs/spec/outcome.json", + "title": "Outcome", + "type": ["string", "null"], + "enum": [null, "success", "failure", "unknown"], + "description": "The outcome of the transaction: success, failure, or unknown. This is similar to 'result', but has a limited set of permitted values describing the success or failure of the transaction from the service's perspective. This field can be used for calculating error rates.", + "description": "The outcome of the transaction: success, failure, or unknown. This is similar to 'result', but has a limited set of permitted values describing the success or failure of the transaction from the service's perspective. This field can be used for calculating error rates for incoming requests." + }, "marks": { "type": ["object", "null"], "description": "A mark captures the timing of a significant event during the lifetime of a transaction. Marks are organized into groups and can be set by the user or the agent.", diff --git a/model/transaction_test.go b/model/transaction_test.go index cc26a38d9a8..294b4fb236f 100644 --- a/model/transaction_test.go +++ b/model/transaction_test.go @@ -132,6 +132,13 @@ func TestTransactionTransform(t *testing.T) { } } +func TestTransactionTransformOutcome(t *testing.T) { + tx := Transaction{Outcome: "success"} + events := tx.Transform(context.Background(), &transform.Config{}) + require.Len(t, events, 1) + assert.Equal(t, common.MapStr{"outcome": "success"}, events[0].Fields["event"]) +} + func TestEventsTransformWithMetadata(t *testing.T) { hostname := "a.b.c" architecture := "darwin" @@ -207,6 +214,7 @@ func TestEventsTransformWithMetadata(t *testing.T) { }, "message": common.MapStr{"queue": common.MapStr{"name": "routeUser"}}, }, + "event": common.MapStr{"outcome": ""}, "labels": common.MapStr{"a": "b"}, "url": common.MapStr{"original": url}, "http": common.MapStr{ diff --git a/processor/otel/consumer.go b/processor/otel/consumer.go index 0a049256849..a825f4cb0c4 100644 --- a/processor/otel/consumer.go +++ b/processor/otel/consumer.go @@ -111,6 +111,7 @@ func (c *Consumer) convert(td consumerdata.TraceData) *model.Batch { Timestamp: startTime, Duration: duration, Name: name, + Outcome: "unknown", } parseTransaction(otelSpan, td.SourceFormat, hostname, &transaction) batch.Transactions = append(batch.Transactions, &transaction) @@ -128,6 +129,7 @@ func (c *Consumer) convert(td consumerdata.TraceData) *model.Batch { Timestamp: startTime, Duration: duration, Name: name, + Outcome: "unknown", } parseSpan(otelSpan, &span) batch.Spans = append(batch.Spans, &span) diff --git a/processor/otel/test_approved/consume_span.approved.json b/processor/otel/test_approved/consume_span.approved.json index 5aa80b48efb..e2e91dc3f28 100644 --- a/processor/otel/test_approved/consume_span.approved.json +++ b/processor/otel/test_approved/consume_span.approved.json @@ -6,6 +6,9 @@ "name": "Jaeger", "version": "unknown" }, + "event": { + "outcome": "unknown" + }, "processor": { "event": "transaction", "name": "transaction" @@ -35,6 +38,9 @@ "name": "Jaeger", "version": "unknown" }, + "event": { + "outcome": "unknown" + }, "parent": { "id": "46463058" }, diff --git a/processor/otel/test_approved/metadata_jaeger-no-language.approved.json b/processor/otel/test_approved/metadata_jaeger-no-language.approved.json index b8737f2148a..413ea9d6c1c 100644 --- a/processor/otel/test_approved/metadata_jaeger-no-language.approved.json +++ b/processor/otel/test_approved/metadata_jaeger-no-language.approved.json @@ -6,6 +6,9 @@ "name": "Jaeger", "version": "3.4.12" }, + "event": { + "outcome": "unknown" + }, "processor": { "event": "transaction", "name": "transaction" diff --git a/processor/otel/test_approved/metadata_jaeger-version.approved.json b/processor/otel/test_approved/metadata_jaeger-version.approved.json index 95b35093d4f..b24362e1327 100644 --- a/processor/otel/test_approved/metadata_jaeger-version.approved.json +++ b/processor/otel/test_approved/metadata_jaeger-version.approved.json @@ -6,6 +6,9 @@ "name": "Jaeger/PHP", "version": "3.4.12" }, + "event": { + "outcome": "unknown" + }, "processor": { "event": "transaction", "name": "transaction" diff --git a/processor/otel/test_approved/metadata_jaeger.approved.json b/processor/otel/test_approved/metadata_jaeger.approved.json index 97cc356786a..f458485969b 100644 --- a/processor/otel/test_approved/metadata_jaeger.approved.json +++ b/processor/otel/test_approved/metadata_jaeger.approved.json @@ -7,6 +7,9 @@ "name": "Jaeger/C++", "version": "3.2.1" }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host-foo", "ip": "17.0.10.123", diff --git a/processor/otel/test_approved/metadata_jaeger_full-traceid.approved.json b/processor/otel/test_approved/metadata_jaeger_full-traceid.approved.json index 0b9f630f0c9..27d38732c1b 100644 --- a/processor/otel/test_approved/metadata_jaeger_full-traceid.approved.json +++ b/processor/otel/test_approved/metadata_jaeger_full-traceid.approved.json @@ -6,6 +6,9 @@ "name": "Jaeger", "version": "unknown" }, + "event": { + "outcome": "unknown" + }, "processor": { "event": "transaction", "name": "transaction" diff --git a/processor/otel/test_approved/metadata_jaeger_minimal.approved.json b/processor/otel/test_approved/metadata_jaeger_minimal.approved.json index 0a2e7c809be..48624bc91c8 100644 --- a/processor/otel/test_approved/metadata_jaeger_minimal.approved.json +++ b/processor/otel/test_approved/metadata_jaeger_minimal.approved.json @@ -6,6 +6,9 @@ "name": "Jaeger", "version": "unknown" }, + "event": { + "outcome": "unknown" + }, "processor": { "event": "transaction", "name": "transaction" diff --git a/processor/otel/test_approved/metadata_minimal.approved.json b/processor/otel/test_approved/metadata_minimal.approved.json index 40c422514a8..ce04e6993a5 100644 --- a/processor/otel/test_approved/metadata_minimal.approved.json +++ b/processor/otel/test_approved/metadata_minimal.approved.json @@ -6,6 +6,9 @@ "name": "Foo", "version": "unknown" }, + "event": { + "outcome": "unknown" + }, "processor": { "event": "transaction", "name": "transaction" diff --git a/processor/otel/test_approved/span_jaeger_custom.approved.json b/processor/otel/test_approved/span_jaeger_custom.approved.json index c38e194804b..6ad5dab2567 100644 --- a/processor/otel/test_approved/span_jaeger_custom.approved.json +++ b/processor/otel/test_approved/span_jaeger_custom.approved.json @@ -6,6 +6,9 @@ "name": "Jaeger", "version": "unknown" }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host-abc", "name": "host-abc" diff --git a/processor/otel/test_approved/span_jaeger_db.approved.json b/processor/otel/test_approved/span_jaeger_db.approved.json index 272394df4cb..a8d836b4d97 100644 --- a/processor/otel/test_approved/span_jaeger_db.approved.json +++ b/processor/otel/test_approved/span_jaeger_db.approved.json @@ -10,6 +10,9 @@ "address": "db", "port": 3306 }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host-abc", "name": "host-abc" diff --git a/processor/otel/test_approved/span_jaeger_http.approved.json b/processor/otel/test_approved/span_jaeger_http.approved.json index d69a7da587b..356b396e12d 100644 --- a/processor/otel/test_approved/span_jaeger_http.approved.json +++ b/processor/otel/test_approved/span_jaeger_http.approved.json @@ -10,6 +10,9 @@ "address": "foo.bar.com", "port": 80 }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host-abc", "name": "host-abc" diff --git a/processor/otel/test_approved/span_jaeger_http_status_code.approved.json b/processor/otel/test_approved/span_jaeger_http_status_code.approved.json index a442c1deeeb..d0b78523349 100644 --- a/processor/otel/test_approved/span_jaeger_http_status_code.approved.json +++ b/processor/otel/test_approved/span_jaeger_http_status_code.approved.json @@ -10,6 +10,9 @@ "address": "foo.bar.com", "port": 80 }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host-abc", "name": "host-abc" diff --git a/processor/otel/test_approved/span_jaeger_https_default_port.approved.json b/processor/otel/test_approved/span_jaeger_https_default_port.approved.json index 364d2f7bac5..8a123fb8abf 100644 --- a/processor/otel/test_approved/span_jaeger_https_default_port.approved.json +++ b/processor/otel/test_approved/span_jaeger_https_default_port.approved.json @@ -10,6 +10,9 @@ "address": "foo.bar.com", "port": 443 }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host-abc", "name": "host-abc" diff --git a/processor/otel/test_approved/span_jaeger_messaging.approved.json b/processor/otel/test_approved/span_jaeger_messaging.approved.json index 02d20f49e8b..f70df328b26 100644 --- a/processor/otel/test_approved/span_jaeger_messaging.approved.json +++ b/processor/otel/test_approved/span_jaeger_messaging.approved.json @@ -10,6 +10,9 @@ "address": "mq", "port": 1234 }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host-abc", "name": "host-abc" diff --git a/processor/otel/test_approved/transaction_jaeger_custom.approved.json b/processor/otel/test_approved/transaction_jaeger_custom.approved.json index 6ed86e2cf0a..f4d4ae7a0db 100644 --- a/processor/otel/test_approved/transaction_jaeger_custom.approved.json +++ b/processor/otel/test_approved/transaction_jaeger_custom.approved.json @@ -6,6 +6,9 @@ "name": "Jaeger", "version": "unknown" }, + "event": { + "outcome": "unknown" + }, "labels": { "a_b": "foo" }, diff --git a/processor/otel/test_approved/transaction_jaeger_full.approved.json b/processor/otel/test_approved/transaction_jaeger_full.approved.json index 47d16338701..806503ac232 100644 --- a/processor/otel/test_approved/transaction_jaeger_full.approved.json +++ b/processor/otel/test_approved/transaction_jaeger_full.approved.json @@ -6,6 +6,9 @@ "name": "Jaeger", "version": "unknown" }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host-abc", "name": "host-abc" diff --git a/processor/otel/test_approved/transaction_jaeger_no_attrs.approved.json b/processor/otel/test_approved/transaction_jaeger_no_attrs.approved.json index 0ac25122bd4..5aa6afef575 100644 --- a/processor/otel/test_approved/transaction_jaeger_no_attrs.approved.json +++ b/processor/otel/test_approved/transaction_jaeger_no_attrs.approved.json @@ -6,6 +6,9 @@ "name": "Jaeger", "version": "unknown" }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host-abc", "name": "host-abc" diff --git a/processor/otel/test_approved/transaction_jaeger_sampling_rate.approved.json b/processor/otel/test_approved/transaction_jaeger_sampling_rate.approved.json index a7be7796ac7..d9930ac0cf9 100644 --- a/processor/otel/test_approved/transaction_jaeger_sampling_rate.approved.json +++ b/processor/otel/test_approved/transaction_jaeger_sampling_rate.approved.json @@ -6,6 +6,9 @@ "name": "Jaeger", "version": "unknown" }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host-abc", "name": "host-abc" diff --git a/processor/otel/test_approved/transaction_jaeger_type_component.approved.json b/processor/otel/test_approved/transaction_jaeger_type_component.approved.json index cc090fa1eb4..da6d530c8c4 100644 --- a/processor/otel/test_approved/transaction_jaeger_type_component.approved.json +++ b/processor/otel/test_approved/transaction_jaeger_type_component.approved.json @@ -6,6 +6,9 @@ "name": "Jaeger", "version": "unknown" }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host-abc", "name": "host-abc" diff --git a/processor/otel/test_approved/transaction_jaeger_type_messaging.approved.json b/processor/otel/test_approved/transaction_jaeger_type_messaging.approved.json index fff79939d55..e5b19f6c04a 100644 --- a/processor/otel/test_approved/transaction_jaeger_type_messaging.approved.json +++ b/processor/otel/test_approved/transaction_jaeger_type_messaging.approved.json @@ -6,6 +6,9 @@ "name": "Jaeger", "version": "unknown" }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host-abc", "name": "host-abc" diff --git a/processor/otel/test_approved/transaction_jaeger_type_request.approved.json b/processor/otel/test_approved/transaction_jaeger_type_request.approved.json index aa8a4857851..4414e25caa8 100644 --- a/processor/otel/test_approved/transaction_jaeger_type_request.approved.json +++ b/processor/otel/test_approved/transaction_jaeger_type_request.approved.json @@ -6,6 +6,9 @@ "name": "Jaeger", "version": "unknown" }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host-abc", "name": "host-abc" diff --git a/processor/otel/test_approved/transaction_jaeger_type_request_result.approved.json b/processor/otel/test_approved/transaction_jaeger_type_request_result.approved.json index 519fd70d8ef..6a4cbe7ba87 100644 --- a/processor/otel/test_approved/transaction_jaeger_type_request_result.approved.json +++ b/processor/otel/test_approved/transaction_jaeger_type_request_result.approved.json @@ -6,6 +6,9 @@ "name": "Jaeger", "version": "unknown" }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host-abc", "name": "host-abc" diff --git a/processor/stream/package_tests/error_attrs_test.go b/processor/stream/package_tests/error_attrs_test.go index 437322ddb4a..52459203497 100644 --- a/processor/stream/package_tests/error_attrs_test.go +++ b/processor/stream/package_tests/error_attrs_test.go @@ -59,6 +59,7 @@ func errorFieldsNotInPayloadAttrs() *tests.Set { return tests.NewSet( "view errors", "error id icon", "host.ip", "transaction.name", "source.ip", + tests.Group("event"), tests.Group("observer"), tests.Group("user"), tests.Group("client"), @@ -133,6 +134,7 @@ func errorKeywordExceptionKeys() *tests.Set { return tests.NewSet( "processor.event", "processor.name", "error.grouping_key", "context.tags", "transaction.name", + "event.outcome", // not relevant "view errors", "error id icon", tests.Group("url"), tests.Group("http"), diff --git a/processor/stream/package_tests/metadata_attrs_test.go b/processor/stream/package_tests/metadata_attrs_test.go index 74df0c787c9..7fb2f567c0f 100644 --- a/processor/stream/package_tests/metadata_attrs_test.go +++ b/processor/stream/package_tests/metadata_attrs_test.go @@ -134,6 +134,7 @@ func TestKeywordLimitationOnMetadataAttrs(t *testing.T) { tests.NewSet("processor.event", "processor.name", "process.args", tests.Group("observer"), + tests.Group("event"), tests.Group("http"), tests.Group("url"), tests.Group("context.tags"), diff --git a/processor/stream/package_tests/span_attrs_test.go b/processor/stream/package_tests/span_attrs_test.go index 1fc44fd89fe..d72649182c5 100644 --- a/processor/stream/package_tests/span_attrs_test.go +++ b/processor/stream/package_tests/span_attrs_test.go @@ -149,6 +149,7 @@ func spanKeywordExceptionKeys() *tests.Set { return tests.Union(tests.NewSet( "processor.event", "processor.name", "context.tags", "transaction.type", "transaction.name", + "event.outcome", tests.Group("observer"), // metadata fields diff --git a/processor/stream/package_tests/transaction_attrs_test.go b/processor/stream/package_tests/transaction_attrs_test.go index 79caec9f83b..498834497ee 100644 --- a/processor/stream/package_tests/transaction_attrs_test.go +++ b/processor/stream/package_tests/transaction_attrs_test.go @@ -110,6 +110,7 @@ func transactionKeywordExceptionKeys() *tests.Set { "processor.event", "processor.name", "transaction.marks", "context.tags", + "event.outcome", tests.Group("observer"), tests.Group("url"), tests.Group("http"), diff --git a/processor/stream/test_approved_es_documents/testIntakeIntegrationEvents.approved.json b/processor/stream/test_approved_es_documents/testIntakeIntegrationEvents.approved.json index 62e5fcd874b..a3ea2d1783a 100644 --- a/processor/stream/test_approved_es_documents/testIntakeIntegrationEvents.approved.json +++ b/processor/stream/test_approved_es_documents/testIntakeIntegrationEvents.approved.json @@ -13,6 +13,9 @@ "container": { "id": "8ec7ceb990749e79b37f6dc6cd3628633618d6ce412553a552a0fa6b69419ad4" }, + "event": { + "outcome": "unknown" + }, "host": { "architecture": "amd64", "hostname": "node-name", @@ -191,6 +194,9 @@ "container": { "id": "8ec7ceb990749e79b37f6dc6cd3628633618d6ce412553a552a0fa6b69419ad4" }, + "event": { + "outcome": "unknown" + }, "host": { "architecture": "amd64", "hostname": "node-name", diff --git a/processor/stream/test_approved_es_documents/testIntakeIntegrationInvalidEvent.approved.json b/processor/stream/test_approved_es_documents/testIntakeIntegrationInvalidEvent.approved.json index 52915217442..4171d7a6f4d 100644 --- a/processor/stream/test_approved_es_documents/testIntakeIntegrationInvalidEvent.approved.json +++ b/processor/stream/test_approved_es_documents/testIntakeIntegrationInvalidEvent.approved.json @@ -6,6 +6,9 @@ "name": "elastic-node", "version": "3.14.0" }, + "event": { + "outcome": "unknown" + }, "host": { "ip": "192.0.0.1" }, diff --git a/processor/stream/test_approved_es_documents/testIntakeIntegrationInvalidJSONEvent.approved.json b/processor/stream/test_approved_es_documents/testIntakeIntegrationInvalidJSONEvent.approved.json index 52915217442..4171d7a6f4d 100644 --- a/processor/stream/test_approved_es_documents/testIntakeIntegrationInvalidJSONEvent.approved.json +++ b/processor/stream/test_approved_es_documents/testIntakeIntegrationInvalidJSONEvent.approved.json @@ -6,6 +6,9 @@ "name": "elastic-node", "version": "3.14.0" }, + "event": { + "outcome": "unknown" + }, "host": { "ip": "192.0.0.1" }, diff --git a/processor/stream/test_approved_es_documents/testIntakeIntegrationOptionalTimestamps.approved.json b/processor/stream/test_approved_es_documents/testIntakeIntegrationOptionalTimestamps.approved.json index f9300fea18d..c17e3f74a28 100644 --- a/processor/stream/test_approved_es_documents/testIntakeIntegrationOptionalTimestamps.approved.json +++ b/processor/stream/test_approved_es_documents/testIntakeIntegrationOptionalTimestamps.approved.json @@ -6,6 +6,9 @@ "name": "elastic-node", "version": "3.14.0" }, + "event": { + "outcome": "unknown" + }, "host": { "architecture": "x64", "hostname": "prod1.example.com", @@ -78,6 +81,9 @@ "name": "elastic-node", "version": "3.14.0" }, + "event": { + "outcome": "unknown" + }, "host": { "architecture": "x64", "hostname": "prod1.example.com", diff --git a/processor/stream/test_approved_es_documents/testIntakeIntegrationRumTransactions.approved.json b/processor/stream/test_approved_es_documents/testIntakeIntegrationRumTransactions.approved.json index 90d47a69e63..cc74ef43737 100644 --- a/processor/stream/test_approved_es_documents/testIntakeIntegrationRumTransactions.approved.json +++ b/processor/stream/test_approved_es_documents/testIntakeIntegrationRumTransactions.approved.json @@ -9,6 +9,9 @@ "client": { "ip": "192.0.0.1" }, + "event": { + "outcome": "unknown" + }, "http": { "request": { "referrer": "http://localhost:8000/test/e2e/" @@ -72,6 +75,9 @@ "client": { "ip": "192.0.0.1" }, + "event": { + "outcome": "unknown" + }, "parent": { "id": "611f4fa950f04631" }, diff --git a/processor/stream/test_approved_es_documents/testIntakeIntegrationSpans.approved.json b/processor/stream/test_approved_es_documents/testIntakeIntegrationSpans.approved.json index 18847fb6b77..9adadfe4b78 100644 --- a/processor/stream/test_approved_es_documents/testIntakeIntegrationSpans.approved.json +++ b/processor/stream/test_approved_es_documents/testIntakeIntegrationSpans.approved.json @@ -34,6 +34,9 @@ "container": { "id": "container-id" }, + "event": { + "outcome": "success" + }, "host": { "architecture": "x64", "hostname": "node-name", @@ -146,6 +149,9 @@ "container": { "id": "container-id" }, + "event": { + "outcome": "unknown" + }, "host": { "architecture": "x64", "hostname": "node-name", @@ -259,6 +265,9 @@ "container": { "id": "container-id" }, + "event": { + "outcome": "unknown" + }, "host": { "architecture": "x64", "hostname": "node-name", @@ -376,6 +385,9 @@ "container": { "id": "container-id" }, + "event": { + "outcome": "unknown" + }, "host": { "architecture": "x64", "hostname": "node-name", @@ -495,6 +507,9 @@ "ip": "0:0::0:1", "port": 5432 }, + "event": { + "outcome": "unknown" + }, "host": { "architecture": "x64", "hostname": "node-name", @@ -690,6 +705,9 @@ "address": "0:0::0:1", "ip": "0:0::0:1" }, + "event": { + "outcome": "unknown" + }, "host": { "architecture": "x64", "hostname": "node-name", diff --git a/processor/stream/test_approved_es_documents/testIntakeIntegrationTransactions.approved.json b/processor/stream/test_approved_es_documents/testIntakeIntegrationTransactions.approved.json index dfc346090e8..edd247b1f67 100644 --- a/processor/stream/test_approved_es_documents/testIntakeIntegrationTransactions.approved.json +++ b/processor/stream/test_approved_es_documents/testIntakeIntegrationTransactions.approved.json @@ -29,6 +29,9 @@ "container": { "id": "container-id" }, + "event": { + "outcome": "unknown" + }, "host": { "architecture": "x64", "hostname": "node-name", @@ -143,6 +146,9 @@ "container": { "id": "container-id" }, + "event": { + "outcome": "success" + }, "host": { "architecture": "x64", "hostname": "node-name", @@ -348,6 +354,9 @@ "container": { "id": "container-id" }, + "event": { + "outcome": "unknown" + }, "host": { "architecture": "x64", "hostname": "node-name", @@ -480,6 +489,9 @@ "container": { "id": "container-id" }, + "event": { + "outcome": "unknown" + }, "host": { "architecture": "x64", "hostname": "node-name", diff --git a/processor/stream/test_approved_es_documents/testIntakeRUMV3Events.approved.json b/processor/stream/test_approved_es_documents/testIntakeRUMV3Events.approved.json index 97a346a78b2..2448f538f6a 100644 --- a/processor/stream/test_approved_es_documents/testIntakeRUMV3Events.approved.json +++ b/processor/stream/test_approved_es_documents/testIntakeRUMV3Events.approved.json @@ -9,6 +9,9 @@ "client": { "ip": "192.0.0.1" }, + "event": { + "outcome": "unknown" + }, "http": { "request": { "headers": { @@ -147,6 +150,9 @@ "client": { "ip": "192.0.0.1" }, + "event": { + "outcome": "unknown" + }, "labels": { "testTagKey": "testTagValue" }, @@ -213,6 +219,9 @@ "client": { "ip": "192.0.0.1" }, + "event": { + "outcome": "unknown" + }, "labels": { "testTagKey": "testTagValue" }, @@ -283,6 +292,9 @@ "address": "localhost", "port": 8000 }, + "event": { + "outcome": "unknown" + }, "labels": { "testTagKey": "testTagValue" }, @@ -366,6 +378,9 @@ "client": { "ip": "192.0.0.1" }, + "event": { + "outcome": "unknown" + }, "labels": { "testTagKey": "testTagValue" }, @@ -435,6 +450,9 @@ "address": "localhost", "port": 8000 }, + "event": { + "outcome": "unknown" + }, "labels": { "testTagKey": "testTagValue" }, @@ -522,6 +540,9 @@ "address": "localhost", "port": 8003 }, + "event": { + "outcome": "unknown" + }, "labels": { "testTagKey": "testTagValue" }, @@ -609,6 +630,9 @@ "address": "localhost", "port": 8003 }, + "event": { + "outcome": "unknown" + }, "labels": { "testTagKey": "testTagValue" }, @@ -693,6 +717,9 @@ "client": { "ip": "192.0.0.1" }, + "event": { + "outcome": "success" + }, "labels": { "testTagKey": "testTagValue" }, diff --git a/testdata/intake-v2/spans.ndjson b/testdata/intake-v2/spans.ndjson index bb953bc8d00..a8f9fd00976 100644 --- a/testdata/intake-v2/spans.ndjson +++ b/testdata/intake-v2/spans.ndjson @@ -1,5 +1,5 @@ {"metadata": {"user": {"id": "123", "email": "s@test.com", "username": "john"}, "process": {"ppid": 6789, "pid": 1234,"argv": ["node", "server.js"], "title": "node"}, "system": {"platform": "darwin", "hostname": "prod1.example.com", "architecture": "x64", "container": {"id": "container-id"}, "kubernetes": {"namespace": "namespace1", "pod": {"uid": "pod-uid", "name": "pod-name"}, "node": {"name": "node-name"}}}, "labels": {"tag1": "label1"}, "service": {"name": "backendspans", "language": {"version": "8", "name": "ecmascript"}, "agent": {"version": "3.14.0", "name": "elastic-node"}, "environment": "staging", "framework": {"version": "1.2.3", "name": "Express"}, "version": "5.1.3", "runtime": {"version": "8.0.0", "name": "node"}},"cloud":{"account":{"id":"account_id","name":"account_name"},"availability_zone":"cloud_availability_zone","instance":{"id":"instance_id","name":"instance_name"},"machine":{"type":"machine_type"},"project":{"id":"project_id","name":"project_name"},"provider":"cloud_provider","region":"cloud_region"}}} -{"span": {"trace_id": "fdedef0123456789abcdef9876543210", "parent_id": "abcdef0123456789", "id": "abcdef01234567", "child_ids": ["51234abcdef56789"], "transaction_id": "01af25874dec69dd", "name": "GET /api/types", "type": "db.postgresql.query.custom","start": null, "duration": 141.581, "timestamp": 1532976822281000}} +{"span": {"trace_id": "fdedef0123456789abcdef9876543210", "parent_id": "abcdef0123456789", "id": "abcdef01234567", "child_ids": ["51234abcdef56789"], "transaction_id": "01af25874dec69dd", "name": "GET /api/types", "type": "db.postgresql.query.custom","start": null, "duration": 141.581, "timestamp": 1532976822281000, "outcome": "success"}} {"span": {"trace_id": "abcdef0123456789abcdef9876543210", "parent_id": "0000000011111111", "id": "1234abcdef567895", "transaction_id": "ab45781d265894fe", "name": "GET /api/types", "type": "request", "start": 22, "duration": 32.592981, "timestamp": 1532976822281000,"context":{"service":{"environment":"prod","agent":{}}}}} {"span": {"trace_id": "abcdef0123456789abcdef9876543210", "parent_id": "abcdefabcdef7890", "id": "0123456a89012345", "transaction_id": "ab23456a89012345", "name": "GET /api/types", "type": "request.http", "start": 1.845, "duration": 3.5642981, "stacktrace": [], "context":{"tags": {"tag1": "value1", "tag2": 123, "tag3": 12.34, "tag4": true, "tag5": null},"service":{}}}} {"span": {"trace_id": "abcdef0123456789abcdef9876543210", "parent_id": "ababcdcdefefabde", "id": "abcde56a89012345", "transaction_id": null, "name": "get /api/types", "sync": false, "type": "request", "subtype": "http", "action": "call", "start": 0, "duration": 13.9802981, "stacktrace": null, "context": null }} diff --git a/testdata/intake-v2/transactions.ndjson b/testdata/intake-v2/transactions.ndjson index 8f8dc062a3e..e2d5942a3c6 100644 --- a/testdata/intake-v2/transactions.ndjson +++ b/testdata/intake-v2/transactions.ndjson @@ -1,5 +1,5 @@ {"metadata": {"service": {"name": "1234_service-12a3","node": {"configured_name": "node-123"},"version": "5.1.3","environment": "staging","language": {"name": "ecmascript","version": "8"},"runtime": {"name": "node","version": "8.0.0"},"framework": {"name": "Express","version": "1.2.3"},"agent": {"name": "elastic-node","version": "3.14.0"}},"user": {"id": "123user", "username": "bar", "email": "bar@user.com"}, "labels": {"tag0": null, "tag1": "one", "tag2": 2}, "process": {"pid": 1234,"ppid": 6789,"title": "node","argv": ["node","server.js"]},"system": {"hostname": "prod1.example.com","architecture": "x64","platform": "darwin", "container": {"id": "container-id"}, "kubernetes": {"namespace": "namespace1", "pod": {"uid": "pod-uid", "name": "pod-name"}, "node": {"name": "node-name"}}},"cloud":{"account":{"id":"account_id","name":"account_name"},"availability_zone":"cloud_availability_zone","instance":{"id":"instance_id","name":"instance_name"},"machine":{"type":"machine_type"},"project":{"id":"project_id","name":"project_name"},"provider":"cloud_provider","region":"cloud_region"}}} {"transaction": { "id": "945254c567a5417e", "trace_id": "0123456789abcdef0123456789abcdef", "parent_id": "abcdefabcdef01234567", "type": "request", "duration": 32.592981, "span_count": { "started": 43 }}} -{"transaction": {"id": "4340a8e0df1906ecbfa9", "trace_id": "0acd456789abcdef0123456789abcdef", "name": "GET /api/types","type": "request","duration": 32.592981,"result": "success", "timestamp": 1496170407154000, "sampled": true, "span_count": {"started": 17},"context": {"service": {"runtime": {"version": "7.0"}},"page":{"referer":"http://localhost:8000/test/e2e/","url":"http://localhost:8000/test/e2e/general-usecase/"}, "request": {"socket": {"remote_address": "12.53.12.1","encrypted": true},"http_version": "1.1","method": "POST","url": {"protocol": "https:","full": "https://www.example.com/p/a/t/h?query=string#hash","hostname": "www.example.com","port": "8080","pathname": "/p/a/t/h","search": "?query=string","hash": "#hash","raw": "/p/a/t/h?query=string#hash"},"headers": {"user-agent":["Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36","Mozilla Chrome Edge"],"content-type": "text/html","cookie": "c1=v1, c2=v2","some-other-header": "foo","array": ["foo","bar","baz"]},"cookies": {"c1": "v1","c2": "v2"},"env": {"SERVER_SOFTWARE": "nginx","GATEWAY_INTERFACE": "CGI/1.1"},"body": {"str": "hello world","additional": { "foo": {},"bar": 123,"req": "additional information"}}},"response": {"status_code": 200,"headers": {"content-type": "application/json"},"headers_sent": true,"finished": true,"transfer_size":25.8,"encoded_body_size":26.90,"decoded_body_size":29.90}, "user": {"id": "99","username": "foo"},"tags": {"organization_uuid": "9f0e9d64-c185-4d21-a6f4-4673ed561ec8", "tag2": 12, "tag3": 12.45, "tag4": false, "tag5": null },"custom": {"my_key": 1,"some_other_value": "foo bar","and_objects": {"foo": ["bar","baz"]},"(": "not a valid regex and that is fine"}}}} +{"transaction": {"id": "4340a8e0df1906ecbfa9", "trace_id": "0acd456789abcdef0123456789abcdef", "name": "GET /api/types","type": "request","duration": 32.592981,"outcome":"success", "result": "success", "timestamp": 1496170407154000, "sampled": true, "span_count": {"started": 17},"context": {"service": {"runtime": {"version": "7.0"}},"page":{"referer":"http://localhost:8000/test/e2e/","url":"http://localhost:8000/test/e2e/general-usecase/"}, "request": {"socket": {"remote_address": "12.53.12.1","encrypted": true},"http_version": "1.1","method": "POST","url": {"protocol": "https:","full": "https://www.example.com/p/a/t/h?query=string#hash","hostname": "www.example.com","port": "8080","pathname": "/p/a/t/h","search": "?query=string","hash": "#hash","raw": "/p/a/t/h?query=string#hash"},"headers": {"user-agent":["Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36","Mozilla Chrome Edge"],"content-type": "text/html","cookie": "c1=v1, c2=v2","some-other-header": "foo","array": ["foo","bar","baz"]},"cookies": {"c1": "v1","c2": "v2"},"env": {"SERVER_SOFTWARE": "nginx","GATEWAY_INTERFACE": "CGI/1.1"},"body": {"str": "hello world","additional": { "foo": {},"bar": 123,"req": "additional information"}}},"response": {"status_code": 200,"headers": {"content-type": "application/json"},"headers_sent": true,"finished": true,"transfer_size":25.8,"encoded_body_size":26.90,"decoded_body_size":29.90}, "user": {"id": "99","username": "foo"},"tags": {"organization_uuid": "9f0e9d64-c185-4d21-a6f4-4673ed561ec8", "tag2": 12, "tag3": 12.45, "tag4": false, "tag5": null },"custom": {"my_key": 1,"some_other_value": "foo bar","and_objects": {"foo": ["bar","baz"]},"(": "not a valid regex and that is fine"}}}} {"transaction": { "id": "cdef4340a8e0df19", "trace_id": "0acd456789abcdef0123456789abcdef", "type": "request", "duration": 13.980558, "timestamp": 1532976822281000, "sampled": null, "span_count": { "dropped": 55, "started": 436 }, "marks": {"navigationTiming": {"appBeforeBootstrap": 608.9300000000001,"navigationStart": -21},"another_mark": {"some_long": 10,"some_float": 10.0}, "performance": {}}, "context": { "request": { "socket": { "remote_address": "192.0.1", "encrypted": null }, "method": "POST", "headers": { "user-agent": null, "content-type": null, "cookie": null }, "url": { "protocol": null, "full": null, "hostname": null, "port": null, "pathname": null, "search": null, "hash": null, "raw": null } }, "response": { "headers": { "content-type": null } }, "service": {"environment":"testing","name": "service1","node": {"configured_name": "node-ABC"}, "language": {"version": "2.5", "name": "ruby"}, "agent": {"version": "2.2", "name": "elastic-ruby", "ephemeral_id": "justanid"}, "framework": {"version": "5.0", "name": "Rails"}, "version": "2", "runtime": {"version": "2.5", "name": "cruby"}}},"experience":{"cls":1,"fid":2.0,"tbt":3.4}}} {"transaction": { "id": "00xxxxFFaaaa1234", "trace_id": "0123456789abcdef0123456789abcdef", "name": "amqp receive", "parent_id": "abcdefabcdef01234567", "type": "messaging", "duration": 3, "span_count": { "started": 1 }, "context": {"message": {"queue": { "name": "new_users"}, "age":{ "ms": 1577958057123}, "headers": {"user_id": "1ax3", "involved_services": ["user", "auth"]}, "body": "user created"}}}} diff --git a/testdata/intake-v3/rum_events.ndjson b/testdata/intake-v3/rum_events.ndjson index 77d0e6b73a7..88bcbe51df8 100644 --- a/testdata/intake-v3/rum_events.ndjson +++ b/testdata/intake-v3/rum_events.ndjson @@ -1,3 +1,3 @@ {"m": {"se": {"n": "apm-a-rum-test-e2e-general-usecase","ve": "0.0.1","en": "prod","a": {"n": "js-base","ve": "4.8.1"},"ru": {"n": "v8","ve": "8.0"},"la": {"n": "javascript","ve": "6"},"fw": {"n": "angular","ve": "2"}},"u": {"id": 123,"em": "user@email.com","un": "John Doe"},"l": {"testTagKey": "testTagValue"}}} -{"x": {"id": "ec2e280be8345240","tid": "286ac3ad697892c406528f13c82e0ce1","pid": "1ef08ac234fca23b455d9e27c660f1ab","n": "general-usecase-initial-p-load","t": "p-load","d": 295,"me": [{"sa": {"xdc": {"v": 1},"xds": {"v": 295},"xbc": {"v": 1}}},{"y": {"t": "Request"},"sa": {"ysc": {"v": 1},"yss": {"v": 1}}},{"y": {"t": "Response"},"sa": {"ysc": {"v": 1},"yss": {"v": 1}}}],"y": [{"id": "bbd8bcc3be14d814","n": "Requesting and receiving the document","t": "hard-navigation","su": "browser-timing","s": 4,"d": 2},{"id": "fc546e87a90a774f","n": "Parsing the document, executing sy. scripts","t": "hard-navigation","su": "browser-timing","s": 14,"d": 106},{"id": "fb8f717930697299","n": "http://localhost:8000/test/e2e/general-usecase/app.e2e-bundle.min.js","t": "rc","su": "script","s": 22.53499999642372,"d": 35.060000023804605,"c": {"h": {"url": "http://localhost:8000/test/e2e/general-usecase/app.e2e-bundle.min.js?token=REDACTED","r": {"ts": 677175,"ebs": 676864,"dbs": 676864}},"dt": {"se": {"n": "http://localhost:8000","rc": "localhost:8000","t": "rc"},"ad": "localhost","po": 8000}}},{"id": "9b80535c4403c9fb","n": "OpenTracing y","t": "cu","s": 96.92999999970198,"d": 198.07000000029802},{"id": "5ecb8ee030749715","n": "GET /test/e2e/common/data.json","t": "external","su": "h","sy": true,"s": 98.94000005442649,"d": 6.72499998472631,"c": {"h": {"mt": "GET","url": "http://localhost:8000/test/e2e/common/data.json?test=hamid","sc": 200},"dt": {"se": {"n": "http://localhost:8000","rc": "localhost:8000","t": "external"},"ad": "localhost","po": 8000}}},{"id": "27f45fd274f976d4","n": "POST http://localhost:8003/data","t": "external","su": "h","sy": true,"s": 106.52000003028661,"d": 11.584999971091747,"c": {"h": {"mt": "POST","url": "http://localhost:8003/data","sc": 200},"dt": {"se": {"n": "http://localhost:8003","rc": "localhost:8003","t": "external"},"ad": "localhost","po": 8003}}},{"id": "a3c043330bc2015e","pi": 0,"n": "POST http://localhost:8003/fetch","t": "external","su": "h","ac": "action","sy": false,"s": 119.93500008247793,"d": 15.949999913573265,"c": {"h": {"mt": "POST","url": "http://localhost:8003/fetch","sc": 200},"dt": {"se": {"n": "http://localhost:8003","rc": "localhost:8003","t": "external"},"ad": "localhost","po": 8003}}},{"id": "bc7665dc25629379","st": [{"ap": "http://localhost:8000/test/e2e/general-usecase/app.e2e-bundle.min.js?token=secret","f": "test/e2e/general-usecase/app.e2e-bundle.min.js?token=secret","fn": "generateError","li": 7662,"co": 9},{"ap": "http://localhost:8000/test/e2e/general-usecase/app.e2e-bundle.min.js?token=secret","f": "test/e2e/general-usecase/app.e2e-bundle.min.js?token=secret","fn": "","li": 7666,"co": 3}],"n": "Fire \"DOMContentLoaded\" event","t": "hard-navigation","su": "browser-timing","s": 120,"d": 2}],"c": {"p": {"rf": "http://localhost:8000/test/e2e/","url": "http://localhost:8000/test/e2e/general-usecase/"},"r": {"sc": 200,"ts": 983,"ebs": 690,"dbs": 690,"he": {"Content-Type": "application/json"}},"q": {"he": {"Accept": "application/json"},"hve": "1.1","mt": "GET"},"u": {"id": "uId","un": "un","em": "em"},"cu": {"testContext": "testContext"},"g": {"testTagKey": "testTagValue"}},"k": {"a": {"lp": 131.03000004775822,"fb": 5,"di": 120,"dc": 138,"ds": 100,"de": 110,"fp": 70.82500003930181},"nt": {"fs": 0,"ls": 0,"le": 0,"cs": 0,"ce": 0,"qs": 4,"rs": 5,"re": 6,"dl": 14,"di": 120,"ds": 120,"de": 122,"dc": 138,"es": 138,"ee": 138}},"yc": {"sd": 8,"dd": 1},"sm": true,"exp":{"cls":1,"fid":2.0,"tbt":3.4,"ignored":5,"also":"ignored"}}} +{"x": {"id": "ec2e280be8345240","tid": "286ac3ad697892c406528f13c82e0ce1","pid": "1ef08ac234fca23b455d9e27c660f1ab","n": "general-usecase-initial-p-load","t": "p-load","d": 295,"me": [{"sa": {"xdc": {"v": 1},"xds": {"v": 295},"xbc": {"v": 1}}},{"y": {"t": "Request"},"sa": {"ysc": {"v": 1},"yss": {"v": 1}}},{"y": {"t": "Response"},"sa": {"ysc": {"v": 1},"yss": {"v": 1}}}],"y": [{"id": "bbd8bcc3be14d814","n": "Requesting and receiving the document","t": "hard-navigation","su": "browser-timing","s": 4,"d": 2},{"id": "fc546e87a90a774f","n": "Parsing the document, executing sy. scripts","t": "hard-navigation","su": "browser-timing","s": 14,"d": 106},{"id": "fb8f717930697299","n": "http://localhost:8000/test/e2e/general-usecase/app.e2e-bundle.min.js","t": "rc","su": "script","s": 22.53499999642372,"d": 35.060000023804605,"c": {"h": {"url": "http://localhost:8000/test/e2e/general-usecase/app.e2e-bundle.min.js?token=REDACTED","r": {"ts": 677175,"ebs": 676864,"dbs": 676864}},"dt": {"se": {"n": "http://localhost:8000","rc": "localhost:8000","t": "rc"},"ad": "localhost","po": 8000}}},{"id": "9b80535c4403c9fb","n": "OpenTracing y","t": "cu","s": 96.92999999970198,"d": 198.07000000029802},{"id": "5ecb8ee030749715","n": "GET /test/e2e/common/data.json","t": "external","su": "h","sy": true,"s": 98.94000005442649,"d": 6.72499998472631,"c": {"h": {"mt": "GET","url": "http://localhost:8000/test/e2e/common/data.json?test=hamid","sc": 200},"dt": {"se": {"n": "http://localhost:8000","rc": "localhost:8000","t": "external"},"ad": "localhost","po": 8000}}},{"id": "27f45fd274f976d4","n": "POST http://localhost:8003/data","t": "external","su": "h","sy": true,"s": 106.52000003028661,"d": 11.584999971091747,"c": {"h": {"mt": "POST","url": "http://localhost:8003/data","sc": 200},"dt": {"se": {"n": "http://localhost:8003","rc": "localhost:8003","t": "external"},"ad": "localhost","po": 8003}}},{"id": "a3c043330bc2015e","pi": 0,"n": "POST http://localhost:8003/fetch","t": "external","su": "h","ac": "action","sy": false,"s": 119.93500008247793,"d": 15.949999913573265,"c": {"h": {"mt": "POST","url": "http://localhost:8003/fetch","sc": 200},"dt": {"se": {"n": "http://localhost:8003","rc": "localhost:8003","t": "external"},"ad": "localhost","po": 8003}}},{"id": "bc7665dc25629379","st": [{"ap": "http://localhost:8000/test/e2e/general-usecase/app.e2e-bundle.min.js?token=secret","f": "test/e2e/general-usecase/app.e2e-bundle.min.js?token=secret","fn": "generateError","li": 7662,"co": 9},{"ap": "http://localhost:8000/test/e2e/general-usecase/app.e2e-bundle.min.js?token=secret","f": "test/e2e/general-usecase/app.e2e-bundle.min.js?token=secret","fn": "","li": 7666,"co": 3}],"n": "Fire \"DOMContentLoaded\" event","t": "hard-navigation","su": "browser-timing","s": 120,"d": 2,"o":"success"}],"c": {"p": {"rf": "http://localhost:8000/test/e2e/","url": "http://localhost:8000/test/e2e/general-usecase/"},"r": {"sc": 200,"ts": 983,"ebs": 690,"dbs": 690,"he": {"Content-Type": "application/json"}},"q": {"he": {"Accept": "application/json"},"hve": "1.1","mt": "GET"},"u": {"id": "uId","un": "un","em": "em"},"cu": {"testContext": "testContext"},"g": {"testTagKey": "testTagValue"}},"k": {"a": {"lp": 131.03000004775822,"fb": 5,"di": 120,"dc": 138,"ds": 100,"de": 110,"fp": 70.82500003930181},"nt": {"fs": 0,"ls": 0,"le": 0,"cs": 0,"ce": 0,"qs": 4,"rs": 5,"re": 6,"dl": 14,"di": 120,"ds": 120,"de": 122,"dc": 138,"es": 138,"ee": 138}},"yc": {"sd": 8,"dd": 1},"sm": true,"exp":{"cls":1,"fid":2.0,"tbt":3.4,"ignored":5,"also":"ignored"}}} {"me": {"y": {"t": "Processing","su": "subtype"},"sa": {"ysc": {"v": 1},"yss": {"v": 124}},"g": {"tag1": "value1"}}} diff --git a/testdata/jaeger/batch_0.approved.json b/testdata/jaeger/batch_0.approved.json index 74b05116f32..7a787b14c0a 100644 --- a/testdata/jaeger/batch_0.approved.json +++ b/testdata/jaeger/batch_0.approved.json @@ -7,6 +7,9 @@ "name": "Jaeger/Go", "version": "2.20.1" }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host01", "ip": "10.0.0.13", diff --git a/testdata/jaeger/batch_1.approved.json b/testdata/jaeger/batch_1.approved.json index 646755e3a83..0201232c33b 100644 --- a/testdata/jaeger/batch_1.approved.json +++ b/testdata/jaeger/batch_1.approved.json @@ -7,6 +7,9 @@ "name": "Jaeger/Go", "version": "2.20.1" }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host01", "ip": "10.0.0.13", @@ -53,6 +56,9 @@ "name": "Jaeger/Go", "version": "2.20.1" }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host01", "ip": "10.0.0.13", @@ -100,6 +106,9 @@ "name": "Jaeger/Go", "version": "2.20.1" }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host01", "ip": "10.0.0.13", @@ -146,6 +155,9 @@ "name": "Jaeger/Go", "version": "2.20.1" }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host01", "ip": "10.0.0.13", @@ -192,6 +204,9 @@ "name": "Jaeger/Go", "version": "2.20.1" }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host01", "ip": "10.0.0.13", @@ -238,6 +253,9 @@ "name": "Jaeger/Go", "version": "2.20.1" }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host01", "ip": "10.0.0.13", @@ -284,6 +302,9 @@ "name": "Jaeger/Go", "version": "2.20.1" }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host01", "ip": "10.0.0.13", @@ -331,6 +352,9 @@ "name": "Jaeger/Go", "version": "2.20.1" }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host01", "ip": "10.0.0.13", @@ -377,6 +401,9 @@ "name": "Jaeger/Go", "version": "2.20.1" }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host01", "ip": "10.0.0.13", @@ -423,6 +450,9 @@ "name": "Jaeger/Go", "version": "2.20.1" }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host01", "ip": "10.0.0.13", @@ -469,6 +499,9 @@ "name": "Jaeger/Go", "version": "2.20.1" }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host01", "ip": "10.0.0.13", @@ -515,6 +548,9 @@ "name": "Jaeger/Go", "version": "2.20.1" }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host01", "ip": "10.0.0.13", @@ -562,6 +598,9 @@ "name": "Jaeger/Go", "version": "2.20.1" }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host01", "ip": "10.0.0.13", @@ -608,6 +647,9 @@ "name": "Jaeger/Go", "version": "2.20.1" }, + "event": { + "outcome": "unknown" + }, "host": { "hostname": "host01", "ip": "10.0.0.13", diff --git a/tests/system/drop_unsampled_transactions.approved.json b/tests/system/drop_unsampled_transactions.approved.json index 5c8e08584e9..5b08443a689 100644 --- a/tests/system/drop_unsampled_transactions.approved.json +++ b/tests/system/drop_unsampled_transactions.approved.json @@ -12,7 +12,8 @@ "version": "1.5.0" }, "event": { - "ingested": "2020-04-29T02:24:19.182874Z" + "ingested": "2020-08-11T10:03:11.025737Z", + "outcome": "unknown" }, "host": { "architecture": "x64", @@ -107,7 +108,8 @@ "version": "1.5.0" }, "event": { - "ingested": "2020-04-29T02:24:19.184164Z" + "ingested": "2020-08-11T10:03:11.025919Z", + "outcome": "unknown" }, "host": { "architecture": "x64", @@ -124,9 +126,9 @@ } }, "observer": { - "ephemeral_id": "ebd89158-9f85-469e-9bc0-9e19b174a1ba", + "ephemeral_id": "d0a481f0-3688-40dc-8a59-04abdf72261a", "hostname": "goat", - "id": "01019c57-ff25-4ddf-b9e9-2f421577a9a2", + "id": "fb7e85d9-3666-4b9a-8440-1448c17b5738", "type": "apm-server", "version": "8.0.0", "version_major": 8 @@ -214,7 +216,8 @@ "version": "1.5.0" }, "event": { - "ingested": "2020-04-29T02:24:19.099344Z" + "ingested": "2020-08-11T10:03:10.976907Z", + "outcome": "unknown" }, "host": { "architecture": "x64", @@ -293,9 +296,9 @@ "organization_uuid": "9f0e9d64-c185-4d21-a6f4-4673ed561ec8" }, "observer": { - "ephemeral_id": "ebd89158-9f85-469e-9bc0-9e19b174a1ba", + "ephemeral_id": "d0a481f0-3688-40dc-8a59-04abdf72261a", "hostname": "goat", - "id": "01019c57-ff25-4ddf-b9e9-2f421577a9a2", + "id": "fb7e85d9-3666-4b9a-8440-1448c17b5738", "type": "apm-server", "version": "8.0.0", "version_major": 8 diff --git a/tests/system/jaeger_batch_0_auth_tag_removed.approved.json b/tests/system/jaeger_batch_0_auth_tag_removed.approved.json index 91685f21869..d4fff61f94a 100644 --- a/tests/system/jaeger_batch_0_auth_tag_removed.approved.json +++ b/tests/system/jaeger_batch_0_auth_tag_removed.approved.json @@ -10,7 +10,8 @@ "version": "1.5.0" }, "event": { - "ingested": "2020-04-22T14:57:41.042655Z" + "ingested": "2020-08-11T09:58:54.379837Z", + "outcome": "unknown" }, "host": { "hostname": "host01", @@ -85,7 +86,7 @@ } }, "event": { - "ingested": "2020-04-22T14:57:41.091071Z" + "ingested": "2020-08-11T09:58:54.454089Z" }, "host": { "hostname": "host01", @@ -93,9 +94,9 @@ "name": "host01" }, "observer": { - "ephemeral_id": "b759a57d-4daa-4708-a3ad-18c50d8c940f", - "hostname": "ix.lan", - "id": "3dfbe204-d39c-4f40-8283-de713063099c", + "ephemeral_id": "97a0be74-0ec2-433d-b3f4-8853ae5504c4", + "hostname": "goat", + "id": "a20fd88c-dddf-4e6e-8bcb-b13e08e0b4ce", "type": "apm-server", "version": "8.0.0", "version_major": 8 @@ -149,7 +150,7 @@ } }, "event": { - "ingested": "2020-04-22T14:57:41.095868Z" + "ingested": "2020-08-11T09:58:54.454199Z" }, "host": { "hostname": "host01", @@ -157,9 +158,9 @@ "name": "host01" }, "observer": { - "ephemeral_id": "b759a57d-4daa-4708-a3ad-18c50d8c940f", - "hostname": "ix.lan", - "id": "3dfbe204-d39c-4f40-8283-de713063099c", + "ephemeral_id": "97a0be74-0ec2-433d-b3f4-8853ae5504c4", + "hostname": "goat", + "id": "a20fd88c-dddf-4e6e-8bcb-b13e08e0b4ce", "type": "apm-server", "version": "8.0.0", "version_major": 8 @@ -213,7 +214,7 @@ } }, "event": { - "ingested": "2020-04-22T14:57:41.096227Z" + "ingested": "2020-08-11T09:58:54.463556Z" }, "host": { "hostname": "host01", @@ -221,9 +222,9 @@ "name": "host01" }, "observer": { - "ephemeral_id": "b759a57d-4daa-4708-a3ad-18c50d8c940f", - "hostname": "ix.lan", - "id": "3dfbe204-d39c-4f40-8283-de713063099c", + "ephemeral_id": "97a0be74-0ec2-433d-b3f4-8853ae5504c4", + "hostname": "goat", + "id": "a20fd88c-dddf-4e6e-8bcb-b13e08e0b4ce", "type": "apm-server", "version": "8.0.0", "version_major": 8 diff --git a/tests/system/jaeger_batch_0_authorization.approved.json b/tests/system/jaeger_batch_0_authorization.approved.json index caf55465635..e83d0d9c1a4 100644 --- a/tests/system/jaeger_batch_0_authorization.approved.json +++ b/tests/system/jaeger_batch_0_authorization.approved.json @@ -10,7 +10,8 @@ "version": "1.5.0" }, "event": { - "ingested": "2020-04-22T14:57:50.071712Z" + "ingested": "2020-08-11T09:59:10.729866Z", + "outcome": "unknown" }, "host": { "hostname": "host01", @@ -85,7 +86,7 @@ } }, "event": { - "ingested": "2020-04-22T14:57:50.128105Z" + "ingested": "2020-08-11T09:59:10.788604Z" }, "host": { "hostname": "host01", @@ -93,9 +94,9 @@ "name": "host01" }, "observer": { - "ephemeral_id": "f672294a-23de-44c6-82c1-5a1487d72e4a", - "hostname": "ix.lan", - "id": "09366851-25e3-463f-bc4a-28c00c792112", + "ephemeral_id": "f2414fe9-88b3-4a35-ad5a-6951ba183d43", + "hostname": "goat", + "id": "78749c0f-d2f4-42e7-a8c2-a276a77f2555", "type": "apm-server", "version": "8.0.0", "version_major": 8 @@ -149,7 +150,7 @@ } }, "event": { - "ingested": "2020-04-22T14:57:50.133443Z" + "ingested": "2020-08-11T09:59:10.794738Z" }, "host": { "hostname": "host01", @@ -157,9 +158,9 @@ "name": "host01" }, "observer": { - "ephemeral_id": "f672294a-23de-44c6-82c1-5a1487d72e4a", - "hostname": "ix.lan", - "id": "09366851-25e3-463f-bc4a-28c00c792112", + "ephemeral_id": "f2414fe9-88b3-4a35-ad5a-6951ba183d43", + "hostname": "goat", + "id": "78749c0f-d2f4-42e7-a8c2-a276a77f2555", "type": "apm-server", "version": "8.0.0", "version_major": 8 @@ -213,7 +214,7 @@ } }, "event": { - "ingested": "2020-04-22T14:57:50.133822Z" + "ingested": "2020-08-11T09:59:10.794838Z" }, "host": { "hostname": "host01", @@ -221,9 +222,9 @@ "name": "host01" }, "observer": { - "ephemeral_id": "f672294a-23de-44c6-82c1-5a1487d72e4a", - "hostname": "ix.lan", - "id": "09366851-25e3-463f-bc4a-28c00c792112", + "ephemeral_id": "f2414fe9-88b3-4a35-ad5a-6951ba183d43", + "hostname": "goat", + "id": "78749c0f-d2f4-42e7-a8c2-a276a77f2555", "type": "apm-server", "version": "8.0.0", "version_major": 8 diff --git a/tests/system/jaeger_span.approved.json b/tests/system/jaeger_span.approved.json index 68b69eed719..8c4276585bf 100644 --- a/tests/system/jaeger_span.approved.json +++ b/tests/system/jaeger_span.approved.json @@ -10,7 +10,8 @@ "version": "1.5.0" }, "event": { - "ingested": "2020-04-22T14:57:46.610358Z" + "ingested": "2020-08-11T09:59:01.990087Z", + "outcome": "unknown" }, "host": { "hostname": "alloy", diff --git a/tests/system/keep_unsampled_transactions.approved.json b/tests/system/keep_unsampled_transactions.approved.json index c5a5a350f7a..609ccaea068 100644 --- a/tests/system/keep_unsampled_transactions.approved.json +++ b/tests/system/keep_unsampled_transactions.approved.json @@ -12,7 +12,8 @@ "version": "1.5.0" }, "event": { - "ingested": "2020-04-29T02:16:27.090771Z" + "ingested": "2020-08-11T10:03:14.274519Z", + "outcome": "unknown" }, "host": { "architecture": "x64", @@ -107,7 +108,8 @@ "version": "1.5.0" }, "event": { - "ingested": "2020-04-29T02:16:27.091518Z" + "ingested": "2020-08-11T10:03:14.274681Z", + "outcome": "unknown" }, "host": { "architecture": "x64", @@ -124,9 +126,9 @@ } }, "observer": { - "ephemeral_id": "3f31e73c-2fdf-4f39-8c81-57b25d00fc16", + "ephemeral_id": "1c8e1e58-0c93-4a11-9395-687a4fd608b6", "hostname": "goat", - "id": "0f00bacd-a23e-41c5-a2fb-4d90b2776018", + "id": "6d235bfa-00c6-46d3-83f4-d52a555ac820", "type": "apm-server", "version": "8.0.0", "version_major": 8 @@ -202,7 +204,8 @@ "version": "1.5.0" }, "event": { - "ingested": "2020-04-29T02:16:27.092239Z" + "ingested": "2020-08-11T10:03:14.274782Z", + "outcome": "unknown" }, "host": { "architecture": "x64", @@ -219,9 +222,9 @@ } }, "observer": { - "ephemeral_id": "3f31e73c-2fdf-4f39-8c81-57b25d00fc16", + "ephemeral_id": "1c8e1e58-0c93-4a11-9395-687a4fd608b6", "hostname": "goat", - "id": "0f00bacd-a23e-41c5-a2fb-4d90b2776018", + "id": "6d235bfa-00c6-46d3-83f4-d52a555ac820", "type": "apm-server", "version": "8.0.0", "version_major": 8 @@ -309,7 +312,8 @@ "version": "1.5.0" }, "event": { - "ingested": "2020-04-29T02:16:26.984994Z" + "ingested": "2020-08-11T10:03:14.218629Z", + "outcome": "unknown" }, "host": { "architecture": "x64", @@ -388,9 +392,9 @@ "organization_uuid": "9f0e9d64-c185-4d21-a6f4-4673ed561ec8" }, "observer": { - "ephemeral_id": "3f31e73c-2fdf-4f39-8c81-57b25d00fc16", + "ephemeral_id": "1c8e1e58-0c93-4a11-9395-687a4fd608b6", "hostname": "goat", - "id": "0f00bacd-a23e-41c5-a2fb-4d90b2776018", + "id": "6d235bfa-00c6-46d3-83f4-d52a555ac820", "type": "apm-server", "version": "8.0.0", "version_major": 8 diff --git a/tests/system/spans.approved.json b/tests/system/spans.approved.json index 72c858ff774..788cc4795b5 100644 --- a/tests/system/spans.approved.json +++ b/tests/system/spans.approved.json @@ -8,6 +8,9 @@ "ecs": { "version": "1.5.0" }, + "event": { + "outcome": "unknown" + }, "labels": { "span_tag": "something" }, @@ -121,10 +124,13 @@ "ecs": { "version": "1.5.0" }, + "event": { + "outcome": "unknown" + }, "observer": { - "ephemeral_id": "c0cea3b6-97d7-4e15-9e35-c868e7a3c869", - "hostname": "ix.lan", - "id": "a49b4a08-689a-4724-8050-8bd0ae043281", + "ephemeral_id": "2f13d8fa-83cd-4356-8123-aabfb47a1808", + "hostname": "goat", + "id": "17ad47dd-5671-4c89-979f-ef4533565ba2", "type": "apm-server", "version": "8.0.0", "version_major": 8 @@ -187,10 +193,13 @@ "ecs": { "version": "1.5.0" }, + "event": { + "outcome": "unknown" + }, "observer": { - "ephemeral_id": "c0cea3b6-97d7-4e15-9e35-c868e7a3c869", - "hostname": "ix.lan", - "id": "a49b4a08-689a-4724-8050-8bd0ae043281", + "ephemeral_id": "2f13d8fa-83cd-4356-8123-aabfb47a1808", + "hostname": "goat", + "id": "17ad47dd-5671-4c89-979f-ef4533565ba2", "type": "apm-server", "version": "8.0.0", "version_major": 8 @@ -237,10 +246,13 @@ "ecs": { "version": "1.5.0" }, + "event": { + "outcome": "unknown" + }, "observer": { - "ephemeral_id": "c0cea3b6-97d7-4e15-9e35-c868e7a3c869", - "hostname": "ix.lan", - "id": "a49b4a08-689a-4724-8050-8bd0ae043281", + "ephemeral_id": "2f13d8fa-83cd-4356-8123-aabfb47a1808", + "hostname": "goat", + "id": "17ad47dd-5671-4c89-979f-ef4533565ba2", "type": "apm-server", "version": "8.0.0", "version_major": 8 @@ -293,10 +305,13 @@ "ecs": { "version": "1.5.0" }, + "event": { + "outcome": "unknown" + }, "observer": { - "ephemeral_id": "c0cea3b6-97d7-4e15-9e35-c868e7a3c869", - "hostname": "ix.lan", - "id": "a49b4a08-689a-4724-8050-8bd0ae043281", + "ephemeral_id": "2f13d8fa-83cd-4356-8123-aabfb47a1808", + "hostname": "goat", + "id": "17ad47dd-5671-4c89-979f-ef4533565ba2", "type": "apm-server", "version": "8.0.0", "version_major": 8 diff --git a/tests/system/transaction.approved.json b/tests/system/transaction.approved.json index 17e67dac12a..024ab9d4273 100644 --- a/tests/system/transaction.approved.json +++ b/tests/system/transaction.approved.json @@ -12,7 +12,8 @@ "version": "1.5.0" }, "event": { - "ingested": "2020-04-22T14:49:24.899906Z" + "ingested": "2020-08-11T09:55:04.391451Z", + "outcome": "unknown" }, "host": { "architecture": "x64", @@ -107,7 +108,8 @@ "version": "1.5.0" }, "event": { - "ingested": "2020-04-22T14:49:24.900309Z" + "ingested": "2020-08-11T09:55:04.391568Z", + "outcome": "unknown" }, "host": { "architecture": "x64", @@ -124,9 +126,9 @@ } }, "observer": { - "ephemeral_id": "f78f6762-2157-4322-95aa-aecd2f486c1a", - "hostname": "ix.lan", - "id": "80b79979-4a7d-450d-b2ce-75c589f7fffd", + "ephemeral_id": "fb037b97-0027-401a-9dc4-17d162f2687f", + "hostname": "goat", + "id": "a4daf4ca-b280-4ede-90df-bf62482cec37", "type": "apm-server", "version": "8.0.0", "version_major": 8 @@ -202,7 +204,8 @@ "version": "1.5.0" }, "event": { - "ingested": "2020-04-22T14:49:24.900644Z" + "ingested": "2020-08-11T09:55:04.391639Z", + "outcome": "unknown" }, "host": { "architecture": "x64", @@ -219,9 +222,9 @@ } }, "observer": { - "ephemeral_id": "f78f6762-2157-4322-95aa-aecd2f486c1a", - "hostname": "ix.lan", - "id": "80b79979-4a7d-450d-b2ce-75c589f7fffd", + "ephemeral_id": "fb037b97-0027-401a-9dc4-17d162f2687f", + "hostname": "goat", + "id": "a4daf4ca-b280-4ede-90df-bf62482cec37", "type": "apm-server", "version": "8.0.0", "version_major": 8 @@ -309,7 +312,8 @@ "version": "1.5.0" }, "event": { - "ingested": "2020-04-22T14:49:24.844687Z" + "ingested": "2020-08-11T09:55:04.338986Z", + "outcome": "unknown" }, "host": { "architecture": "x64", @@ -388,9 +392,9 @@ "organization_uuid": "9f0e9d64-c185-4d21-a6f4-4673ed561ec8" }, "observer": { - "ephemeral_id": "f78f6762-2157-4322-95aa-aecd2f486c1a", - "hostname": "ix.lan", - "id": "80b79979-4a7d-450d-b2ce-75c589f7fffd", + "ephemeral_id": "fb037b97-0027-401a-9dc4-17d162f2687f", + "hostname": "goat", + "id": "a4daf4ca-b280-4ede-90df-bf62482cec37", "type": "apm-server", "version": "8.0.0", "version_major": 8