From 8a9cbe0a29bd3c32ba0c3e58a46379ae587a5d46 Mon Sep 17 00:00:00 2001 From: Colleen McGinnis Date: Wed, 27 Nov 2024 13:33:55 -0600 Subject: [PATCH 1/4] apply apm ia changes to serverless docs --- .../apm/act-on-data/alerts.asciidoc | 42 +++++++++ .../custom-links.asciidoc} | 2 +- .../serverless/apm/act-on-data/index.asciidoc | 28 ++++++ .../api-error.asciidoc | 0 .../api-events.asciidoc | 0 .../{apm-server-api => api}/api-info.asciidoc | 0 .../api-metadata.asciidoc | 0 .../api-metricset.asciidoc | 0 .../{apm-server-api => api}/api-span.asciidoc | 0 .../api-transaction.asciidoc | 0 .../apm/{apm-server-api => api}/api.asciidoc | 0 .../index.asciidoc} | 18 ++-- .../{apm-server-api => api}/otel-api.asciidoc | 0 .../en/serverless/apm/apm-data-types.asciidoc | 18 ---- .../apm/apm-reduce-your-data-usage.asciidoc | 17 ---- docs/en/serverless/apm/apm-reference.asciidoc | 13 --- .../apm/apm-stacktrace-collection.asciidoc | 11 --- .../apm/apm-troubleshooting.asciidoc | 50 ----------- .../common-problems.asciidoc | 47 ---------- .../common-response-codes.asciidoc | 20 ----- .../apm/apm-view-and-analyze-traces.asciidoc | 23 ----- docs/en/serverless/apm/apm.asciidoc | 13 +++ .../agents/index.asciidoc} | 20 +++-- .../aws-lambda-extension.asciidoc} | 6 +- .../index.asciidoc} | 11 ++- .../images/apm-otel-api-sdk-collector.png | Bin .../images/apm-otel-api-sdk-elastic-agent.png | Bin .../images/apm-otel-distro.png | Bin .../open-telemetry/index.asciidoc} | 12 +++ .../open-telemetry/otel-attrs.asciidoc} | 0 .../open-telemetry/otel-direct.asciidoc} | 0 .../open-telemetry/otel-limitations.asciidoc} | 0 .../open-telemetry/otel-metrics.asciidoc} | 0 .../apm-compress-spans.asciidoc | 2 +- .../apm-distributed-tracing.asciidoc | 4 +- .../apm-transaction-sampling.asciidoc | 2 +- .../configure-head-based-sampling.asciidoc | 0 .../serverless/apm/data-model/index.asciidoc | 47 ++++++++++ .../index.asciidoc} | 22 +++-- .../images/spans-transactions-and-traces.png | Bin 0 -> 91061 bytes .../apm/manage-storage/index.asciidoc | 43 ++++++++++ .../index.asciidoc} | 4 +- .../apm/troubleshooting/index.asciidoc | 81 ++++++++++++++++++ .../drill-down/errors.asciidoc} | 0 .../drill-down/index.asciidoc | 26 ++++++ .../drill-down/infrastructure.asciidoc} | 2 +- .../drill-down/logs.asciidoc} | 2 +- .../drill-down/metrics.asciidoc} | 0 .../drill-down/spans.asciidoc} | 0 .../drill-down/transactions.asciidoc} | 2 +- .../advanced-queries.asciidoc} | 6 +- .../filter-and-search/filters.asciidoc} | 6 +- .../filter-and-search/index.asciidoc | 19 ++++ .../apm/view-and-analyze/index.asciidoc | 41 +++++++++ .../interpret/correlations.asciidoc} | 0 .../deployment-annotations.asciidoc} | 2 +- .../view-and-analyze/interpret/index.asciidoc | 28 ++++++ .../interpret/lambda.asciidoc} | 0 .../machine-learning.asciidoc} | 0 .../settings.asciidoc} | 8 +- .../ui-overview/dependencies.asciidoc} | 2 +- .../ui-overview/index.asciidoc} | 20 ++--- .../ui-overview/service-map.asciidoc} | 0 .../ui-overview/service-overview.asciidoc} | 6 +- .../ui-overview/services.asciidoc} | 4 +- .../ui-overview/traces.asciidoc} | 0 docs/en/serverless/index.asciidoc | 40 --------- .../infra-monitoring/analyze-hosts.asciidoc | 4 +- docs/en/serverless/redirects.asciidoc | 13 +++ 69 files changed, 485 insertions(+), 302 deletions(-) create mode 100644 docs/en/serverless/apm/act-on-data/alerts.asciidoc rename docs/en/serverless/apm/{apm-create-custom-links.asciidoc => act-on-data/custom-links.asciidoc} (99%) create mode 100644 docs/en/serverless/apm/act-on-data/index.asciidoc rename docs/en/serverless/apm/{apm-server-api => api}/api-error.asciidoc (100%) rename docs/en/serverless/apm/{apm-server-api => api}/api-events.asciidoc (100%) rename docs/en/serverless/apm/{apm-server-api => api}/api-info.asciidoc (100%) rename docs/en/serverless/apm/{apm-server-api => api}/api-metadata.asciidoc (100%) rename docs/en/serverless/apm/{apm-server-api => api}/api-metricset.asciidoc (100%) rename docs/en/serverless/apm/{apm-server-api => api}/api-span.asciidoc (100%) rename docs/en/serverless/apm/{apm-server-api => api}/api-transaction.asciidoc (100%) rename docs/en/serverless/apm/{apm-server-api => api}/api.asciidoc (100%) rename docs/en/serverless/apm/{apm-server-api.asciidoc => api/index.asciidoc} (67%) rename docs/en/serverless/apm/{apm-server-api => api}/otel-api.asciidoc (100%) delete mode 100644 docs/en/serverless/apm/apm-data-types.asciidoc delete mode 100644 docs/en/serverless/apm/apm-reduce-your-data-usage.asciidoc delete mode 100644 docs/en/serverless/apm/apm-reference.asciidoc delete mode 100644 docs/en/serverless/apm/apm-stacktrace-collection.asciidoc delete mode 100644 docs/en/serverless/apm/apm-troubleshooting.asciidoc delete mode 100644 docs/en/serverless/apm/apm-troubleshooting/common-problems.asciidoc delete mode 100644 docs/en/serverless/apm/apm-troubleshooting/common-response-codes.asciidoc delete mode 100644 docs/en/serverless/apm/apm-view-and-analyze-traces.asciidoc rename docs/en/serverless/{apm-agents/apm-agents-elastic-apm-agents.asciidoc => apm/collect-application-data/agents/index.asciidoc} (88%) rename docs/en/serverless/{apm-agents/apm-agents-aws-lambda-functions.asciidoc => apm/collect-application-data/aws-lambda-extension.asciidoc} (96%) rename docs/en/serverless/apm/{apm-send-traces-to-elastic.asciidoc => collect-application-data/index.asciidoc} (77%) rename docs/en/serverless/{apm-agents => apm/collect-application-data/open-telemetry}/images/apm-otel-api-sdk-collector.png (100%) rename docs/en/serverless/{apm-agents => apm/collect-application-data/open-telemetry}/images/apm-otel-api-sdk-elastic-agent.png (100%) rename docs/en/serverless/{apm-agents => apm/collect-application-data/open-telemetry}/images/apm-otel-distro.png (100%) rename docs/en/serverless/{apm-agents/apm-agents-opentelemetry.asciidoc => apm/collect-application-data/open-telemetry/index.asciidoc} (96%) rename docs/en/serverless/{apm-agents/apm-agents-opentelemetry-resource-attributes.asciidoc => apm/collect-application-data/open-telemetry/otel-attrs.asciidoc} (100%) rename docs/en/serverless/{apm-agents/apm-agents-opentelemetry-opentelemetry-native-support.asciidoc => apm/collect-application-data/open-telemetry/otel-direct.asciidoc} (100%) rename docs/en/serverless/{apm-agents/apm-agents-opentelemetry-limitations.asciidoc => apm/collect-application-data/open-telemetry/otel-limitations.asciidoc} (100%) rename docs/en/serverless/{apm-agents/apm-agents-opentelemetry-collect-metrics.asciidoc => apm/collect-application-data/open-telemetry/otel-metrics.asciidoc} (100%) rename docs/en/serverless/apm/{ => data-model}/apm-compress-spans.asciidoc (99%) rename docs/en/serverless/apm/{ => data-model}/apm-distributed-tracing.asciidoc (96%) rename docs/en/serverless/apm/{ => data-model}/apm-transaction-sampling.asciidoc (99%) rename docs/en/serverless/apm/{apm-transaction-sampling => data-model}/configure-head-based-sampling.asciidoc (100%) create mode 100644 docs/en/serverless/apm/data-model/index.asciidoc rename docs/en/serverless/apm/{apm-get-started.asciidoc => getting-started-apm/index.asciidoc} (91%) create mode 100644 docs/en/serverless/apm/images/spans-transactions-and-traces.png create mode 100644 docs/en/serverless/apm/manage-storage/index.asciidoc rename docs/en/serverless/apm/{apm-keep-data-secure.asciidoc => security/index.asciidoc} (98%) create mode 100644 docs/en/serverless/apm/troubleshooting/index.asciidoc rename docs/en/serverless/apm/{apm-ui-errors.asciidoc => view-and-analyze/drill-down/errors.asciidoc} (100%) create mode 100644 docs/en/serverless/apm/view-and-analyze/drill-down/index.asciidoc rename docs/en/serverless/apm/{apm-ui-infrastructure.asciidoc => view-and-analyze/drill-down/infrastructure.asciidoc} (93%) rename docs/en/serverless/apm/{apm-ui-logs.asciidoc => view-and-analyze/drill-down/logs.asciidoc} (83%) rename docs/en/serverless/apm/{apm-ui-metrics.asciidoc => view-and-analyze/drill-down/metrics.asciidoc} (100%) rename docs/en/serverless/apm/{apm-ui-trace-sample-timeline.asciidoc => view-and-analyze/drill-down/spans.asciidoc} (100%) rename docs/en/serverless/apm/{apm-ui-transactions.asciidoc => view-and-analyze/drill-down/transactions.asciidoc} (99%) rename docs/en/serverless/apm/{apm-query-your-data.asciidoc => view-and-analyze/filter-and-search/advanced-queries.asciidoc} (97%) rename docs/en/serverless/apm/{apm-filter-your-data.asciidoc => view-and-analyze/filter-and-search/filters.asciidoc} (96%) create mode 100644 docs/en/serverless/apm/view-and-analyze/filter-and-search/index.asciidoc create mode 100644 docs/en/serverless/apm/view-and-analyze/index.asciidoc rename docs/en/serverless/apm/{apm-find-transaction-latency-and-failure-correlations.asciidoc => view-and-analyze/interpret/correlations.asciidoc} (100%) rename docs/en/serverless/apm/{apm-track-deployments-with-annotations.asciidoc => view-and-analyze/interpret/deployment-annotations.asciidoc} (97%) create mode 100644 docs/en/serverless/apm/view-and-analyze/interpret/index.asciidoc rename docs/en/serverless/apm/{apm-observe-lambda-functions.asciidoc => view-and-analyze/interpret/lambda.asciidoc} (100%) rename docs/en/serverless/apm/{apm-integrate-with-machine-learning.asciidoc => view-and-analyze/machine-learning.asciidoc} (100%) rename docs/en/serverless/apm/{apm-kibana-settings.asciidoc => view-and-analyze/settings.asciidoc} (96%) rename docs/en/serverless/apm/{apm-ui-dependencies.asciidoc => view-and-analyze/ui-overview/dependencies.asciidoc} (98%) rename docs/en/serverless/apm/{apm-ui-overview.asciidoc => view-and-analyze/ui-overview/index.asciidoc} (55%) rename docs/en/serverless/apm/{apm-ui-service-map.asciidoc => view-and-analyze/ui-overview/service-map.asciidoc} (100%) rename docs/en/serverless/apm/{apm-ui-service-overview.asciidoc => view-and-analyze/ui-overview/service-overview.asciidoc} (95%) rename docs/en/serverless/apm/{apm-ui-services.asciidoc => view-and-analyze/ui-overview/services.asciidoc} (96%) rename docs/en/serverless/apm/{apm-ui-traces.asciidoc => view-and-analyze/ui-overview/traces.asciidoc} (100%) diff --git a/docs/en/serverless/apm/act-on-data/alerts.asciidoc b/docs/en/serverless/apm/act-on-data/alerts.asciidoc new file mode 100644 index 0000000000..8d500d24aa --- /dev/null +++ b/docs/en/serverless/apm/act-on-data/alerts.asciidoc @@ -0,0 +1,42 @@ +[[observability-apm-alerts]] += Create APM rules and alerts + +++++ +Create rules and alerts +++++ + +The Applications UI allows you to define *rules* to detect complex conditions within your APM data +and trigger built-in *actions* when those conditions are met. + +[discrete] +== APM rules + +The following APM rules are supported: + +[cols="1,1"] +|=== +| *APM Anomaly* +a| Alert when either the latency, throughput, or failed transaction rate of a service is anomalous. +Anomaly rules can be set at the environment level, service level, and/or transaction type level. + +Read more in <> + +| *Error count threshold* +a| Alert when the number of errors in a service exceeds a defined threshold. Error count rules can be set at the +environment level, service level, and error group level. + +Read more in <> + +| *Failed transaction rate threshold* +a| Alert when the rate of transaction errors in a service exceeds a defined threshold. + +Read more in <> + +| *Latency threshold* +a| Alert when the latency or failed transaction rate is abnormal. +Threshold rules can be as broad or as granular as you'd like, enabling you to define exactly when you want to be alerted--whether that's at the environment level, service name level, transaction type level, and/or transaction name level. + +Read more in <> + +|=== + diff --git a/docs/en/serverless/apm/apm-create-custom-links.asciidoc b/docs/en/serverless/apm/act-on-data/custom-links.asciidoc similarity index 99% rename from docs/en/serverless/apm/apm-create-custom-links.asciidoc rename to docs/en/serverless/apm/act-on-data/custom-links.asciidoc index 61398f59c0..7301ef53e5 100644 --- a/docs/en/serverless/apm/apm-create-custom-links.asciidoc +++ b/docs/en/serverless/apm/act-on-data/custom-links.asciidoc @@ -5,7 +5,7 @@ :role: Editor :goal: create and manage custom links -include::../partials/roles.asciidoc[] +include::../../partials/roles.asciidoc[] :role!: :goal!: diff --git a/docs/en/serverless/apm/act-on-data/index.asciidoc b/docs/en/serverless/apm/act-on-data/index.asciidoc new file mode 100644 index 0000000000..a0d60133a9 --- /dev/null +++ b/docs/en/serverless/apm/act-on-data/index.asciidoc @@ -0,0 +1,28 @@ +[[observability-apm-act-on-data]] += Act on application data + +++++ +Act on data +++++ + +In addition to exploring visualizations in the Applications UI, you can make your application data more actionable with: + +[cols="1,1"] +|=== +| <> +| The Applications UI allows you to define rules to detect complex + conditions within your APM data and trigger built-in actions when those conditions are met. + +| <> +| Build URLs that contain relevant metadata from a specific trace. + For example, you can create a link that will take you to a page where you can open a new GitHub issue + with context already auto-populated in the issue body. + These links will be shown in the _Actions_ context menu in selected areas of the Applications UI (for example, by transaction details). +|=== + + +///////////////// +// Subsections // +///////////////// +include::./alerts.asciidoc[leveloffset=+1] +include::./custom-links.asciidoc[leveloffset=+1] diff --git a/docs/en/serverless/apm/apm-server-api/api-error.asciidoc b/docs/en/serverless/apm/api/api-error.asciidoc similarity index 100% rename from docs/en/serverless/apm/apm-server-api/api-error.asciidoc rename to docs/en/serverless/apm/api/api-error.asciidoc diff --git a/docs/en/serverless/apm/apm-server-api/api-events.asciidoc b/docs/en/serverless/apm/api/api-events.asciidoc similarity index 100% rename from docs/en/serverless/apm/apm-server-api/api-events.asciidoc rename to docs/en/serverless/apm/api/api-events.asciidoc diff --git a/docs/en/serverless/apm/apm-server-api/api-info.asciidoc b/docs/en/serverless/apm/api/api-info.asciidoc similarity index 100% rename from docs/en/serverless/apm/apm-server-api/api-info.asciidoc rename to docs/en/serverless/apm/api/api-info.asciidoc diff --git a/docs/en/serverless/apm/apm-server-api/api-metadata.asciidoc b/docs/en/serverless/apm/api/api-metadata.asciidoc similarity index 100% rename from docs/en/serverless/apm/apm-server-api/api-metadata.asciidoc rename to docs/en/serverless/apm/api/api-metadata.asciidoc diff --git a/docs/en/serverless/apm/apm-server-api/api-metricset.asciidoc b/docs/en/serverless/apm/api/api-metricset.asciidoc similarity index 100% rename from docs/en/serverless/apm/apm-server-api/api-metricset.asciidoc rename to docs/en/serverless/apm/api/api-metricset.asciidoc diff --git a/docs/en/serverless/apm/apm-server-api/api-span.asciidoc b/docs/en/serverless/apm/api/api-span.asciidoc similarity index 100% rename from docs/en/serverless/apm/apm-server-api/api-span.asciidoc rename to docs/en/serverless/apm/api/api-span.asciidoc diff --git a/docs/en/serverless/apm/apm-server-api/api-transaction.asciidoc b/docs/en/serverless/apm/api/api-transaction.asciidoc similarity index 100% rename from docs/en/serverless/apm/apm-server-api/api-transaction.asciidoc rename to docs/en/serverless/apm/api/api-transaction.asciidoc diff --git a/docs/en/serverless/apm/apm-server-api/api.asciidoc b/docs/en/serverless/apm/api/api.asciidoc similarity index 100% rename from docs/en/serverless/apm/apm-server-api/api.asciidoc rename to docs/en/serverless/apm/api/api.asciidoc diff --git a/docs/en/serverless/apm/apm-server-api.asciidoc b/docs/en/serverless/apm/api/index.asciidoc similarity index 67% rename from docs/en/serverless/apm/apm-server-api.asciidoc rename to docs/en/serverless/apm/api/index.asciidoc index aca9eb6042..8cd4b673b7 100644 --- a/docs/en/serverless/apm/apm-server-api.asciidoc +++ b/docs/en/serverless/apm/api/index.asciidoc @@ -8,52 +8,52 @@ This API is exclusively for APM agent developers. The vast majority of users should have no reason to interact with this API. ==== -include::./apm-server-api/api.asciidoc[] +include::./api.asciidoc[] [discrete] [[observability-apm-server-api-server-information-api]] == Server information API -include::./apm-server-api/api-info.asciidoc[] +include::./api-info.asciidoc[] [discrete] [[observability-apm-server-api-events-intake-api]] == Events intake API -include::./apm-server-api/api-events.asciidoc[] +include::./api-events.asciidoc[] [discrete] [[observability-apm-server-api-metadata]] === Metadata -include::./apm-server-api/api-metadata.asciidoc[] +include::./api-metadata.asciidoc[] [discrete] [[observability-apm-server-api-transactions]] === Transactions -include::./apm-server-api/api-transaction.asciidoc[] +include::./api-transaction.asciidoc[] [discrete] [[observability-apm-server-api-spans]] === Spans -include::./apm-server-api/api-span.asciidoc[] +include::./api-span.asciidoc[] [discrete] [[observability-apm-server-api-errors]] === Errors -include::./apm-server-api/api-error.asciidoc[] +include::./api-error.asciidoc[] [discrete] [[observability-apm-server-api-metrics]] === Metrics -include::./apm-server-api/api-metricset.asciidoc[] +include::./api-metricset.asciidoc[] [discrete] [[observability-apm-server-api-opentelemetry-api]] == OpenTelemetry API -include::./apm-server-api/otel-api.asciidoc[] +include::./otel-api.asciidoc[] diff --git a/docs/en/serverless/apm/apm-server-api/otel-api.asciidoc b/docs/en/serverless/apm/api/otel-api.asciidoc similarity index 100% rename from docs/en/serverless/apm/apm-server-api/otel-api.asciidoc rename to docs/en/serverless/apm/api/otel-api.asciidoc diff --git a/docs/en/serverless/apm/apm-data-types.asciidoc b/docs/en/serverless/apm/apm-data-types.asciidoc deleted file mode 100644 index 8dace1337b..0000000000 --- a/docs/en/serverless/apm/apm-data-types.asciidoc +++ /dev/null @@ -1,18 +0,0 @@ -[[observability-apm-data-types]] -= APM data types - -// :description: Learn about the various APM data types. -// :keywords: serverless, observability, overview - -Elastic APM agents capture different types of information from within their instrumented applications. -These are known as events, and can be spans, transactions, errors, or metrics: - -* **Spans** contain information about the execution of a specific code path. -They measure from the start to the end of an activity, and they can have a parent/child -relationship with other spans. -* **Transactions** are a special kind of _span_ that have additional attributes associated with them. -They describe an event captured by an Elastic {apm-agent} instrumenting a service. -You can think of transactions as the highest level of work you’re measuring within a service. -* **Errors** contain at least information about the original `exception` that occurred or about -a `log` created when the exception occurred. For simplicity, errors are represented by a unique ID. -* **Metrics** measure the state of a system by gathering information on a regular interval. diff --git a/docs/en/serverless/apm/apm-reduce-your-data-usage.asciidoc b/docs/en/serverless/apm/apm-reduce-your-data-usage.asciidoc deleted file mode 100644 index 98fa1d9041..0000000000 --- a/docs/en/serverless/apm/apm-reduce-your-data-usage.asciidoc +++ /dev/null @@ -1,17 +0,0 @@ -[[observability-apm-reduce-your-data-usage]] -= Reduce your data usage - -// :description: Implement strategies for reducing your data usage without compromising the ability to analyze APM data. -// :keywords: serverless, observability, overview - -The richness and volume of APM data provides unique insights into your applications, but it can -also mean higher costs and more noise when analyzing data. There are a couple strategies you can -use to reduce your data usage while continuing to get the full value of APM data. Read more about -these strategies: - -* <>: Reduce data storage, costs, and -noise by ingesting only a percentage of all traces that you can extrapolate from in your analysis. -* <>: Compress similar or identical spans to -reduce storage overhead, processing power needed, and clutter in the Applications UI. -* <>: Reduce the stacktrace information -collected by your APM agents. diff --git a/docs/en/serverless/apm/apm-reference.asciidoc b/docs/en/serverless/apm/apm-reference.asciidoc deleted file mode 100644 index 7068da8e0a..0000000000 --- a/docs/en/serverless/apm/apm-reference.asciidoc +++ /dev/null @@ -1,13 +0,0 @@ -[[observability-apm-reference]] -= Reference - -// :keywords: serverless, observability, reference - -The following reference documentation is available: - -* <> -* https://docs.elastic.co/api-reference/observability/post_api-apm-agent-keys[API reference] - -In addition to the public API above, the APM managed intake service offers an -<>. -This API is exclusively for APM agent developers. The vast majority of users should have no reason to interact with this API. diff --git a/docs/en/serverless/apm/apm-stacktrace-collection.asciidoc b/docs/en/serverless/apm/apm-stacktrace-collection.asciidoc deleted file mode 100644 index ee8133a161..0000000000 --- a/docs/en/serverless/apm/apm-stacktrace-collection.asciidoc +++ /dev/null @@ -1,11 +0,0 @@ -[[observability-apm-stacktrace-collection]] -= Stacktrace collection - -// :description: Reduce data storage and costs by reducing stacktrace collection -// :keywords: serverless, observability, how-to - -Elastic APM agents collect `stacktrace` information under certain circumstances. This can be very helpful in identifying issues in your code, but it also comes with an overhead at collection time and increases your storage usage. - -Stack trace collection settings are managed in each APM agent. You can enable and disable this feature, or set specific configuration limits, like the maximum number of stacktrace frames to collect, or the minimum duration of a stacktrace to collect. - -See the relevant {apm-agents-ref}/index.html[{apm-agent} documentation] to learn how to customize stacktrace collection. diff --git a/docs/en/serverless/apm/apm-troubleshooting.asciidoc b/docs/en/serverless/apm/apm-troubleshooting.asciidoc deleted file mode 100644 index 12b62462cf..0000000000 --- a/docs/en/serverless/apm/apm-troubleshooting.asciidoc +++ /dev/null @@ -1,50 +0,0 @@ -[[observability-apm-troubleshooting]] -= Troubleshooting - -// :keywords: serverless, observability, reference - -This section provides solutions to common questions and problems, -and processing and performance guidance. - -[discrete] -[[observability-apm-troubleshooting-common-problems]] -== Common problems - -include::./apm-troubleshooting/common-problems.asciidoc[] - -[discrete] -[[observability-apm-troubleshooting-common-response-codes]] -== Common response codes - -include::./apm-troubleshooting/common-response-codes.asciidoc[] - -[discrete] -[[observability-apm-troubleshooting-related-troubleshooting-resources]] -== Related troubleshooting resources - -For additional help with other APM components, see the links below. -{agent} and each {apm-agent} has its own troubleshooting guide: - -* {fleet-guide}/troubleshooting-intro.html[{fleet} and {agent} troubleshooting] -* {apm-dotnet-ref}/troubleshooting.html[.NET agent troubleshooting] -* {apm-go-ref}/troubleshooting.html[Go agent troubleshooting] -* {apm-java-ref}/trouble-shooting.html[Java agent troubleshooting] -* {apm-node-ref}/troubleshooting.html[Node.js agent troubleshooting] -* {apm-php-ref}/troubleshooting.html[PHP agent troubleshooting] -* {apm-py-ref}/troubleshooting.html[Python agent troubleshooting] -* {apm-ruby-ref}/debugging.html[Ruby agent troubleshooting] - -[discrete] -[[observability-apm-troubleshooting-elastic-support]] -== Elastic Support - -We offer a support experience unlike any other. -Our team of professionals 'speak human and code' and love making your day. -https://www.elastic.co/subscriptions[Learn more about subscriptions]. - -//// -/* ### Discussion forum - -For additional questions and feature requests, -visit our [discussion forum](https://discuss.elastic.co/c/apm). */ -//// diff --git a/docs/en/serverless/apm/apm-troubleshooting/common-problems.asciidoc b/docs/en/serverless/apm/apm-troubleshooting/common-problems.asciidoc deleted file mode 100644 index 70ed11de1b..0000000000 --- a/docs/en/serverless/apm/apm-troubleshooting/common-problems.asciidoc +++ /dev/null @@ -1,47 +0,0 @@ - - -This section describes common problems you might encounter. - -//// -### I/O Timeout - -I/O Timeouts can occur when your timeout settings across the stack are not configured correctly, -especially when using a load balancer. - -You may see an error like the one below in the {apm-agent} logs, and/or a similar error on the intake side: - -```logs -[ElasticAPM] APM Server responded with an error: -"read tcp 123.34.22.313:8200->123.34.22.40:41602: i/o timeout" -``` - -To fix this error, ensure timeouts are incrementing from the {apm-agent}, -through your load balancer, to the Elastic APM intake. - -By default, Elastic APM agent timeouts are set at 10 seconds, and the Elastic intake timeout is set at 60 seconds. -Your load balancer should be set somewhere between these numbers. - -For example: - -```txt -APM agent --> Load Balancer --> Elastic APM intake - 10s 15s 60s -``` */ -//// - -[discrete] -[[field-limit-exceeded-legacy]] -=== Field limit exceeded - -When adding too many distinct tag keys on a transaction or span, -you risk creating a {ref}/mapping.html#mapping-limit-settings[mapping explosion]. - -For example, you should avoid that user-specified data, -like URL parameters, is used as a tag key. -Likewise, using the current timestamp or a user ID as a tag key is not a good idea. -However, tag **values** with a high cardinality are not a problem. -Just try to keep the number of distinct tag keys at a minimum. - -The symptom of a mapping explosion is that transactions and spans are not indexed anymore after a certain time. Usually, on the next day, -the spans and transactions will be indexed again because a new index is created each day. -But as soon as the field limit is reached, indexing stops again. diff --git a/docs/en/serverless/apm/apm-troubleshooting/common-response-codes.asciidoc b/docs/en/serverless/apm/apm-troubleshooting/common-response-codes.asciidoc deleted file mode 100644 index f9942758dc..0000000000 --- a/docs/en/serverless/apm/apm-troubleshooting/common-response-codes.asciidoc +++ /dev/null @@ -1,20 +0,0 @@ - - -[discrete] -[[bad-request]] -=== HTTP 400: Data decoding error / Data validation error - -The most likely cause for this error is using an incompatible version of an {apm-agent}. -See <> to verify compatibility. - -[discrete] -[[event-too-large]] -=== HTTP 400: Event too large - -APM agents communicate with the Managed intake service by sending events in an HTTP request. Each event is sent as its own line in the HTTP request body. If events are too large, you can reduce the size of the events that your APM agents send by: <> or <>. - -[discrete] -[[unauthorized]] -=== HTTP 401: Invalid token - -The API key is invalid. diff --git a/docs/en/serverless/apm/apm-view-and-analyze-traces.asciidoc b/docs/en/serverless/apm/apm-view-and-analyze-traces.asciidoc deleted file mode 100644 index 28603d4b81..0000000000 --- a/docs/en/serverless/apm/apm-view-and-analyze-traces.asciidoc +++ /dev/null @@ -1,23 +0,0 @@ -[[observability-apm-view-and-analyze-traces]] -= View and analyze traces - -// :keywords: serverless, observability, overview - -APM allows you to monitor your software services and applications in real time; -visualize detailed performance information on your services, -identify and analyze errors, -and monitor host-level and APM agent-specific metrics like JVM and Go runtime metrics. - -[discrete] -[[observability-apm-view-and-analyze-traces-visualizing-application-bottlenecks]] -== Visualizing application bottlenecks - -Having access to application-level insights with just a few clicks can drastically decrease the time you spend -debugging errors, slow response times, and crashes. - -For example, you can see information about response times, requests per minute, and status codes per endpoint. -You can even dive into a specific request sample and get a complete waterfall view of what your application is spending its time on. -You might see that your bottlenecks are in database queries, cache calls, or external requests. -For each incoming request and each application error, -you can also see contextual information such as the request header, user information, -system values, or custom data that you manually attached to the request. diff --git a/docs/en/serverless/apm/apm.asciidoc b/docs/en/serverless/apm/apm.asciidoc index 97b5c6a732..e2b8f06e2a 100644 --- a/docs/en/serverless/apm/apm.asciidoc +++ b/docs/en/serverless/apm/apm.asciidoc @@ -22,3 +22,16 @@ like JVM metrics in the Java Agent, and Go runtime metrics in the Go Agent. == Give Elastic APM a try Ready to give Elastic APM a try? See <>. + +///////////////// +// Subsections // +///////////////// +include::./getting-started-apm/index.asciidoc[leveloffset=+1] +include::./data-model/index.asciidoc[leveloffset=+1] +include::./collect-application-data/index.asciidoc[leveloffset=+1] +include::./view-and-analyze/index.asciidoc[leveloffset=+1] +include::./act-on-data/index.asciidoc[leveloffset=+1] +include::./security/index.asciidoc[leveloffset=+1] +include::./manage-storage/index.asciidoc[leveloffset=+1] +include::./api/index.asciidoc[leveloffset=+1] +include::./troubleshooting/index.asciidoc[leveloffset=+1] diff --git a/docs/en/serverless/apm-agents/apm-agents-elastic-apm-agents.asciidoc b/docs/en/serverless/apm/collect-application-data/agents/index.asciidoc similarity index 88% rename from docs/en/serverless/apm-agents/apm-agents-elastic-apm-agents.asciidoc rename to docs/en/serverless/apm/collect-application-data/agents/index.asciidoc index b146b2f798..63eedb56a7 100644 --- a/docs/en/serverless/apm-agents/apm-agents-elastic-apm-agents.asciidoc +++ b/docs/en/serverless/apm/collect-application-data/agents/index.asciidoc @@ -1,11 +1,15 @@ [[observability-apm-agents-elastic-apm-agents]] = Elastic APM agents +++++ +APM agents +++++ + // :keywords: serverless, observability, overview :role: Admin :goal: use APM agents -include::../partials/roles.asciidoc[] +include::../../../partials/roles.asciidoc[] :role!: :goal!: @@ -42,43 +46,43 @@ Elastic APM agents are built and maintained by Elastic. While they are similar,
++++ -include::../transclusion/apm/guide/about/java.asciidoc[] +include::../../../transclusion/apm/guide/about/java.asciidoc[] ++++
diff --git a/docs/en/serverless/apm-agents/apm-agents-aws-lambda-functions.asciidoc b/docs/en/serverless/apm/collect-application-data/aws-lambda-extension.asciidoc similarity index 96% rename from docs/en/serverless/apm-agents/apm-agents-aws-lambda-functions.asciidoc rename to docs/en/serverless/apm/collect-application-data/aws-lambda-extension.asciidoc index 2d8e5cf8dd..7c771fccfb 100644 --- a/docs/en/serverless/apm-agents/apm-agents-aws-lambda-functions.asciidoc +++ b/docs/en/serverless/apm/collect-application-data/aws-lambda-extension.asciidoc @@ -1,5 +1,9 @@ [[observability-apm-agents-aws-lambda-functions]] -= AWS Lambda functions += Monitoring AWS Lambda Functions + +++++ +AWS Lambda functions +++++ // :description: Use Elastic APM to monitor your AWS Lambda functions. // :keywords: serverless, observability, overview diff --git a/docs/en/serverless/apm/apm-send-traces-to-elastic.asciidoc b/docs/en/serverless/apm/collect-application-data/index.asciidoc similarity index 77% rename from docs/en/serverless/apm/apm-send-traces-to-elastic.asciidoc rename to docs/en/serverless/apm/collect-application-data/index.asciidoc index a12f475f78..c2c1c10572 100644 --- a/docs/en/serverless/apm/apm-send-traces-to-elastic.asciidoc +++ b/docs/en/serverless/apm/collect-application-data/index.asciidoc @@ -1,11 +1,11 @@ [[observability-apm-send-data-to-elastic]] -= Send APM data to Elastic += Collect application data // :keywords: serverless, observability, overview :role: Admin :goal: send APM data to Elastic -include::../partials/roles.asciidoc[] +include::../../partials/roles.asciidoc[] :role!: :goal!: @@ -22,4 +22,9 @@ Send APM data to Elastic with: Elastic also supports instrumentation of <>. -// To do: We should put a diagram here showing how high-level arch +///////////////// +// Subsections // +///////////////// +include::./agents/index.asciidoc[leveloffset=+1] +include::./open-telemetry/index.asciidoc[leveloffset=+1] +include::./aws-lambda-extension.asciidoc[leveloffset=+1] diff --git a/docs/en/serverless/apm-agents/images/apm-otel-api-sdk-collector.png b/docs/en/serverless/apm/collect-application-data/open-telemetry/images/apm-otel-api-sdk-collector.png similarity index 100% rename from docs/en/serverless/apm-agents/images/apm-otel-api-sdk-collector.png rename to docs/en/serverless/apm/collect-application-data/open-telemetry/images/apm-otel-api-sdk-collector.png diff --git a/docs/en/serverless/apm-agents/images/apm-otel-api-sdk-elastic-agent.png b/docs/en/serverless/apm/collect-application-data/open-telemetry/images/apm-otel-api-sdk-elastic-agent.png similarity index 100% rename from docs/en/serverless/apm-agents/images/apm-otel-api-sdk-elastic-agent.png rename to docs/en/serverless/apm/collect-application-data/open-telemetry/images/apm-otel-api-sdk-elastic-agent.png diff --git a/docs/en/serverless/apm-agents/images/apm-otel-distro.png b/docs/en/serverless/apm/collect-application-data/open-telemetry/images/apm-otel-distro.png similarity index 100% rename from docs/en/serverless/apm-agents/images/apm-otel-distro.png rename to docs/en/serverless/apm/collect-application-data/open-telemetry/images/apm-otel-distro.png diff --git a/docs/en/serverless/apm-agents/apm-agents-opentelemetry.asciidoc b/docs/en/serverless/apm/collect-application-data/open-telemetry/index.asciidoc similarity index 96% rename from docs/en/serverless/apm-agents/apm-agents-opentelemetry.asciidoc rename to docs/en/serverless/apm/collect-application-data/open-telemetry/index.asciidoc index 3bc596c183..d3c85a3a98 100644 --- a/docs/en/serverless/apm-agents/apm-agents-opentelemetry.asciidoc +++ b/docs/en/serverless/apm/collect-application-data/open-telemetry/index.asciidoc @@ -1,6 +1,10 @@ [[observability-apm-agents-opentelemetry]] = Use OpenTelemetry with APM +++++ +OpenTelemetry +++++ + // :keywords: serverless, observability, overview [NOTE] @@ -127,3 +131,11 @@ AWS Lambda functions can be instrumented with OpenTelemetry and monitored with E To get started, follow the official AWS Distro for OpenTelemetry Lambda documentation, and configure the OpenTelemetry Collector to output traces and metrics to your Elastic cluster: https://aws-otel.github.io/docs/getting-started/lambda[**Get started with the AWS Distro for OpenTelemetry Lambda**^] + +///////////////// +// Subsections // +///////////////// +include::./otel-attrs.asciidoc[leveloffset=+1] +include::./otel-direct.asciidoc[leveloffset=+1] +include::./otel-limitations.asciidoc[leveloffset=+1] +include::./otel-metrics.asciidoc[leveloffset=+1] diff --git a/docs/en/serverless/apm-agents/apm-agents-opentelemetry-resource-attributes.asciidoc b/docs/en/serverless/apm/collect-application-data/open-telemetry/otel-attrs.asciidoc similarity index 100% rename from docs/en/serverless/apm-agents/apm-agents-opentelemetry-resource-attributes.asciidoc rename to docs/en/serverless/apm/collect-application-data/open-telemetry/otel-attrs.asciidoc diff --git a/docs/en/serverless/apm-agents/apm-agents-opentelemetry-opentelemetry-native-support.asciidoc b/docs/en/serverless/apm/collect-application-data/open-telemetry/otel-direct.asciidoc similarity index 100% rename from docs/en/serverless/apm-agents/apm-agents-opentelemetry-opentelemetry-native-support.asciidoc rename to docs/en/serverless/apm/collect-application-data/open-telemetry/otel-direct.asciidoc diff --git a/docs/en/serverless/apm-agents/apm-agents-opentelemetry-limitations.asciidoc b/docs/en/serverless/apm/collect-application-data/open-telemetry/otel-limitations.asciidoc similarity index 100% rename from docs/en/serverless/apm-agents/apm-agents-opentelemetry-limitations.asciidoc rename to docs/en/serverless/apm/collect-application-data/open-telemetry/otel-limitations.asciidoc diff --git a/docs/en/serverless/apm-agents/apm-agents-opentelemetry-collect-metrics.asciidoc b/docs/en/serverless/apm/collect-application-data/open-telemetry/otel-metrics.asciidoc similarity index 100% rename from docs/en/serverless/apm-agents/apm-agents-opentelemetry-collect-metrics.asciidoc rename to docs/en/serverless/apm/collect-application-data/open-telemetry/otel-metrics.asciidoc diff --git a/docs/en/serverless/apm/apm-compress-spans.asciidoc b/docs/en/serverless/apm/data-model/apm-compress-spans.asciidoc similarity index 99% rename from docs/en/serverless/apm/apm-compress-spans.asciidoc rename to docs/en/serverless/apm/data-model/apm-compress-spans.asciidoc index 331c08cb3e..36bd55cd9c 100644 --- a/docs/en/serverless/apm/apm-compress-spans.asciidoc +++ b/docs/en/serverless/apm/data-model/apm-compress-spans.asciidoc @@ -1,5 +1,5 @@ [[observability-apm-compress-spans]] -= Compress spans += Span compression // :description: Compress similar or identical spans to reduce storage overhead, processing power needed, and clutter in the Applications UI. // :keywords: serverless, observability, how-to diff --git a/docs/en/serverless/apm/apm-distributed-tracing.asciidoc b/docs/en/serverless/apm/data-model/apm-distributed-tracing.asciidoc similarity index 96% rename from docs/en/serverless/apm/apm-distributed-tracing.asciidoc rename to docs/en/serverless/apm/data-model/apm-distributed-tracing.asciidoc index 653a0acc05..1679c2279e 100644 --- a/docs/en/serverless/apm/apm-distributed-tracing.asciidoc +++ b/docs/en/serverless/apm/data-model/apm-distributed-tracing.asciidoc @@ -122,7 +122,7 @@ with each agent's API. Sending services must add the `traceparent` header to outgoing requests. -include::../transclusion/apm/guide/tab-widgets/distributed-trace-send-widget.asciidoc[] +include::../../transclusion/apm/guide/tab-widgets/distributed-trace-send-widget.asciidoc[] [discrete] [[distributed-tracing-incoming]] @@ -131,4 +131,4 @@ include::../transclusion/apm/guide/tab-widgets/distributed-trace-send-widget.asc Receiving services must parse the incoming `traceparent` header, and start a new transaction or span as a child of the received context. -include::../transclusion/apm/guide/tab-widgets/distributed-trace-receive-widget.asciidoc[] +include::../../transclusion/apm/guide/tab-widgets/distributed-trace-receive-widget.asciidoc[] diff --git a/docs/en/serverless/apm/apm-transaction-sampling.asciidoc b/docs/en/serverless/apm/data-model/apm-transaction-sampling.asciidoc similarity index 99% rename from docs/en/serverless/apm/apm-transaction-sampling.asciidoc rename to docs/en/serverless/apm/data-model/apm-transaction-sampling.asciidoc index ef29464cfe..53abeee6ce 100644 --- a/docs/en/serverless/apm/apm-transaction-sampling.asciidoc +++ b/docs/en/serverless/apm/data-model/apm-transaction-sampling.asciidoc @@ -148,4 +148,4 @@ Regardless of the above, cost conscious customers are likely to be fine with a l [[observability-apm-transaction-sampling-configure-head-based-sampling]] == Configure head-based sampling -include::./apm-transaction-sampling/configure-head-based-sampling.asciidoc[] +include::./configure-head-based-sampling.asciidoc[] diff --git a/docs/en/serverless/apm/apm-transaction-sampling/configure-head-based-sampling.asciidoc b/docs/en/serverless/apm/data-model/configure-head-based-sampling.asciidoc similarity index 100% rename from docs/en/serverless/apm/apm-transaction-sampling/configure-head-based-sampling.asciidoc rename to docs/en/serverless/apm/data-model/configure-head-based-sampling.asciidoc diff --git a/docs/en/serverless/apm/data-model/index.asciidoc b/docs/en/serverless/apm/data-model/index.asciidoc new file mode 100644 index 0000000000..3fd73b8868 --- /dev/null +++ b/docs/en/serverless/apm/data-model/index.asciidoc @@ -0,0 +1,47 @@ +[[observability-apm-data-types]] += Learn about application data types + +++++ +Learn about data types +++++ + +// :description: Learn about the various APM data types. +// :keywords: serverless, observability, overview + +Elastic APM agents capture different types of information from within their instrumented applications. +These are known as events, and can be spans, transactions, traces, errors, or metrics. + +//// +Explain how the different data types relate to each other at a high level +//// + +Elastic APM helps you see what happens from start to finish when a request is made to an application: + +* *Spans*: A span contain information about the execution of a specific code path. + They are the building blocks of _transactions_ and _traces_. +* *Transactions*: A transaction describes an event captured by an Elastic + APM agent instrumenting a service. A transaction is technically a type of span that has additional + attributes associated with it and often contains multiple child _spans_. You can think of transactions + as the highest level of work you’re measuring within a service. +* *Traces*: A trace is a group of _transactions_ and _spans_ with a common root. + Each trace tracks the entirety of a single request. When a trace travels through multiple services, + it is known as a _distributed trace_. + +image::images/spans-transactions-and-traces.png[Diagram illustrating the relationship between spans, transactions, and traces as described in the text on this page] + +In addition to the building blocks of traces, Elastic APM agents also capture: + +* *Errors*: An error is created when something goes wrong with a request to an application. + This event contains information to help you determine where and why an error occurred, often including in which + _transaction_ the error occurred. +* *Metrics*: Metrics measure the state of a system by gathering information on a regular interval. + +Events can contain additional metadata, which further enriches your data. + +///////////////// +// Subsections // +///////////////// +include::./apm-compress-spans.asciidoc[leveloffset=+1] +include::./apm-distributed-tracing.asciidoc[leveloffset=+1] +include::./apm-transaction-sampling.asciidoc[leveloffset=+1] +include::./configure-head-based-sampling.asciidoc[leveloffset=+1] \ No newline at end of file diff --git a/docs/en/serverless/apm/apm-get-started.asciidoc b/docs/en/serverless/apm/getting-started-apm/index.asciidoc similarity index 91% rename from docs/en/serverless/apm/apm-get-started.asciidoc rename to docs/en/serverless/apm/getting-started-apm/index.asciidoc index 41e3f083ba..2e01483725 100644 --- a/docs/en/serverless/apm/apm-get-started.asciidoc +++ b/docs/en/serverless/apm/getting-started-apm/index.asciidoc @@ -4,9 +4,13 @@ // :description: Learn how to collect Application Performance Monitoring (APM) data and visualize it in real time. // :keywords: serverless, observability, how-to +++++ +Get started +++++ + :role: Admin :goal: send APM data to Elastic -include::../partials/roles.asciidoc[] +include::../../partials/roles.asciidoc[] :role!: :goal!: @@ -61,49 +65,49 @@ your project:
++++ -include::../transclusion/apm/guide/install-agents/go.asciidoc[] +include::../../transclusion/apm/guide/install-agents/go.asciidoc[] ++++
diff --git a/docs/en/serverless/apm/images/spans-transactions-and-traces.png b/docs/en/serverless/apm/images/spans-transactions-and-traces.png new file mode 100644 index 0000000000000000000000000000000000000000..06badc4454ae7fa04f6dff9425970354aab9856e GIT binary patch literal 91061 zcmeFZXH-*Z6fTS-GvYXi5f!A4pdcb39jPh^Dph(10i}!d5+HVZ5Ru+ddXruQs02hx zXrYq;0Rn^&DM^3;`Az`6_x`=>yKCKb*POL9IpLhQ?04^HKYPFXoG=|NHO9Z${-&d& zW4wP)MVF55ls+9D!(R-40l#Qso^b&mC!gIj@uZ`>aE12o*nQp0KY<^QdFra&p)2j> zSOQMy?Qd(|rlTv5KDGPkPr75a5ALhn*7rNMGO6T}iVbRA3z=KH7pBXmQmF43=8!pX zWY=0S5Ws@t*|#AD4hN z`Qih{wT_JzW9|Pj(_8V)LEHRt15!-<|KrE!8Yc^n{XTu}^55B^F#eOoFQxcT68}kp zj_&_2EvPIaeM7g_Q;*Dx;wiiXubm}Tl=2TKTi90Tr$uB;-tx`i72cF zGacMS_Zj@p|8eB{HNFxwIMHz7X`XDP2G>1hX4{(&5016p0)-J4A|eB$P|3%*rO_EC{n2-s zqErRFMJXmIC2JRX`ZoVFnNsK%KR9K7)BiJ=9Yorw9I9UG~~Ie5v6tKTTP*jY#}@r_pDgw~4W*JVI2Ph8;a*d{gY zdx%~E>$F=b7`#TFQi9o-O41tY^ZRy^_W4{jywA5!l&HD_emX5md}51D7b(r^z5nA; z9+|Cw4JB<=;GMBX2~#*NmbJx#k$=grYTUcBXJ`bU1#RhN!^!_`Ydy4L?$iNWF(=%U;jL zOXjK(mNqt4|HOD}ZwuQxWD6A@C?{J<9IabAhYvBGui&EhfF-KsU@a5z8US>!YG-M$ zN{TvWM3oUWd|kzh;2a%DZ@1UVnJ>yXhh0oiD5DZ#ocEJ z=?#3@L-WqH;nR{|N6y78w;6*56O+2PI?K^z@zOQbR8 zg5ptS%B23Xc|*+3BbNnznt>IDQ(&9>{Ej(b1TPmv_Z$Z}lEAG1Zu0QsSn~^{jws^` zZN|Nko^B}gV7h&v?^?=DC5t8ba;Z}MMs0A)fmo7Nj@0djcJg)eD*+`o2xk!kQ|^(q zMLhLh*T{lkkno*3H6`l5CB0MkF=a60fS2o|+t|T@xO!J@DQKoIO^pk4x+)#l2BLJa zB7EMy(Qx&VMy#xX#=fxN>>2}Rd>MPR*9TT z`@w|EwBbC@Wz{+umV_n!5FkHkq5b7=&Fw>YaU`FBng;vGL&;o}%hGaB)mAS-y)3%V zuL_(tA?ZG2oL{vPP#U`2w zy``B`Fb=k)-u{EunZw!J2bz8Bo42r~$XC?0ekT*r{<>lrNJ}Yi_Hyt1*Z@w=N+!O> zwrFO{2ScQ-oI`#1@KR^hdE2t|>#&aC*J}!*F^xY6Jf-E_FXU;B-fCeuWC%pk5aLiMgR=h02nrCtBgd%^`|sV zA?z=r&y$ObD@JHRHQfz{mrk_L=WoLWdcEO8S<*RM5XhF>UF$}_wEz%R^%=z*0}>Z;u2nUrgSJhZ&~839QOsi1WJMDJmvwIGig_=kSA9!p*cQ6+9}D0i|n#y zQ;&8A91>aPJ*^MAVs4`ScW0^>%-aoWm@bQ{>%hqBm&qOuxgf~um)iRl8jgW&gjA5a&m3Fvv`O#{6{N$98g}Zo1t{IS|tU% zIU`RsmP&nX)_=Iv6S)0XZ(S4QQ%C>}ww?ejb$nPBd&@WOxcH2CkCv~X%S4+V!ClyA zU;aEjCG{We?T?oBv~{Os6P})nZJ`uMS_rdQH3x_@-cea!V;2^`*hGZ!I&PPuWoZq3 zuKZ>Cl>pd$h=@_9=%&%yIP+y~=T4r?&SSe}2VmI+t7}%5CQ{&Tbs9PfV*WRT@^+Mc zXbn7f6HBFi0tjZFtEa{wFXed+dBtXGy?hN{#U7=>b+uZUG=g|XaU5Py60CkYSMM>x zM7v&xpZQ1ypS+vFX|c*yDODr5v~97u>L(Cpa@yNVBVF864;uTQkuBpz7wh++X5q=F9V_f2J#(Nna%yB8XD_kA+TIbc68NDHL zxL2o}4?;_+BX9asU(~%p())6CZnTe8^lEtLSCD@~wb?66=JbQ>YP1h=tJM~MZke=Q zFr?@?n{?WDge899>AAtyj6c7DCmbaYE?wa`)B-vyQ8Dk!QHa!Qd=Cjv9`pVLoZfg8 zk00cMyx=1l+N3{&k3!n3Dw%ToA6fJ$D`5vtnXdkbYQ9tDWBLShYt{`Y^i*oITa2rp zaNOLqJ5b=~X*`E~=(~B_5Hm~fdFDbKjbwoymIVhW30du3X7oh}9bRJ1f7FxM1?B<@ zr(Vb067fw=l`Pf7w2^Y71dfA+Op(bEEsQ_f>(dq8!DlXQYvB}_X@jKO|8VF*|FxZn zDgY1W@+PAgaudP@hBS4g{^d$`U?E$-EB95>uScYHRTg+IsUD1OTKiXzNJY=4L>&tQ zm7y*ITBB=Zzi*MjAHVwQL+%4%)QFa2!k@@X*~=yJ%7?vW9QCGWE1q|)B>Ln~1R>Cv z9@%(1?qqKXf%ATsZ;Gf%V|Y~N-qLO2&qw_SSlSwUM87M<#k{Kq>@bP<_I^g8SCSKD zi;WlxY4|tgKpdpx3Vidl3aF55p zgM-fO?6-b4>*4^`&hp5^LX{7f_76-9%pcYKtaxagR9`Su@5PH0$i~lf56THvVdPjT>g1 zigo1q5WLmisBKZ({CUU%+>-ctPr??PQ5FO_7z<#4hx)@Gy42zAq^YDpkAlt@NvoG} zDpo1cf}dr5pB86d?%axar3M41sXmoP(jHOes*;%ZC$G8#TmKxZaimykRR9y`S&)U( zV-s~Pp1kyA&A1t7Sh|-L|E}pruzP^*{A_$-aoifwu|&bu2C$~8Z81` zK~V^lKy^*;91aZZJ{E@J^w7kZC@h}f%nJfG^=4idfGI;{YjWN_*K!NYGoe#wZerL(7`QkgP(YF zOV6^9)sfROD*BwURkggNMy#5M!Hx!Us}b8j!L4tCO4uWA+ALpdiG>TT9$0K9`d2Ha zX^m;aEV4Pn?H`syADii^4Hyz%PNanvfG?o8Zx~4KFBeo%6O=S~&y%@uwH0W9R^{Y{ zKr8}Fojy%Ypcj`2xh0{FL!ie5${5-xyZ~dGP=?Z=Ns~^q@0Vr=JrWRtcnMY`(yvwr z^M)#B#FwHp(n5o=goGXQ*KoWz|AUM?t)eMs%RnsIakrWUpm?O_vPSaO?f``vXSlE` z??Y9d@&@rmH{VDy)l<_m0A2Jg?asw7nm3>nsJ?^W=e`VNgze#jHr%9pA=?=K)iQpb zWx!Uv$g*QWr5zDugCwm(+8*``J-UpP3OHn0+`Y)5TT*{u;>M`LvnxG3eVmFM?rY_F z?KOg)wYBHC-3+ilIvnkGM8a9?3V~&HL^z|V>p>b@t9aNCuLb_FQE<^4Zi{}SlE8Tbg2BhVYoT)t(PE3Tx4oh4QUx+)Tt>H7fkF~L)aS|-A=s(h5n+8&;- zkj)~dgGIgd8{v@kUN8~8m|B~)G$!A`V|&g)%yXauhZrSpJ;gwbH2lMA+Bs2g3+5DFYZ`DwF?3)Q zrG)1O_A3Sy(BPwFb8ekL%_-Gizvh~xTSE7w0kRTt(7@PK{5NnK7=pp z$P`EZ>)r@TO&*=2)EEnQBBe$!ok>1GF4OJHvXO51tL2y`e*CUo;|ET?12pU4AQ=+}TI zYa$k9g*Dw?#6E)!27FOz1!Z0p6k|KgwrkayQj&mo(F5{ zapRET9W+KKcI8mAhi4W4ogE5-?mtN!3F1FV{1U`}lK9_{#P3`F`|_Uz{*%D}^%9s? zS1u6P-`)v0pb`0lE$L3ZROUYq#?AIf<{+*;oP^!c-oeqC`XS5w@67H$NgOHx-T#gx zTB+r}(zgtUeP0r&FD^8c$Goa)8jBQSqn7}k;!8>S4Eh-R;E6_Zcj?%;SO}+4zVEp&a&F<3utda7=3?#7gwn&@r zt-F7h2rcz%Tf`U&3-7*CYJ@CSKQgmwz=FZLgqYZaWHlgy%!it^wAxK?&5YD^tIEYD zQSbY^V}ltcI_4J+B?MfOq{DdQ?IbMl$ubw8IXfR9X$@W-3YwMmqbkDkR3-Ot$^yUE^0X>xid7SolS3JiDfEh5;MdogqREc#Q zR|FZ9S;{Kk`%&jX74jT-U$3WYS$dG80WwSN;+KFq&waKD2LHgRGSQ1duP2G;WGBjU zsa~zpI?QMQ>wST?-tW{kQcF9?w?3Ly20keqn&REEJeq;i;hy@vo^fc`rPa)-?c=OIio)9b(`V<39!|<2v+-W(m z=aV)MhzjV5w4J}Sm>MS)v{&ytOXD?fa1~q1@{ZV%PKA+;MIlbV?h&oJOxGTnxN1@a z;R^1Y6i7OrWm=+)Krx?uUXGdJ=DhkA>Fk!2QkpSnxNCBjr^2#j{+TIR>2!Uqc&V2N z*S6R4`?!ca5k)S|4Bj6Im4ReUAFn=;;r+qx-9+X^Tns%~Z5S!9Y*`d(CWN!I2(5@8_olv(Lp0 zh0xd}3KC57>3yA;V_;_f<-;80K1KnMU z>mQFh?onk@{kM@_g-Y88IUbz6sdX`S2pmZrV;@IFANRJSs z2QP!4ak8p8sb9C#{=Ff%W--MYT>AijksL#2N4X48DR(_m-q!$X=)WiWgI)X?N ztFmx~yRtu3xZ`4^QNJ<<=7D`C_ys&Mf=qp_9kl|~Gr>Z5*!7zUXzUrm7t=?9k9bU2 zj;}HdEZ6t=f2iTFdEA*=V^eIR<=B`$}1#O)``2fCBjlfIRzWeH7KVK8+iu*X_Iu4(sOB)|fe za+2bwe$MtcD16dA+u=j3P>&!_)J4xLggASgMOX|`{UsyjNKnncGcS%&hp z$Q`}jgtKzfB%ae_=Z2LOt$2L9+Xqsff^?;tKh&>&xvbka46A#$z0no6NQmL)%=dTT zxU{fW+bz^M*-#QPm=;a8{E5J@s(x2|kB_b+ywIemDy&DihT7H#j74h1nBR0SjjM63 z`nXoi#9@cLH{nwnr`++ZXFbWFp3hc}d$g*yaKttp>>)W{-_p?x-Vr|~Cd5t-snZ@Z zttQk~%hY@e>+CN>k<&H0PWu+mPWmrm(%>6Sxe5F!kZO3;`($&`!-tT0OX#(wZ0=shcRvQW(wL}uL^KfE3DmGk?ayt_Z7)7h?60@ zh)UL-OHyk^hJJAh%_sCvl;%GeHBOD+ODceeWdITX#U7)S7*tx&e7iTX9`gJ>IO6vZcFJaNrUg*(9Llbd4nV}%(6cuSC4(% zBx1+Z)_&>@XUgtNp8n;ZTNe}G(OIX4Cz7`%BUG>CLLD}ckRS`>x1NnKW69jM_7T;y zu~1v8k=!k)W0pPCIjE+Vbsjx#GTDJd#d{(t#_c3|$jGdXgb6-z$Gluq)ca=kX8#$c zOKmlZfw-n*%h;#@U}W$Ozr}PN9L05M6s6z=aZ`b3_$y=mByE;ksLl3Ym;I1CSd)(e zRhr#_LJ5598AbN!wIKi^y39TqbS+cK=MQb3t`|_K8^U*uFU**g@b-J&4P?(S!#Ql2 z=S;g+*&sdP0mVg+0$B)V(RiV|+sM=BLa5z499@1?8KZ=5S9RjKeq0e5mRIM7yTbL% zZ@=`e_r&m%(>l14&CklPRpQ!BCdMgr3%J9;TOp)NV6VGq{-)*MKT?)bp(p$*8v5*( znwj$kcZ5Q8FO<7E?@b?UUIQb;0^n(F9&TKP67?2n=Imj;W`hisQPZP$DCZ)c$uhb0#2y$)sbd`(M-v9*pF zgjwbQ=}SfqtE_BN0xJQ?dcm8=1~A|6W^WmzOcYcUJZQK85qZCDN+4X%UV0M{j!7mSD*(KtuuPV0 zTLzIaRm-H!KH249cMI6dh5#Ef?P(O8ynk(s&GLH&cQspGk}@};7|d`XgJs60TH=9* zg>H}SHlU;*xw6uQzIIa}c~T?Jylq2Qh@l-RcQuUNK2h)vYRHdkbPww&uf)}eR<`*e z=Qk$AMH<)OypI!1TIO|r@T@WyB_OGZM~E!Z7*9`!`Thg`rXj=!1Txx55-k_wGioL+ z6bw}ow$PMHKLie|C7@+hI=2Vljo{SJ?={_eqH5Q&n@6c1FMXYCOh9NbxhcL=EgWzx zE6LRc1F)?~8u{b+OP*SRdu>XPhMv9H}x$`seSrBZ*mD2JoQ6ySK=msiGS<%=Z3 zh2a<)m&^8u4qgriO<^$Rt3exceS4%fw_p(zp=Q*--vU8#y$|F5SJq5E)BW2> zZQhzwPajO6$lHu5!Q#ocnvcrl85i>OYF0)La?Af9TMckfAKGd}g^ttKe{7!TLm=R3 z0`SGw73W}+5Qt!_%4nZ)qFPhksr>L5W|(|(8!U~L0Tp79Y&Tx zRlB<2u9;bq>UY+TX&3eI89y^q$toqmv;ek8GYwe?*86>|8EL-b&Z){wF5_mA1qjL* z;UD3>p7P*b4Hb?@7Q;8ZK6QxYVoOW@ZHjaS&#AfDp~}kB*KQVhtbSw2%-DY7{c>3* z*jX@A1H-CNv3+X|_oha=Mzl9p2EG0k=0Ce8$h`~y4B1}}8hM-?&XM6gC~c*Mxt+=% zH|d5kZg-DbBu;`6W2zo5>PisB?KC4@SRff%^wt6)Lt?KbGESvHbDNo8K?tc(PyW^V zHSziOEZ5S@y3rJ$l`<#AfBLV^&LkAS2%6+aoZb}qluA{m#VqA)Pp?GLtx5R;} zi5sQnSM{&`=?#LV%bje{1$~-NJIywO1f0>r={}onzq?o29zHSz;fHzin{^^tC<=V* z@hPZ_gVC7tU1>?A0L|4_5$IlcQSOCk_nh^Wi8I)taZRwNni~_QyREY`QBNq4cqSRzpApl z5%zdiKFX+Vf+;A_vNVW&u$>kTgauynznbZVj@}TB@QijveU`N$Y&BmW3@@6wzTq zhQ)m>&T8LZw6MrfgVV6v4RL;gxS|mAbZ0@GH(b@0o##VWA?rmWnKl1UHgdKt*r-#y zPLb1_FaEw$kvOYx)&#R~2IotTZ4^xZmum^Zh9J~65HgIbyzFLerJ3U_&2{>_Cm!A$zUKuP5VrZWp}x#iL;w7CeG>Lk zIsm6nEJ^JTcg7AjM1e4_7@(q&&LH)LsIH11;wNj*kqyqerVHk>W5X(nK!pp{&8)o5 z^4WV_FRU~YdU#(hKCo?PSgZ(kQ;Cmzn{1B*5F=>4+(?X&w|YwB6Q@>sL8bl6?gUkN z0ok_t{Z>d!f^m7v-he<2#U1XYknOXUqj z4Azt3i2?5|6aQ@u5oA2+}`hQ(JLkno=IL_ z_X}Ed7`tV}zP@Yzi(1>!#I6qF7`c{v8nli2NyIPFSTxP1!(%^)oZDCY?C6G^ZLU;O z!VL`p;jFI0-ELz|03tryJ$*cp!v7p#x-r_%6esFu+;@FBFfwJUz$V|Cc}jCl-j-xp zq70=J0;`r0-A(uXgSc_G7gxh2+*~N6{mj_$pA27FZx{P&0#gnqE>1@*rD?DL6Z{ZQ zaaBS3zuXScE`Yk0l3tzh=d!C0)_OeR`tgUjd*l1CX~fDhqRFLg`$+CXYU+PHcjvQd zs7_he9OdY=hdY0(X-4l_YTzRC$?aKXpkXABE+b-9HvZoNNY8LA7cMuy zG9z^~#qC5I+t|33X0v=s;BJvC3RoH>-@EeG9ZixL@319p3rs~6D7jcS>>Y8 zJ6JBfYG%UyiGeI%&yUol-!S<&qsw6C9H$C1K}l=>YY_pSby&1a4U#49faI?eU7)uD z=4Ty$MYZDxke!+|Y?2bz7sWT*qpDllxsCp z;Yi>!L(|&%XQd}ghg4CEfClWhtbehxGacR*Zwk;n)ysQl)Iip+ZA6I*6Sazqfbf{WEKTvLI`7|3?6ozFwg< zUy@+@Ht3RblcD42NToDor=uAH1U(vzJ=UG60tN9;yU$#XAM!{hjPdLv)@}R*OMe8r z;LfMCW9=AcFp3YmC|(HE_@1*H<%WBX zAC&O|-B$w}@XtjrXO|`FZ|^4GWt7g6)sCFZUw{4n67ZHWIO%pD zAZy!@u4sErXbj>yUdfYdO+(<=AIu9PNrUlDkL4#l+2PAM2~RAg_|%PT z(H-dSPQSt=jcMISAB!~4okxiV|!7rzRDc>P;qq9{0T@OKfA z^1&=6S?n#1S#*TYJa&uXcaDyi(Z&Rti`AC+1zSF3m30$I)Bool?tDBp?CHkqh{$G{ zvWkEOE}^nkCbe ztjJ(R4$({GC|j7%2!xeG#%+0mWod?yd5E@x>?PG2QUPqKJqx2>a;D;(F_3BexP@a_ z=c#~pegYXw|CpO&*rTHS1D59AW`w5O@9k)%YDIGT^T|c4TC>GsD<`}5ivEalL&}jC zt{2`+lWhwU2>#11O_x(i4M>C~{IW7dTFxEET9X zxodq9t0s^c(JIRWi&8FQoG4_+#aSi9R|Sma6ad*L&%Tj+9-5+xx@dv+A#HPIZ)!Kg zW?q7o@c#TUHnVgvx}9zE6R3Dl(!U^e3Rbs2EVc~0SBL(cJ5@vD}KMN4-O{fRaj^BO+6Tn%MHbEft{e{M)WW+qS^Ol&5f zv)x;6!p?1O+F$roUE5vatTA;JTX6qN>ln{?G~}Xnu}O6??@@wRCx}n~cq>D(sVr|v zV~HSA8OVG8GK7J*EEHO-iPx z3*hE9JxkI(B5*nu zGigJu^&OgsmA`n%$G`%`hF* zsb@8ycKx~ZR;`BRg^uwu)v=#v`!0qgqnnp{(qa zC+WUFo}UdAbL5jIbpXiqWA_lhfLxd_nwE>%|M}!UN4`_6$Ze{T1uL4-YH}zC^MgEd_$v_eGzj2g+e!d}| z#YX4RAll(IpeDtAkG2=^tR}RGd%ypMjrHE9eQD=;hbL(d8fJg2U>#piWdyp|FLaJX z@eIoi-&EIUJ@)vz^l(kN$$Z$nThsD;eQkHfCkBYlF}unq{y=rDdrQ9WIjaVv$L{35 zn&PP{kt3_R;Q^@icLAKlka+(Jdx7D)N}WV5!%MfVotn*EiwJRUL~*P^LU)g1H4S>4 zrEV+mJs#0*g9?ht&z*T;v(i{D@uD$lK72l8wUZbL2vb@rt6{D9`!MaS`qrhxqRj zxNQ(<8OYG;m3W=6un>t0kW%|M&0fqk2gu38t;M?pap%ULR0D~eqy!6?i)vwr%u|!H zl0+?wu8d=I3D~VSj3T6*fQip|hlR)L#>F88@fu~Ns3pmr8;O^H+hv&CP$rx2= zVHib;^^+1P!Cd=ONzMwlr4gT29>`Y~DNSX#kLk9VcinFXd{I0Xknb6+7#ty87QPO} z7v^v##p5l_^Sdt37^qiYxu5DEcr; zM9Kpb{_-*-Vc}0ewy1bXWd`7&x&6_FLAoXZl@6?X zic2XV-yw9iqkUn-lWrmO`yZ;F7r{UCw489qo8Oj;~BDlzkAlA>VfPlFKlp^ZAZ3 zu#Gpe&KoqH#Wp<8P>8Vy{Ao314btR?0aHumBC~m|cR@TemR}@apt{gWCNQrC0MvhV!XhN&_dj3NH;` zLik(Z3n)j5)I%$%zUlg1w5RSI8hW`9+DF`OypRVN(*q#>u@=8WV;@}G?iQ5}i?DGq zh<19buv;Vxc8TVc9^B>N>Zdkb)Bf3Oi`N5thP(sCc9eIsquWXC$C*VLZz4zw3M0ao z5wAEeLA#zY`L&TGD&)8cJ(9$m(9VyKYqr0lCv+qAHrj`Bh@Z;a)({)5-vKqqa>kEw zki$pY`y0qdNr=c3Q5ITsw~k+XQ)qI$gkjwhMrf!4Xz#4uI4UysF=mfCHv&Yz_P1-P!sEFV}~5cvhQrdH;meDr`+hj)Yf;%GZ5jlgBz zAcfhr0)X}|)*~JFcE`jYUuE8f^>-*7<^mkmY>+^aj4yZZ%>wSjHF_=%!{Qyn6IZN|XqHeEnImP)=4a_`52^h?dn@9C>KdOSnvkS6a*-kJP}eO+gyk&znT z?MTtAGYw<7Gcuo=$|j0RPR;Ukfuv4=K9l}Q`zZ2{>tMZJ1`s0+5&_PGne`ZisH0PS z2i$UIS=)&h`vWY?p`tmB5(RQlM|9X1-~Hls$GI!^T>0OnZ&U8fqChWx7N*8lE2lDH zy-xSbUf_pE$FLj=|}?vz#6 z^=|B%hoATZnBd_N2h`}_`tw?p+cz2$E&H$@^6m=gF$!P^FPE>$iBD}MhtHyQKbb~^ z&E{azjN1I-G>DAlOtX>$p4W4o)Hcn^GG$dp*)ojoy9CzAdYen) zL+9A1rnFbJMi8#-{oaN>7`EA+-8ox1<|zK&Sb1`~YBInSV|<4+SzFOy-F~19cPQ5acKdU}M+9)gPJM8t9HP%ZO<`zuDI&n0wVqm-epzWq`?o$_kuCoqpOGB4>$?_vx zfZzSa3U`4exbX)O>c)H8qS4VUyJohIrpFH%uka?94a=&$GeQ(J=k!&9+K6YFr_^}g zMNijqkwcugCe9m0MF}7;*{t{fy?_}7vV*QR%YW5)xMyv>yJg7EzI8iC9(Q3v-Y~c4 zC@7VnJvAJuqcA(cAV%=_h)!&P&ibj|Fd+!kxfk1JZ}PY3O)X*Jjw9%R`h|%~V7otA z%dWKTo06B`n*zed7&fn@GhDbAO34o9J*s;>Qt>f093CCwr4WA1@k_%0u`#tTo-+)~$=ZK4mpcgwNN(u5zjK!wIF-Ob$JrAf}GGHFm z9dT9oU}!0)P_jMUO)DKL)Tg%u{R|_kTB#(1{_a?_fK~B&i=@ZL>tB+Ox+l(4AHa=e zsKK27@+dWrcPxHX8kC~;6CHYqSpQ(6*=B!emeg@>;tsA&;;j3M)Ki=~u7-n)81#%( z9_4CQFGKl&GA5Tl`$y!{c!y6_skW*x!k^n|uT?{`7=oSb<>{pu5Br}w9OJvGM%|Bf zZe3Ijx*NSJeN{lw5ddS(Dn;MmK`=F~-1H#+fyzc`4x*aCHX6C?ITd9gWe?@%h&V{iuWo)zj(_Arv|wwH2p!RdGDwoH1+6RBoa(V zVfr&D5a0YhGVlK;=fH2zbN`noP?CX6-0v&t983X@^83hi{O`v9g!5Y+{?nZQ#X5e= z<^R<$nb%NpZ15nnbS>bmO>|4i^4_||HIQ8VCC)f|q{=<;}%K%pBq;+at zF)U|(*!k}_=Z&<5x*O-Rhr9ALozi6e?{uXWuvEv#FDZEkJR_9-bpp!x&*^5rpLWz! zW!wa6XF6st1sqM}pKh8RUv_A87;O>fkX<89f7$=?|M5L15~=BrTND1AhbXyv;vovby&-|e7-{j{*$*Hij0#(1%1h2Cvs z(N5tkD*>aH8}~%4rY;rdCc!01anasBQ{`T&_D6vl9UW^2J+d`%qgBXLmax}XTR67NpqDViLYe2U-B|jW482W9@7$7cY6~EAvI=M3nkTupXo`tUx4fmS;_5PNI z;BvSgO7{Glt4oC|WwiXvEz0%zwaG&FoDV2`h&%?;Qz9-o#}5hS3WuG9DQ$m)cdeR_ zU%K(wJi;?@gz7y-f&cF8R;6ebn}c6YqU`K~#NXrmnhx6m*ivq%9iK?z~Gt+BP1!PVz*t+Azi+wA`-GI-V;Iu(g(>$&8(TeGcVG@U%L1bYI z^#s9ky;*6Z<}u|(?D3QBFHSs78uTZGJn^p9PF^G&F<_t$Xz;AgF-E)~H*Vzzv!2r4 zk8))ozOTd9PwnlUprE;$`aBY>f;-~8H+SKB!oc{@%c2Z~bZdFi~AgC~}0 z!)%oSY?Vz{BX70$hN!H~a%1}FR7&CWsT50e?3F@c%>u0(?dA^?CzBu7@9X8AXxWmc z__n|LI|WSnpWEOA+8F4#aPG%nT_W7FV^$@J4VSZ*^Q>VNkj?OB8_Zi*`H`ed2}_|8=8S%y3ef?3{5bl zvL3!wgLb24_LXB2nO!3F`PGwR(N7ihecpRrkpkW@5G?>xmlJ88KDX@rqz3vxC&&b> zuC6w5S4dp=sbf#0e+3e#|j5tw^H<~pb|gk{pD1R@)gD}E?Sz`O;>GD_m|6?%UpwP zsoVS4YvxH;#AOw|=7+vMqXeVNYft!aur5Zs`W0h;W|f~a?(pB}TX+St+M2vdYHcj$BU7MV@3a+cw3gbXO_&fj zeF!$p)%|Ucsh19vvzJr&NgBBGQ}SOUG%JiWV!OgLDVDc!sM&O_5X}$nqqtxiYkFr>NFPcy}_YvSA--g-4aUQ(~I+)yfsvSN+J| zv!HmAseq?a@++C-t-4Re#^Mm)J&~)#4|BXw4^4ao3 z6kO;g6&>$%tqV>FhFh{*XsB`B2WqfF!B)nVekQNK7X0AZ+3(~QHZ?3s+;I_I^Z!=3 zt!`uWNj5BKb11LOMAs3x+L-Ew_JMm7&8gR=nnryc_A{EdY!6>>K5EUxhCEQ;Yx(M5xVY{E=#sFCtYM1V>s0HGv(Mue(G0~3awCyU!r2;Dw8Neaj)W!v9LcZ)vtiEzi{!Rrc zK0NP%(zCAAUf?MmYQf+u5pIq}$WEMXh*Yzm7nKHs@Uo4j4uvjzALO+M&A!{kV^hEr z94_HrlusvxqJx%yy!jozJ%6k3u75&DoxPTODdMM(BNqND>=(HwrGRbVgcju4>%8+ZRZ44v$TwhAI6*A>`d{s;>jYF%78Qdq#P$ zE~n^=DXtjIQh&H!p)}DSTjd-f=s|7lGlx?tvMQP*4IBCfQ-Cf zLfbLjQh_qaLAA-*OK)V#eq%5l<6Xd=6^kemRS9nmHpDeup(nqA+V}0qYt7{s4Arg& z4jSlDzkI-Vq$@RHE2%^x>eZebQ#!?d4Xj+Y-vis*vzpj#-@hw9VVbeC*_iO*RO~lS z>F&kdq6|)j57Mi9G=BkjI%5*Hop}PfLS=zegR$Gg6qhw@`RdxZA7%GVMxD>j=NBF- zouU>LYwGl8LP`hCoU!|suZL=>^UiWL+*=`+`~*%z>@�+aD8rA2SvyK{kp@vw|#< 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 to learn more. + +[discrete] +== Enable span compression + +In some cases, APM agents may collect large amounts of very similar or identical spans in a transaction. +These repeated, similar spans often don't provide added benefit, especially if they are of very short duration. +Span compression takes these similar spans and compresses them into a single span-- +retaining important information but reducing processing and storage overhead. + +See <> to learn more. + +[discrete] +[[observability-apm-reduce-stacktrace]] +== Reduce collected stack trace information + +Elastic APM agents collect `stacktrace` information under certain circumstances. This can be very helpful in identifying issues in your code, but it also comes with an overhead at collection time and increases your storage usage. + +Stack trace collection settings are managed in each APM agent. You can enable and disable this feature, or set specific configuration limits, like the maximum number of stacktrace frames to collect, or the minimum duration of a stacktrace to collect. + +See the relevant {apm-agents-ref}/index.html[{apm-agent} documentation] to learn how to customize stacktrace collection. \ No newline at end of file diff --git a/docs/en/serverless/apm/apm-keep-data-secure.asciidoc b/docs/en/serverless/apm/security/index.asciidoc similarity index 98% rename from docs/en/serverless/apm/apm-keep-data-secure.asciidoc rename to docs/en/serverless/apm/security/index.asciidoc index 75fbb84b15..6953c4f835 100644 --- a/docs/en/serverless/apm/apm-keep-data-secure.asciidoc +++ b/docs/en/serverless/apm/security/index.asciidoc @@ -1,12 +1,12 @@ [[observability-apm-keep-data-secure]] -= Keep APM data secure += Use APM securely // :description: Make sure APM data is sent to Elastic securely and sensitive data is protected. // :keywords: serverless, observability, overview :role: Editor :goal: create and manage API keys -include::../partials/roles.asciidoc[] +include::../../partials/roles.asciidoc[] :role!: :goal!: diff --git a/docs/en/serverless/apm/troubleshooting/index.asciidoc b/docs/en/serverless/apm/troubleshooting/index.asciidoc new file mode 100644 index 0000000000..8253eca808 --- /dev/null +++ b/docs/en/serverless/apm/troubleshooting/index.asciidoc @@ -0,0 +1,81 @@ +[[observability-apm-troubleshooting]] += Troubleshooting + +// :keywords: serverless, observability, reference + +This section provides solutions to common questions and problems. + +[discrete] +[[observability-apm-troubleshooting-common-problems]] +== Common problems + +[discrete] +[[field-limit-exceeded-legacy]] +=== Field limit exceeded + +When adding too many distinct tag keys on a transaction or span, +you risk creating a {ref}/mapping.html#mapping-limit-settings[mapping explosion]. + +For example, you should avoid that user-specified data, +like URL parameters, is used as a tag key. +Likewise, using the current timestamp or a user ID as a tag key is not a good idea. +However, tag **values** with a high cardinality are not a problem. +Just try to keep the number of distinct tag keys at a minimum. + +The symptom of a mapping explosion is that transactions and spans are not indexed anymore after a certain time. Usually, on the next day, +the spans and transactions will be indexed again because a new index is created each day. +But as soon as the field limit is reached, indexing stops again. + +[discrete] +[[observability-apm-troubleshooting-common-response-codes]] +== Common response codes + +[discrete] +[[bad-request]] +=== HTTP 400: Data decoding error / Data validation error + +The most likely cause for this error is using an incompatible version of an {apm-agent}. +See <> to verify compatibility. + +[discrete] +[[event-too-large]] +=== HTTP 400: Event too large + +APM agents communicate with the Managed intake service by sending events in an HTTP request. Each event is sent as its own line in the HTTP request body. If events are too large, you can reduce the size of the events that your APM agents send by: <> or <>. + +[discrete] +[[unauthorized]] +=== HTTP 401: Invalid token + +The API key is invalid. + +[discrete] +[[observability-apm-troubleshooting-related-troubleshooting-resources]] +== Related troubleshooting resources + +For additional help with other APM components, see the links below. +{agent} and each {apm-agent} has its own troubleshooting guide: + +* {fleet-guide}/troubleshooting-intro.html[{fleet} and {agent} troubleshooting] +* {apm-dotnet-ref}/troubleshooting.html[.NET agent troubleshooting] +* {apm-go-ref}/troubleshooting.html[Go agent troubleshooting] +* {apm-java-ref}/trouble-shooting.html[Java agent troubleshooting] +* {apm-node-ref}/troubleshooting.html[Node.js agent troubleshooting] +* {apm-php-ref}/troubleshooting.html[PHP agent troubleshooting] +* {apm-py-ref}/troubleshooting.html[Python agent troubleshooting] +* {apm-ruby-ref}/debugging.html[Ruby agent troubleshooting] + +[discrete] +[[observability-apm-troubleshooting-elastic-support]] +== Elastic Support + +We offer a support experience unlike any other. +Our team of professionals 'speak human and code' and love making your day. +https://www.elastic.co/subscriptions[Learn more about subscriptions]. + +//// +/* ### Discussion forum + +For additional questions and feature requests, +visit our [discussion forum](https://discuss.elastic.co/c/apm). */ +//// diff --git a/docs/en/serverless/apm/apm-ui-errors.asciidoc b/docs/en/serverless/apm/view-and-analyze/drill-down/errors.asciidoc similarity index 100% rename from docs/en/serverless/apm/apm-ui-errors.asciidoc rename to docs/en/serverless/apm/view-and-analyze/drill-down/errors.asciidoc diff --git a/docs/en/serverless/apm/view-and-analyze/drill-down/index.asciidoc b/docs/en/serverless/apm/view-and-analyze/drill-down/index.asciidoc new file mode 100644 index 0000000000..ee84015c8a --- /dev/null +++ b/docs/en/serverless/apm/view-and-analyze/drill-down/index.asciidoc @@ -0,0 +1,26 @@ +[[observability-apm-ui-drill-down]] += Drill down into application data + +++++ +Drill down into data +++++ + +Notice something awry? Select a service or trace and dive deeper with: + +* <> +* <> +* <> +* <> +* <> +* <> + +///////////////// +// Subsections // +///////////////// +include::./transactions.asciidoc[leveloffset=+1] +include::./spans.asciidoc[leveloffset=+1] +include::./errors.asciidoc[leveloffset=+1] +include::./metrics.asciidoc[leveloffset=+1] +include::./infrastructure.asciidoc[leveloffset=+1] +include::./logs.asciidoc[leveloffset=+1] + diff --git a/docs/en/serverless/apm/apm-ui-infrastructure.asciidoc b/docs/en/serverless/apm/view-and-analyze/drill-down/infrastructure.asciidoc similarity index 93% rename from docs/en/serverless/apm/apm-ui-infrastructure.asciidoc rename to docs/en/serverless/apm/view-and-analyze/drill-down/infrastructure.asciidoc index 0111662b16..e1fcfa23eb 100644 --- a/docs/en/serverless/apm/apm-ui-infrastructure.asciidoc +++ b/docs/en/serverless/apm/view-and-analyze/drill-down/infrastructure.asciidoc @@ -4,7 +4,7 @@ // :keywords: serverless, observability, reference :feature: Applications UI Infrastructure -include::../partials/feature-beta.asciidoc[] +include::../../../partials/feature-beta.asciidoc[] :feature!: The **Infrastructure** tab provides information about the containers, pods, and hosts diff --git a/docs/en/serverless/apm/apm-ui-logs.asciidoc b/docs/en/serverless/apm/view-and-analyze/drill-down/logs.asciidoc similarity index 83% rename from docs/en/serverless/apm/apm-ui-logs.asciidoc rename to docs/en/serverless/apm/view-and-analyze/drill-down/logs.asciidoc index be8bb597f1..b767217b07 100644 --- a/docs/en/serverless/apm/apm-ui-logs.asciidoc +++ b/docs/en/serverless/apm/view-and-analyze/drill-down/logs.asciidoc @@ -5,7 +5,7 @@ The **Logs** tab shows contextual logs for the selected service. -include::../transclusion/kibana/logs/log-overview.asciidoc[] +include::../../../transclusion/kibana/logs/log-overview.asciidoc[] [role="screenshot"] image::images/logs/logs.png[Example view of the Logs tab in the Applications UI] diff --git a/docs/en/serverless/apm/apm-ui-metrics.asciidoc b/docs/en/serverless/apm/view-and-analyze/drill-down/metrics.asciidoc similarity index 100% rename from docs/en/serverless/apm/apm-ui-metrics.asciidoc rename to docs/en/serverless/apm/view-and-analyze/drill-down/metrics.asciidoc diff --git a/docs/en/serverless/apm/apm-ui-trace-sample-timeline.asciidoc b/docs/en/serverless/apm/view-and-analyze/drill-down/spans.asciidoc similarity index 100% rename from docs/en/serverless/apm/apm-ui-trace-sample-timeline.asciidoc rename to docs/en/serverless/apm/view-and-analyze/drill-down/spans.asciidoc diff --git a/docs/en/serverless/apm/apm-ui-transactions.asciidoc b/docs/en/serverless/apm/view-and-analyze/drill-down/transactions.asciidoc similarity index 99% rename from docs/en/serverless/apm/apm-ui-transactions.asciidoc rename to docs/en/serverless/apm/view-and-analyze/drill-down/transactions.asciidoc index 690eca5aeb..325a0fb6b6 100644 --- a/docs/en/serverless/apm/apm-ui-transactions.asciidoc +++ b/docs/en/serverless/apm/view-and-analyze/drill-down/transactions.asciidoc @@ -156,7 +156,7 @@ This means you can select "Actions - View transaction in Discover" to see the ac The **Logs** tab displays logs related to the sampled trace. -include::../transclusion/kibana/logs/log-overview.asciidoc[] +include::../../../transclusion/kibana/logs/log-overview.asciidoc[] [role="screenshot"] image::images/transactions/apm-logs-tab.png[APM logs tab] diff --git a/docs/en/serverless/apm/apm-query-your-data.asciidoc b/docs/en/serverless/apm/view-and-analyze/filter-and-search/advanced-queries.asciidoc similarity index 97% rename from docs/en/serverless/apm/apm-query-your-data.asciidoc rename to docs/en/serverless/apm/view-and-analyze/filter-and-search/advanced-queries.asciidoc index 9d6081f3c7..662066152a 100644 --- a/docs/en/serverless/apm/apm-query-your-data.asciidoc +++ b/docs/en/serverless/apm/view-and-analyze/filter-and-search/advanced-queries.asciidoc @@ -1,8 +1,12 @@ [[observability-apm-query-your-data]] -= Query your data += Use advanced queries on your application data // :keywords: serverless, observability, how-to +++++ +Advanced queries +++++ + Querying your APM data is an essential tool that can make finding bottlenecks in your code even more straightforward. Using the query bar, a powerful data query feature, you can pass advanced queries on your data diff --git a/docs/en/serverless/apm/apm-filter-your-data.asciidoc b/docs/en/serverless/apm/view-and-analyze/filter-and-search/filters.asciidoc similarity index 96% rename from docs/en/serverless/apm/apm-filter-your-data.asciidoc rename to docs/en/serverless/apm/view-and-analyze/filter-and-search/filters.asciidoc index 5ddfd1f200..ef53bc385f 100644 --- a/docs/en/serverless/apm/apm-filter-your-data.asciidoc +++ b/docs/en/serverless/apm/view-and-analyze/filter-and-search/filters.asciidoc @@ -1,8 +1,12 @@ [[observability-apm-filter-your-data]] -= Filter your data += Filter application data // :keywords: serverless, observability, how-to +++++ +Filters +++++ + Global filters are ways you can filter your APM data based on a specific time range or environment. When viewing a specific service, the filter persists as you move between tabs. diff --git a/docs/en/serverless/apm/view-and-analyze/filter-and-search/index.asciidoc b/docs/en/serverless/apm/view-and-analyze/filter-and-search/index.asciidoc new file mode 100644 index 0000000000..d9183db839 --- /dev/null +++ b/docs/en/serverless/apm/view-and-analyze/filter-and-search/index.asciidoc @@ -0,0 +1,19 @@ +[[observability-apm-filter-and-search-data]] += Filter and search application data + +++++ +Filter and search data +++++ + +Because Elastic APM is built on top of the {stack}, you have the full power of Elastic's powerful +search capabilities to filter and search through your application data. Mastering how to filter and +search your data can help you find bottlenecks in your code faster: + +* Use global filters to <> across the Applications UI based on a specific time range or environment. +* Use <> on your data to filter on specific pieces of information. + +///////////////// +// Subsections // +///////////////// +include::./filters.asciidoc[leveloffset=+1] +include::./advanced-queries.asciidoc[leveloffset=+1] diff --git a/docs/en/serverless/apm/view-and-analyze/index.asciidoc b/docs/en/serverless/apm/view-and-analyze/index.asciidoc new file mode 100644 index 0000000000..5812065032 --- /dev/null +++ b/docs/en/serverless/apm/view-and-analyze/index.asciidoc @@ -0,0 +1,41 @@ +[[observability-apm-view-and-analyze-traces]] += View and analyze data + +After you've started <>, +you can open the Applications UI in {kib} to view your data in a variety of visualizations and +start analyzing data. + +The Applications UI allows you to monitor your software services and applications in real-time. +You can visualize detailed performance information on your services, +identify and analyze errors, +and monitor host-level and APM agent-specific metrics like JVM and Go runtime metrics. + +Having access to application-level insights with just a few clicks can drastically decrease the time you spend +debugging errors, slow response times, and crashes. + +For example, you can see information about response times, requests per minute, and status codes per endpoint. +You can even dive into a specific request sample and get a complete waterfall view of what your application is spending its time on. +You might see that your bottlenecks are in database queries, cache calls, or external requests. +For each incoming request and each application error, +you can also see contextual information such as the request header, user information, +system values, or custom data that you manually attached to the request. + +To get started with the Applications UI: + +* Start with quick, high-level <> that show you the overall health and performance of + your application. +* <> for specific services or traces to get additional insight into + your application. +* Learn how to get the most out of your data by mastering how to <> + in {kib}, getting tips on <>, and taking advantage of + <>. + +///////////////// +// Subsections // +///////////////// +include::./ui-overview/index.asciidoc[leveloffset=+1] +include::./drill-down/index.asciidoc[leveloffset=+1] +include::./filter-and-search/index.asciidoc[leveloffset=+1] +include::./interpret/index.asciidoc[leveloffset=+1] +include::./machine-learning.asciidoc[leveloffset=+1] +include::./settings.asciidoc[leveloffset=+1] \ No newline at end of file diff --git a/docs/en/serverless/apm/apm-find-transaction-latency-and-failure-correlations.asciidoc b/docs/en/serverless/apm/view-and-analyze/interpret/correlations.asciidoc similarity index 100% rename from docs/en/serverless/apm/apm-find-transaction-latency-and-failure-correlations.asciidoc rename to docs/en/serverless/apm/view-and-analyze/interpret/correlations.asciidoc diff --git a/docs/en/serverless/apm/apm-track-deployments-with-annotations.asciidoc b/docs/en/serverless/apm/view-and-analyze/interpret/deployment-annotations.asciidoc similarity index 97% rename from docs/en/serverless/apm/apm-track-deployments-with-annotations.asciidoc rename to docs/en/serverless/apm/view-and-analyze/interpret/deployment-annotations.asciidoc index 907abb245d..540a83a643 100644 --- a/docs/en/serverless/apm/apm-track-deployments-with-annotations.asciidoc +++ b/docs/en/serverless/apm/view-and-analyze/interpret/deployment-annotations.asciidoc @@ -5,7 +5,7 @@ :role: Admin :goal: create and manage annotations -include::../partials/roles.asciidoc[] +include::../../../partials/roles.asciidoc[] :role!: :goal!: diff --git a/docs/en/serverless/apm/view-and-analyze/interpret/index.asciidoc b/docs/en/serverless/apm/view-and-analyze/interpret/index.asciidoc new file mode 100644 index 0000000000..dc7ce39aaa --- /dev/null +++ b/docs/en/serverless/apm/view-and-analyze/interpret/index.asciidoc @@ -0,0 +1,28 @@ +[[observability-apm-interpret-data]] += Interpret application data + +++++ +Interpret data +++++ + +Learn how to get the most out of your data using the Applications UI. + +[cols="1,1"] +|=== +| <> +| Surface characteristics of your data that are potentially correlated with high-latency or erroneous transactions. + +| <> +| Annotations enable you to easily determine if your deployment has increased response times for an end-user or if the memory/CPU footprint of your application has changed. + +| <> +| Learn how your AWS Lambda functions relate to and depend on other services, and get insight into function execution and runtime behavior, like lambda duration, cold start rate, cold start duration, compute usage, memory usage, and more. + +|=== + +///////////////// +// Subsections // +///////////////// +include::./correlations.asciidoc[leveloffset=+1] +include::./deployment-annotations.asciidoc[leveloffset=+1] +include::./lambda.asciidoc[leveloffset=+1] diff --git a/docs/en/serverless/apm/apm-observe-lambda-functions.asciidoc b/docs/en/serverless/apm/view-and-analyze/interpret/lambda.asciidoc similarity index 100% rename from docs/en/serverless/apm/apm-observe-lambda-functions.asciidoc rename to docs/en/serverless/apm/view-and-analyze/interpret/lambda.asciidoc diff --git a/docs/en/serverless/apm/apm-integrate-with-machine-learning.asciidoc b/docs/en/serverless/apm/view-and-analyze/machine-learning.asciidoc similarity index 100% rename from docs/en/serverless/apm/apm-integrate-with-machine-learning.asciidoc rename to docs/en/serverless/apm/view-and-analyze/machine-learning.asciidoc diff --git a/docs/en/serverless/apm/apm-kibana-settings.asciidoc b/docs/en/serverless/apm/view-and-analyze/settings.asciidoc similarity index 96% rename from docs/en/serverless/apm/apm-kibana-settings.asciidoc rename to docs/en/serverless/apm/view-and-analyze/settings.asciidoc index 61b13c0e0b..51ef7776ab 100644 --- a/docs/en/serverless/apm/apm-kibana-settings.asciidoc +++ b/docs/en/serverless/apm/view-and-analyze/settings.asciidoc @@ -1,11 +1,15 @@ [[observability-apm-kibana-settings]] -= Settings += Applications UI settings // :keywords: serverless, observability, reference +++++ +Settings +++++ + :role: Editor :goal: modify settings -include::../partials/roles.asciidoc[] +include::../../partials/roles.asciidoc[] :role!: :goal!: diff --git a/docs/en/serverless/apm/apm-ui-dependencies.asciidoc b/docs/en/serverless/apm/view-and-analyze/ui-overview/dependencies.asciidoc similarity index 98% rename from docs/en/serverless/apm/apm-ui-dependencies.asciidoc rename to docs/en/serverless/apm/view-and-analyze/ui-overview/dependencies.asciidoc index df5ed22044..c2eb7b410c 100644 --- a/docs/en/serverless/apm/apm-ui-dependencies.asciidoc +++ b/docs/en/serverless/apm/view-and-analyze/ui-overview/dependencies.asciidoc @@ -37,7 +37,7 @@ impacted services to determine why that pattern change has occurred. == Operations :feature: Dependency operations -include::../partials/feature-beta.asciidoc[] +include::../../../partials/feature-beta.asciidoc[] :feature!: **Dependency operations** provides a granular breakdown of the operations/queries a dependency is executing. diff --git a/docs/en/serverless/apm/apm-ui-overview.asciidoc b/docs/en/serverless/apm/view-and-analyze/ui-overview/index.asciidoc similarity index 55% rename from docs/en/serverless/apm/apm-ui-overview.asciidoc rename to docs/en/serverless/apm/view-and-analyze/ui-overview/index.asciidoc index 4fba1337dd..d4bfcb3f72 100644 --- a/docs/en/serverless/apm/apm-ui-overview.asciidoc +++ b/docs/en/serverless/apm/view-and-analyze/ui-overview/index.asciidoc @@ -1,5 +1,5 @@ [[observability-apm-ui-overview]] -= Navigate the Applications UI += Overviews // :description: Learn how to navigate the Applications UI. // :keywords: serverless, observability, reference @@ -11,13 +11,13 @@ start with: * <> * <> * <> - -Notice something awry? Select a service or trace and dive deeper with: - * <> -* <> -* <> -* <> -* <> -* <> -* <> + +///////////////// +// Subsections // +///////////////// +include::./services.asciidoc[leveloffset=+1] +include::./traces.asciidoc[leveloffset=+1] +include::./dependencies.asciidoc[leveloffset=+1] +include::./service-map.asciidoc[leveloffset=+1] +include::./service-overview.asciidoc[leveloffset=+1] diff --git a/docs/en/serverless/apm/apm-ui-service-map.asciidoc b/docs/en/serverless/apm/view-and-analyze/ui-overview/service-map.asciidoc similarity index 100% rename from docs/en/serverless/apm/apm-ui-service-map.asciidoc rename to docs/en/serverless/apm/view-and-analyze/ui-overview/service-map.asciidoc diff --git a/docs/en/serverless/apm/apm-ui-service-overview.asciidoc b/docs/en/serverless/apm/view-and-analyze/ui-overview/service-overview.asciidoc similarity index 95% rename from docs/en/serverless/apm/apm-ui-service-overview.asciidoc rename to docs/en/serverless/apm/view-and-analyze/ui-overview/service-overview.asciidoc index d729346df1..dfe540b74f 100644 --- a/docs/en/serverless/apm/apm-ui-service-overview.asciidoc +++ b/docs/en/serverless/apm/view-and-analyze/ui-overview/service-overview.asciidoc @@ -59,13 +59,13 @@ image::images/services/latency.png[Service latency] [[observability-apm-service-overview-throughput-and-transactions]] == Throughput and transactions -include::../transclusion/kibana/apm/service-overview/throughput-transactions.asciidoc[] +include::../../../transclusion/kibana/apm/service-overview/throughput-transactions.asciidoc[] [discrete] [[observability-apm-service-overview-failed-transaction-rate-and-errors]] == Failed transaction rate and errors -include::../transclusion/kibana/apm/service-overview/ftr.asciidoc[] +include::../../../transclusion/kibana/apm/service-overview/ftr.asciidoc[] The **Errors** table provides a high-level view of each error message when it first and last occurred, along with the total number of occurrences. This makes it very easy to quickly see which errors affect @@ -84,7 +84,7 @@ chart indicates that something was happening within the application. This could agent does not have auto-instrumentation for whatever was happening during that time or that the time was spent in the application code and not in database or external requests. -include::../transclusion/kibana/apm/service-overview/dependencies.asciidoc[] +include::../../../transclusion/kibana/apm/service-overview/dependencies.asciidoc[] [discrete] [[observability-apm-service-overview-cold-start-rate]] diff --git a/docs/en/serverless/apm/apm-ui-services.asciidoc b/docs/en/serverless/apm/view-and-analyze/ui-overview/services.asciidoc similarity index 96% rename from docs/en/serverless/apm/apm-ui-services.asciidoc rename to docs/en/serverless/apm/view-and-analyze/ui-overview/services.asciidoc index 9644d526ee..fb47df6ede 100644 --- a/docs/en/serverless/apm/apm-ui-services.asciidoc +++ b/docs/en/serverless/apm/view-and-analyze/ui-overview/services.asciidoc @@ -22,13 +22,13 @@ image::images/services/apm-services-overview.png[Example view of services table :role: Editor :goal: create and manage service groups -include::../partials/roles.asciidoc[] +include::../../../partials/roles.asciidoc[] :role!: :goal!: :feature: Service grouping -include::../partials/feature-beta.asciidoc[] +include::../../../partials/feature-beta.asciidoc[] :feature!: Group services together to build meaningful views that remove noise, simplify investigations across services, diff --git a/docs/en/serverless/apm/apm-ui-traces.asciidoc b/docs/en/serverless/apm/view-and-analyze/ui-overview/traces.asciidoc similarity index 100% rename from docs/en/serverless/apm/apm-ui-traces.asciidoc rename to docs/en/serverless/apm/view-and-analyze/ui-overview/traces.asciidoc diff --git a/docs/en/serverless/index.asciidoc b/docs/en/serverless/index.asciidoc index 908c8a6b84..1b1b5743d2 100644 --- a/docs/en/serverless/index.asciidoc +++ b/docs/en/serverless/index.asciidoc @@ -35,46 +35,6 @@ include::./application-and-service-monitoring.asciidoc[leveloffset=+2] // APM include::./apm/apm.asciidoc[leveloffset=+3] -include::./apm/apm-get-started.asciidoc[leveloffset=+4] -include::./apm/apm-send-traces-to-elastic.asciidoc[leveloffset=+4] -include::./apm-agents/apm-agents-elastic-apm-agents.asciidoc[leveloffset=+5] -include::./apm-agents/apm-agents-opentelemetry.asciidoc[leveloffset=+5] -include::./apm-agents/apm-agents-opentelemetry-opentelemetry-native-support.asciidoc[leveloffset=+6] -include::./apm-agents/apm-agents-opentelemetry-collect-metrics.asciidoc[leveloffset=+6] -include::./apm-agents/apm-agents-opentelemetry-limitations.asciidoc[leveloffset=+6] -include::./apm-agents/apm-agents-opentelemetry-resource-attributes.asciidoc[leveloffset=+6] -include::./apm-agents/apm-agents-aws-lambda-functions.asciidoc[leveloffset=+5] -include::./apm/apm-view-and-analyze-traces.asciidoc[leveloffset=+4] -include::./apm/apm-find-transaction-latency-and-failure-correlations.asciidoc[leveloffset=+5] -include::./apm/apm-integrate-with-machine-learning.asciidoc[leveloffset=+5] -include::./apm/apm-create-custom-links.asciidoc[leveloffset=+5] -include::./apm/apm-track-deployments-with-annotations.asciidoc[leveloffset=+5] -include::./apm/apm-query-your-data.asciidoc[leveloffset=+5] -include::./apm/apm-filter-your-data.asciidoc[leveloffset=+5] -include::./apm/apm-observe-lambda-functions.asciidoc[leveloffset=+5] -include::./apm/apm-ui-overview.asciidoc[leveloffset=+5] -include::./apm/apm-ui-services.asciidoc[leveloffset=+6] -include::./apm/apm-ui-traces.asciidoc[leveloffset=+6] -include::./apm/apm-ui-dependencies.asciidoc[leveloffset=+6] -include::./apm/apm-ui-service-map.asciidoc[leveloffset=+6] -include::./apm/apm-ui-service-overview.asciidoc[leveloffset=+6] -include::./apm/apm-ui-transactions.asciidoc[leveloffset=+6] -include::./apm/apm-ui-trace-sample-timeline.asciidoc[leveloffset=+6] -include::./apm/apm-ui-errors.asciidoc[leveloffset=+6] -include::./apm/apm-ui-metrics.asciidoc[leveloffset=+6] -include::./apm/apm-ui-infrastructure.asciidoc[leveloffset=+6] -include::./apm/apm-ui-logs.asciidoc[leveloffset=+6] -include::./apm/apm-data-types.asciidoc[leveloffset=+4] -include::./apm/apm-distributed-tracing.asciidoc[leveloffset=+4] -include::./apm/apm-reduce-your-data-usage.asciidoc[leveloffset=+4] -include::./apm/apm-transaction-sampling.asciidoc[leveloffset=+5] -include::./apm/apm-compress-spans.asciidoc[leveloffset=+5] -include::./apm/apm-stacktrace-collection.asciidoc[leveloffset=+5] -include::./apm/apm-keep-data-secure.asciidoc[leveloffset=+4] -include::./apm/apm-troubleshooting.asciidoc[leveloffset=+4] -include::./apm/apm-reference.asciidoc[leveloffset=+4] -include::./apm/apm-kibana-settings.asciidoc[leveloffset=+5] -include::./apm/apm-server-api.asciidoc[leveloffset=+5] // Synthetics include::./synthetics/synthetics-intro.asciidoc[leveloffset=+3] diff --git a/docs/en/serverless/infra-monitoring/analyze-hosts.asciidoc b/docs/en/serverless/infra-monitoring/analyze-hosts.asciidoc index efa194b710..c2b9ab5f3a 100644 --- a/docs/en/serverless/infra-monitoring/analyze-hosts.asciidoc +++ b/docs/en/serverless/infra-monitoring/analyze-hosts.asciidoc @@ -314,5 +314,5 @@ Instead, the host name might be the container name or the Kubernetes pod name. // How to fix it -To get the correct host name, you need to set some additional configuration options, -specifically `system.kubernetes.node.name` as described in <>. +// To get the correct host name, you need to set some additional configuration options, +// specifically `system.kubernetes.node.name` as described in <>. diff --git a/docs/en/serverless/redirects.asciidoc b/docs/en/serverless/redirects.asciidoc index 8c9bffd8b7..d5abbf6f49 100644 --- a/docs/en/serverless/redirects.asciidoc +++ b/docs/en/serverless/redirects.asciidoc @@ -12,3 +12,16 @@ Refer to <>. === AIOps Refer to <>. + +[role="exclude",id="observability-apm-stacktrace-collection"] +=== Stacktrace collection + +// :description: Reduce data storage and costs by reducing stacktrace collection +// :keywords: serverless, observability, how-to + +Refer to <>. + +[role="exclude",id="observability-apm-reference"] +=== Reference + +Refer to <>. From 75a4fa7272c559aacb866ed01fe731733ccf90cf Mon Sep 17 00:00:00 2001 From: Colleen McGinnis Date: Fri, 6 Dec 2024 14:07:45 -0600 Subject: [PATCH 2/4] apply suggestions from code review Co-authored-by: DeDe Morton --- docs/en/serverless/apm/data-model/index.asciidoc | 4 ++-- docs/en/serverless/apm/view-and-analyze/index.asciidoc | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/en/serverless/apm/data-model/index.asciidoc b/docs/en/serverless/apm/data-model/index.asciidoc index 3fd73b8868..c4b2c6bfac 100644 --- a/docs/en/serverless/apm/data-model/index.asciidoc +++ b/docs/en/serverless/apm/data-model/index.asciidoc @@ -17,8 +17,8 @@ Explain how the different data types relate to each other at a high level Elastic APM helps you see what happens from start to finish when a request is made to an application: -* *Spans*: A span contain information about the execution of a specific code path. - They are the building blocks of _transactions_ and _traces_. +* *Spans*: A span contains information about the execution of a specific code path. + Spans are the building blocks of _transactions_ and _traces_. * *Transactions*: A transaction describes an event captured by an Elastic APM agent instrumenting a service. A transaction is technically a type of span that has additional attributes associated with it and often contains multiple child _spans_. You can think of transactions diff --git a/docs/en/serverless/apm/view-and-analyze/index.asciidoc b/docs/en/serverless/apm/view-and-analyze/index.asciidoc index 5812065032..8f1d5788fe 100644 --- a/docs/en/serverless/apm/view-and-analyze/index.asciidoc +++ b/docs/en/serverless/apm/view-and-analyze/index.asciidoc @@ -2,7 +2,7 @@ = View and analyze data After you've started <>, -you can open the Applications UI in {kib} to view your data in a variety of visualizations and +you can open the Applications UI to view your data in a variety of visualizations and start analyzing data. The Applications UI allows you to monitor your software services and applications in real-time. @@ -26,8 +26,8 @@ To get started with the Applications UI: your application. * <> for specific services or traces to get additional insight into your application. -* Learn how to get the most out of your data by mastering how to <> - in {kib}, getting tips on <>, and taking advantage of +* Learn how to get the most out of your data by mastering how to <>, + getting tips on <>, and taking advantage of <>. ///////////////// From 5e5acb35ebceeedee7020650d4effa5b233caadb Mon Sep 17 00:00:00 2001 From: Colleen McGinnis Date: Fri, 6 Dec 2024 14:20:44 -0600 Subject: [PATCH 3/4] remove commented out content --- docs/en/serverless/apm/manage-storage/index.asciidoc | 7 ------- 1 file changed, 7 deletions(-) diff --git a/docs/en/serverless/apm/manage-storage/index.asciidoc b/docs/en/serverless/apm/manage-storage/index.asciidoc index 16e5ede009..ccc12261af 100644 --- a/docs/en/serverless/apm/manage-storage/index.asciidoc +++ b/docs/en/serverless/apm/manage-storage/index.asciidoc @@ -5,13 +5,6 @@ The richness and volume of APM data provides unique insights into your applicati also mean higher costs and more noise when analyzing data. There are a couple strategies you can use to reduce your data usage while continuing to get the full value of APM data. -// The amount of storage for APM data depends on several factors: -// the number of services you are instrumenting, how much traffic the services see, agent and server settings, -// and the length of time you store your data. - -// Here are some ways you can reduce either the amount of APM data you're ingesting -// or the amount of data you're retaining. - [discrete] [[observability-apm-reduce-sample-rate]] == Reduce the sample rate From 821034112b8d3aa241dd4595690ae6eda4b187bb Mon Sep 17 00:00:00 2001 From: Colleen McGinnis Date: Fri, 6 Dec 2024 14:29:29 -0600 Subject: [PATCH 4/4] update link --- docs/en/serverless/infra-monitoring/analyze-hosts.asciidoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/serverless/infra-monitoring/analyze-hosts.asciidoc b/docs/en/serverless/infra-monitoring/analyze-hosts.asciidoc index c2b9ab5f3a..d23458d7c2 100644 --- a/docs/en/serverless/infra-monitoring/analyze-hosts.asciidoc +++ b/docs/en/serverless/infra-monitoring/analyze-hosts.asciidoc @@ -314,5 +314,5 @@ Instead, the host name might be the container name or the Kubernetes pod name. // How to fix it -// To get the correct host name, you need to set some additional configuration options, -// specifically `system.kubernetes.node.name` as described in <>. +To get the correct host name, you need to set some additional configuration options, +specifically `system.kubernetes.node.name` as described in <>.