diff --git a/apmpackage/apm/changelog.yml b/apmpackage/apm/changelog.yml index 6906aa2b13d..841afb1123d 100644 --- a/apmpackage/apm/changelog.yml +++ b/apmpackage/apm/changelog.yml @@ -1,8 +1,11 @@ - version: generated changes: - - description: Placeholder + - description: Add missing mappings for various fields type: enhancement - link: https://github.com/elastic/apm-server/pull/123 + link: https://github.com/elastic/apm-server/pull/12102 + - description: Remove unsupported 7.x data stream migration pipeline + type: enhancement + link: https://github.com/elastic/apm-server/pull/12102 - version: 8.11.0 changes: - description: Add geoip processing to add client.geo.* fields for app_logs diff --git a/apmpackage/apm/data_stream/error_logs/fields/fields.yml b/apmpackage/apm/data_stream/error_logs/fields/fields.yml index c24ddc4e677..7d09a162531 100644 --- a/apmpackage/apm/data_stream/error_logs/fields/fields.yml +++ b/apmpackage/apm/data_stream/error_logs/fields/fields.yml @@ -6,6 +6,12 @@ - name: error.culprit type: keyword description: Function call which was the primary perpetrator of this event. +- name: error.custom + type: flattened + description: Custom error context. +- name: error.exception.attributes + type: flattened + description: Arbitrary attributes associated with the exception. - name: error.exception.code type: keyword description: The error code set when the error happened, e.g. database error code. @@ -18,6 +24,10 @@ - name: error.exception.module type: keyword description: The module namespace of the original error. +- name: error.exception.stacktrace + type: flattened + description: | + Stacktrace identifying the instrumented source code corresponding to the error. - name: error.exception.type type: keyword description: The type of the original error, e.g. the Java exception class name. @@ -42,8 +52,24 @@ type: keyword description: | A parametrized message. E.g. 'Could not connect to %s'. The property message is still required, and should be equal to the param_message, but with placeholders replaced. In some situations the param_message is used to group errors together. +- name: error.log.stacktrace + type: flattened + description: | + Stacktrace identifying the instrumented source code corresponding to the error. +- name: http.request.body + type: flattened + description: | + The original body of the monitored HTTP request. +- name: http.request.env + type: flattened + description: | + The CGI-like environment variables of the monitored HTTP request. +- name: http.request.cookies + type: flattened + description: | + The cookies of the monitored HTTP request. - name: http.request.headers - type: object + type: flattened description: | The canonical headers of the monitored HTTP request. - name: http.response.finished @@ -51,9 +77,13 @@ description: | Used by the Node agent to indicate when in the response life cycle an error has occurred. - name: http.response.headers - type: object + type: flattened description: | The canonical headers of the monitored HTTP response. +- name: http.response.headers_sent + type: boolean + description: | + Used by the Node agent to indicate whether HTTP response headers were sent. - name: kubernetes.namespace type: keyword description: | diff --git a/apmpackage/apm/data_stream/traces/elasticsearch/ingest_pipeline/apm_data_stream_migration.yml b/apmpackage/apm/data_stream/traces/elasticsearch/ingest_pipeline/apm_data_stream_migration.yml deleted file mode 100644 index ce9480e5fbc..00000000000 --- a/apmpackage/apm/data_stream/traces/elasticsearch/ingest_pipeline/apm_data_stream_migration.yml +++ /dev/null @@ -1,42 +0,0 @@ ---- -description: | - Pipeline for migrating APM events from indices to data streams. - This pipeline is not used directly by apmserver; it is installed - for manually migrating legacy indices to data streams. -processors: - - pipeline: - name: observer_version - - pipeline: - name: observer_ids - - pipeline: - name: remove_ecs_version - - pipeline: - name: process_ppid - - script: - if: ctx.processor?.event == 'span' || ctx.processor?.event == 'transaction' - source: | - ctx.data_stream = ["type": "traces", "dataset": "apm", "namespace": "migrated"] - - script: - if: ctx.processor?.event == 'error' - source: | - ctx.data_stream = ["type": "logs", "dataset": "apm.error", "namespace": "migrated"] - - script: - if: ctx.processor?.event == 'metric' - source: | - String dataset; - if (ctx["metricset.name"] != "app") { - dataset = "apm.internal"; - } else { - String serviceName = ctx.service.name; - serviceName = serviceName.toLowerCase(); - serviceName = /[\\\/*?"<>| ,#:-]/.matcher(serviceName).replaceAll('_'); - dataset = "apm.app." + serviceName; - } - ctx.data_stream = ["type": "metrics", "dataset": dataset, "namespace": "migrated"]; - - set: - if: ctx.data_stream != null - field: _index - value: "{{data_stream.type}}-{{data_stream.dataset}}-{{data_stream.namespace}}" - - remove: - field: timeseries # remove timeseries.instance - ignore_missing: true diff --git a/apmpackage/apm/data_stream/traces/fields/fields.yml b/apmpackage/apm/data_stream/traces/fields/fields.yml index 94ec29db330..01a2033c81d 100644 --- a/apmpackage/apm/data_stream/traces/fields/fields.yml +++ b/apmpackage/apm/data_stream/traces/fields/fields.yml @@ -56,8 +56,20 @@ type: keyword description: | The lambda function version. +- name: http.request.body + type: flattened + description: | + The original body of the monitored HTTP request. +- name: http.request.env + type: flattened + description: | + The CGI-like environment variables of the monitored HTTP request. +- name: http.request.cookies + type: flattened + description: | + The cookies of the monitored HTTP request. - name: http.request.headers - type: object + type: flattened description: | The canonical headers of the monitored HTTP request. - name: http.response.finished @@ -65,9 +77,14 @@ description: | Used by the Node agent to indicate when in the response life cycle an error has occurred. - name: http.response.headers - type: object + type: flattened description: | The canonical headers of the monitored HTTP response. +- name: http.response.headers_sent + type: boolean + index: false + description: | + Used by the Node agent to indicate whether HTTP response headers were sent. - name: http.response.transfer_size type: long unit: byte @@ -221,10 +238,26 @@ type: long description: | Sum of the durations of the compressed spans, in microseconds. +- name: span.db.instance + type: keyword + description: | + Database instance. - name: span.db.link type: keyword description: | Database link. +- name: span.db.type + type: keyword + description: | + Database type. +- name: span.db.user.name + type: keyword + description: | + Database username. +- name: span.db.statement + type: keyword + description: | + Database statement. - name: span.db.rows_affected type: long description: | @@ -245,6 +278,18 @@ type: long description: | Duration of the span, in microseconds. +- name: span.message.body + type: keyword + description: The message body + index: false +- name: span.message.routing_key + type: keyword + description: The message routing key + index: false +- name: span.message.headers + type: flattened + description: The message headers + index: false - name: span.message.age.ms type: long description: | @@ -257,6 +302,10 @@ type: keyword description: | Generic designation of a span in the scope of a transaction. +- name: span.stacktrace + type: flattened + description: | + Stacktrace identifying the instrumented source code corresponding to the span. - name: span.subtype type: keyword description: | @@ -279,6 +328,9 @@ type: long description: | Timestamp of the event in microseconds since Unix epoch. +- name: transaction.custom + type: flattened + description: Custom transaction context. - name: transaction.duration.us type: long description: | @@ -306,6 +358,18 @@ description: | A user-defined mapping of groups of marks in milliseconds. dynamic: true +- name: transaction.message.body + type: keyword + description: The message body + index: false +- name: transaction.message.routing_key + type: keyword + description: The message routing key + index: false +- name: transaction.message.headers + type: flattened + description: The message headers + index: false - name: transaction.message.age.ms type: long description: | @@ -332,6 +396,9 @@ - name: transaction.span_count.dropped type: long description: The total amount of dropped spans for this transaction. +- name: transaction.span_count.started + type: long + description: The total amount of started spans for this transaction. - name: transaction.type type: keyword description: | diff --git a/changelogs/head.asciidoc b/changelogs/head.asciidoc index 5e6155333cf..286151c5251 100644 --- a/changelogs/head.asciidoc +++ b/changelogs/head.asciidoc @@ -5,6 +5,7 @@ https://github.com/elastic/apm-server/compare/8.11\...main[View commits] [float] ==== Breaking Changes +- The unsupported apm_data_stream_migration ingest pipeline has been removed {pull}12102[12102]. [float] ==== Bug fixes @@ -20,4 +21,5 @@ https://github.com/elastic/apm-server/compare/8.11\...main[View commits] ==== Added - Update container base image to Ubuntu 22.04 {pull}11778[11778] - Add support for returning partial success response in OTLP input {pull}11883[11883] -- Setting event timestamp from OTel observed timestamp when needed {pull}11935[11935] \ No newline at end of file +- Setting event timestamp from OTel observed timestamp when needed {pull}11935[11935] +- Field mappings have been added for various formerly unindexed fields {pull}12102[12102] diff --git a/systemtest/approvals/TestIngestPipelineDataStreamMigration.approved.json b/systemtest/approvals/TestIngestPipelineDataStreamMigration.approved.json deleted file mode 100644 index 7b80f483495..00000000000 --- a/systemtest/approvals/TestIngestPipelineDataStreamMigration.approved.json +++ /dev/null @@ -1,699 +0,0 @@ -{ - "events": [ - { - "@timestamp": "2022-09-12T03:52:50.939Z", - "agent": { - "name": "go", - "version": "2.0.0" - }, - "container": { - "id": "spawn-6cd7c2e1-43d5-4c89-8480-e178b3bc70d1" - }, - "data_stream": { - "dataset": "apm.error", - "namespace": "migrated", - "type": "logs" - }, - "error": { - "culprit": "once", - "exception": [ - { - "handled": false, - "message": "boom", - "module": "errors", - "stacktrace": [ - { - "abs_path": "/home/andrew/projects/apmload/main.go", - "exclude_from_grouping": false, - "filename": "main.go", - "function": "once", - "line": { - "number": 53 - }, - "module": "main" - }, - { - "abs_path": "/home/andrew/projects/apmload/main.go", - "exclude_from_grouping": false, - "filename": "main.go", - "function": "main", - "line": { - "number": 29 - }, - "module": "main" - }, - { - "abs_path": "/home/andrew/go/toolchain/1.18.1/src/runtime/proc.go", - "exclude_from_grouping": false, - "filename": "proc.go", - "function": "main", - "library_frame": true, - "line": { - "number": 250 - }, - "module": "runtime" - }, - { - "abs_path": "/home/andrew/go/toolchain/1.18.1/src/runtime/asm_amd64.s", - "exclude_from_grouping": false, - "filename": "asm_amd64.s", - "function": "goexit", - "library_frame": true, - "line": { - "number": 1571 - }, - "module": "runtime" - } - ], - "type": "errorString" - } - ], - "grouping_key": "d9bb6552d94deb040e83062f8fe1e449", - "grouping_name": "boom", - "id": "b2da5288b2c3d7e79c42a636ca2fd99f" - }, - "event": { - "ingested": "dynamic" - }, - "host": { - "architecture": "amd64", - "hostname": "corduroy", - "ip": "110.174.44.88", - "name": "corduroy", - "os": { - "platform": "linux" - } - }, - "message": "boom", - "observer": { - "hostname": "dynamic", - "name": "instance-0000000000", - "type": "apm-server", - "version": "dynamic" - }, - "parent": { - "id": "7bd04bc3063f9930" - }, - "process": { - "args": [ - "/tmp/go-build1405913256/b001/exe/main" - ], - "parent": { - "pid": 4009763 - }, - "pid": 4009922, - "title": "main" - }, - "processor": { - "event": "error", - "name": "error" - }, - "service": { - "language": { - "name": "go", - "version": "go1.18.1" - }, - "name": "main", - "node": { - "name": "spawn-6cd7c2e1-43d5-4c89-8480-e178b3bc70d1" - }, - "runtime": { - "name": "gc", - "version": "go1.18.1" - } - }, - "timestamp": { - "us": 1662954770939878 - }, - "trace": { - "id": "5cfc595035477ea235a632fc3e2bb6b1" - }, - "transaction": { - "id": "5cfc595035477ea2", - "sampled": true, - "type": "type" - } - }, - { - "@timestamp": "2022-09-12T03:52:51.178Z", - "agent": { - "name": "go", - "version": "2.0.0" - }, - "container": { - "id": "spawn-6cd7c2e1-43d5-4c89-8480-e178b3bc70d1" - }, - "data_stream": { - "dataset": "apm.app.main", - "namespace": "migrated", - "type": "metrics" - }, - "event": { - "ingested": "dynamic" - }, - "golang": { - "goroutines": 11, - "heap": { - "allocations": { - "active": 6160384, - "allocated": 4579688, - "frees": 39979, - "idle": 5701632, - "mallocs": 44520, - "objects": 4541, - "total": 8834120 - }, - "gc": { - "cpu_fraction": 0.0003175952, - "next_gc_limit": 8842488, - "total_count": 3, - "total_pause": { - "ns": 178493 - } - }, - "system": { - "obtained": 11862016, - "released": 3989504, - "stack": 720896, - "total": 20268040 - } - } - }, - "host": { - "architecture": "amd64", - "hostname": "corduroy", - "ip": "110.174.44.88", - "name": "corduroy", - "os": { - "platform": "linux" - } - }, - "metricset": { - "name": "app" - }, - "observer": { - "hostname": "dynamic", - "name": "instance-0000000000", - "type": "apm-server", - "version": "dynamic" - }, - "process": { - "args": "/tmp/go-build1405913256/b001/exe/main", - "parent": { - "pid": 4009763 - }, - "pid": 4009922, - "title": "main" - }, - "processor": { - "event": "metric", - "name": "metric" - }, - "service": { - "language": { - "name": "go", - "version": "go1.18.1" - }, - "name": "main", - "node": { - "name": "spawn-6cd7c2e1-43d5-4c89-8480-e178b3bc70d1" - }, - "runtime": { - "name": "gc", - "version": "go1.18.1" - } - }, - "system": { - "cpu": { - "total": { - "norm": { - "pct": 0.02255639 - } - } - }, - "memory": { - "actual": { - "free": 33981653000 - }, - "total": 46108970000 - }, - "process": { - "cpu": { - "total": { - "norm": { - "pct": 0.0025062656 - } - } - }, - "memory": { - "rss": { - "bytes": 15187968 - }, - "size": 1485594600 - } - } - } - }, - { - "@timestamp": "2022-09-12T03:52:00.000Z", - "agent": { - "name": "go" - }, - "data_stream": { - "dataset": "apm.internal", - "namespace": "migrated", - "type": "metrics" - }, - "event": { - "ingested": "dynamic", - "outcome": "failure" - }, - "metricset": { - "name": "service_destination" - }, - "observer": { - "hostname": "dynamic", - "name": "instance-0000000000", - "type": "apm-server", - "version": "dynamic" - }, - "processor": { - "event": "metric", - "name": "metric" - }, - "service": { - "name": "main" - }, - "span": { - "destination": { - "service": { - "resource": "dest_resource", - "response_time": { - "count": 1, - "sum": { - "us": 10220 - } - } - } - } - } - }, - { - "@timestamp": "2022-09-12T03:52:00.000Z", - "_doc_count": 1, - "agent": { - "name": "go" - }, - "container": { - "id": "spawn-6cd7c2e1-43d5-4c89-8480-e178b3bc70d1" - }, - "data_stream": { - "dataset": "apm.internal", - "namespace": "migrated", - "type": "metrics" - }, - "event": { - "ingested": "dynamic", - "outcome": "failure" - }, - "host": { - "hostname": "corduroy", - "name": "corduroy" - }, - "metricset": { - "name": "transaction" - }, - "observer": { - "hostname": "dynamic", - "name": "instance-0000000000", - "type": "apm-server", - "version": "dynamic" - }, - "processor": { - "event": "metric", - "name": "metric" - }, - "service": { - "name": "main", - "node": { - "name": "spawn-6cd7c2e1-43d5-4c89-8480-e178b3bc70d1" - } - }, - "transaction": { - "duration": { - "histogram": { - "counts": [ - 1 - ], - "values": [ - 10239 - ] - } - }, - "name": "name", - "root": true, - "type": "type" - } - }, - { - "@timestamp": "2022-09-12T03:52:51.178Z", - "agent": { - "name": "go", - "version": "2.0.0" - }, - "container": { - "id": "spawn-6cd7c2e1-43d5-4c89-8480-e178b3bc70d1" - }, - "data_stream": { - "dataset": "apm.internal", - "namespace": "migrated", - "type": "metrics" - }, - "event": { - "ingested": "dynamic" - }, - "host": { - "architecture": "amd64", - "hostname": "corduroy", - "ip": "110.174.44.88", - "name": "corduroy", - "os": { - "platform": "linux" - } - }, - "metricset": { - "name": "span_breakdown" - }, - "observer": { - "hostname": "dynamic", - "name": "instance-0000000000", - "type": "apm-server", - "version": "dynamic" - }, - "process": { - "args": "/tmp/go-build1405913256/b001/exe/main", - "parent": { - "pid": 4009763 - }, - "pid": 4009922, - "title": "main" - }, - "processor": { - "event": "metric", - "name": "metric" - }, - "service": { - "language": { - "name": "go", - "version": "go1.18.1" - }, - "name": "main", - "node": { - "name": "spawn-6cd7c2e1-43d5-4c89-8480-e178b3bc70d1" - }, - "runtime": { - "name": "gc", - "version": "go1.18.1" - } - }, - "span": { - "self_time": { - "count": 1, - "sum": { - "us": 15 - } - }, - "type": "app" - }, - "transaction": { - "name": "name", - "type": "type" - } - }, - { - "@timestamp": "2022-09-12T03:52:51.178Z", - "agent": { - "name": "go", - "version": "2.0.0" - }, - "container": { - "id": "spawn-6cd7c2e1-43d5-4c89-8480-e178b3bc70d1" - }, - "data_stream": { - "dataset": "apm.internal", - "namespace": "migrated", - "type": "metrics" - }, - "event": { - "ingested": "dynamic" - }, - "host": { - "architecture": "amd64", - "hostname": "corduroy", - "ip": "110.174.44.88", - "name": "corduroy", - "os": { - "platform": "linux" - } - }, - "metricset": { - "name": "span_breakdown" - }, - "observer": { - "hostname": "dynamic", - "name": "instance-0000000000", - "type": "apm-server", - "version": "dynamic" - }, - "process": { - "args": "/tmp/go-build1405913256/b001/exe/main", - "parent": { - "pid": 4009763 - }, - "pid": 4009922, - "title": "main" - }, - "processor": { - "event": "metric", - "name": "metric" - }, - "service": { - "language": { - "name": "go", - "version": "go1.18.1" - }, - "name": "main", - "node": { - "name": "spawn-6cd7c2e1-43d5-4c89-8480-e178b3bc70d1" - }, - "runtime": { - "name": "gc", - "version": "go1.18.1" - } - }, - "span": { - "self_time": { - "count": 1, - "sum": { - "us": 10220 - } - }, - "type": "type" - }, - "transaction": { - "name": "name", - "type": "type" - } - }, - { - "@timestamp": "2022-09-12T03:52:50.929Z", - "agent": { - "name": "go", - "version": "2.0.0" - }, - "data_stream": { - "dataset": "apm", - "namespace": "migrated", - "type": "traces" - }, - "event": { - "outcome": "failure" - }, - "observer": { - "hostname": "dynamic", - "name": "instance-0000000000", - "type": "apm-server", - "version": "dynamic" - }, - "parent": { - "id": "5cfc595035477ea2" - }, - "processor": { - "event": "span", - "name": "transaction" - }, - "service": { - "name": "main" - }, - "span": { - "destination": { - "service": { - "resource": "dest_resource", - "type": "type" - } - }, - "duration": { - "us": 10220 - }, - "id": "7bd04bc3063f9930", - "name": "name", - "stacktrace": [ - { - "abs_path": "/home/andrew/go/pkg/mod/go.elastic.co/apm/v2@v2.0.0/span.go", - "exclude_from_grouping": false, - "filename": "span.go", - "function": "(*Span).End", - "library_frame": true, - "line": { - "number": 368 - }, - "module": "go.elastic.co/apm/v2" - }, - { - "abs_path": "/home/andrew/projects/apmload/main.go", - "exclude_from_grouping": false, - "filename": "main.go", - "function": "once", - "line": { - "number": 56 - }, - "module": "main" - }, - { - "abs_path": "/home/andrew/projects/apmload/main.go", - "exclude_from_grouping": false, - "filename": "main.go", - "function": "main", - "line": { - "number": 29 - }, - "module": "main" - }, - { - "abs_path": "/home/andrew/go/toolchain/1.18.1/src/runtime/proc.go", - "exclude_from_grouping": false, - "filename": "proc.go", - "function": "main", - "library_frame": true, - "line": { - "number": 250 - }, - "module": "runtime" - }, - { - "abs_path": "/home/andrew/go/toolchain/1.18.1/src/runtime/asm_amd64.s", - "exclude_from_grouping": false, - "filename": "asm_amd64.s", - "function": "goexit", - "library_frame": true, - "line": { - "number": 1571 - }, - "module": "runtime" - } - ], - "type": "type" - }, - "timestamp": { - "us": 1662954770929706 - }, - "trace": { - "id": "5cfc595035477ea235a632fc3e2bb6b1" - }, - "transaction": { - "id": "5cfc595035477ea2" - } - }, - { - "@timestamp": "2022-09-12T03:52:50.929Z", - "agent": { - "name": "go", - "version": "2.0.0" - }, - "container": { - "id": "spawn-6cd7c2e1-43d5-4c89-8480-e178b3bc70d1" - }, - "data_stream": { - "dataset": "apm", - "namespace": "migrated", - "type": "traces" - }, - "event": { - "ingested": "dynamic", - "outcome": "failure" - }, - "host": { - "architecture": "amd64", - "hostname": "corduroy", - "ip": "110.174.44.88", - "name": "corduroy", - "os": { - "platform": "linux" - } - }, - "observer": { - "hostname": "dynamic", - "name": "instance-0000000000", - "type": "apm-server", - "version": "dynamic" - }, - "process": { - "args": [ - "/tmp/go-build1405913256/b001/exe/main" - ], - "parent": { - "pid": 4009763 - }, - "pid": 4009922, - "title": "main" - }, - "processor": { - "event": "transaction", - "name": "transaction" - }, - "service": { - "language": { - "name": "go", - "version": "go1.18.1" - }, - "name": "main", - "node": { - "name": "spawn-6cd7c2e1-43d5-4c89-8480-e178b3bc70d1" - }, - "runtime": { - "name": "gc", - "version": "go1.18.1" - } - }, - "timestamp": { - "us": 1662954770929705 - }, - "trace": { - "id": "5cfc595035477ea235a632fc3e2bb6b1" - }, - "transaction": { - "duration": { - "us": 10236 - }, - "id": "5cfc595035477ea2", - "name": "name", - "sampled": true, - "span_count": { - "dropped": 0, - "started": 1 - }, - "type": "type" - } - } - ] -} diff --git a/systemtest/ingest_test.go b/systemtest/ingest_test.go index d1b3337fc4a..c1bd709dd6e 100644 --- a/systemtest/ingest_test.go +++ b/systemtest/ingest_test.go @@ -18,14 +18,11 @@ package systemtest_test import ( - "bytes" "context" "encoding/json" - "fmt" "io" "net/http" "net/url" - "os" "strings" "testing" @@ -36,7 +33,6 @@ import ( "github.com/elastic/apm-server/systemtest" "github.com/elastic/apm-server/systemtest/apmservertest" "github.com/elastic/apm-server/systemtest/estest" - "github.com/elastic/apm-tools/pkg/approvaltest" "github.com/elastic/apm-tools/pkg/espoll" "github.com/elastic/go-elasticsearch/v8/esapi" ) @@ -181,39 +177,6 @@ func TestIngestPipelineEventDuration(t *testing.T) { } } -func TestIngestPipelineDataStreamMigration(t *testing.T) { - systemtest.CleanupElasticsearch(t) - - var testdata struct { - Hits struct { - Hits []struct { - Source json.RawMessage `json:"_source"` - } `json:"hits` - } `json:"hits` - } - - data, err := os.ReadFile("../testdata/ingest/7_17_docs.json") - require.NoError(t, err) - err = json.Unmarshal(data, &testdata) - require.NoError(t, err) - - // Index documents using the data stream migration ingest pipeline. - pipeline := fmt.Sprintf("traces-apm-%s-apm_data_stream_migration", systemtest.IntegrationPackage.Version) - for _, doc := range testdata.Hits.Hits { - _, err := systemtest.Elasticsearch.Do(context.Background(), esapi.IndexRequest{ - Index: "traces-apm-foo", // should not be created; ingest pipeline should take over - Pipeline: pipeline, - Body: bytes.NewReader(doc.Source), - }, nil) - require.NoError(t, err) - } - - result := estest.ExpectMinDocs(t, systemtest.Elasticsearch, - len(testdata.Hits.Hits), "traces-apm*,logs-apm*,metrics-apm*", nil, - ) - approvaltest.ApproveEvents(t, t.Name(), result.Hits.Hits) -} - func TestIngestPipelineEventSuccessCount(t *testing.T) { type test struct { source string