diff --git a/docs/agent-configuration.asciidoc b/docs/agent-configuration.asciidoc index 734aa3b2ab4..950bfc6bf2e 100644 --- a/docs/agent-configuration.asciidoc +++ b/docs/agent-configuration.asciidoc @@ -1,4 +1,4 @@ -[[agent-configuration-api]] +[id="agent-configuration-api",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/api-config.html"] == Agent configuration API ++++ diff --git a/docs/api-keys.asciidoc b/docs/api-keys.asciidoc index fe06a7a8494..9d5f34b535d 100644 --- a/docs/api-keys.asciidoc +++ b/docs/api-keys.asciidoc @@ -1,5 +1,5 @@ [role="xpack"] -[[beats-api-keys]] +[id="beats-api-keys",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/api-key.html"] == Grant access using API keys Instead of using usernames and passwords, you can use API keys to grant diff --git a/docs/apm-package/apm-integration.asciidoc b/docs/apm-package/apm-integration.asciidoc index c1e624a0398..8b92e6388b2 100644 --- a/docs/apm-package/apm-integration.asciidoc +++ b/docs/apm-package/apm-integration.asciidoc @@ -1,4 +1,4 @@ -[[apm-integration]] +[id="apm-integration",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/upgrade-to-apm-integration.html"] = APM integration for {agent} ++++ diff --git a/docs/apm-package/configure.asciidoc b/docs/apm-package/configure.asciidoc index fa17dd7d226..431f7db7096 100644 --- a/docs/apm-package/configure.asciidoc +++ b/docs/apm-package/configure.asciidoc @@ -11,7 +11,7 @@ Templates, pipelines, index lifecycle management, etc., cannot be configured with APM Server or Fleet, and must instead be configured in {kib} or with {es} APIs. -[[apm-integration-templates]] +[id="apm-integration-templates",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/custom-index-template.html"] === Index templates The APM integration loads default index templates into {es}. @@ -22,7 +22,7 @@ Search for `apm`. See {ref}/index-templates.html[index templates] for more information. -[[apm-integration-pipelines]] +[id="apm-integration-pipelines",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/ingest-pipelines.html"] === Pipelines The APM integration loads default ingest node pipelines into {es}. @@ -33,7 +33,7 @@ Search for `apm`. See {ref}/ingest.html[ingest node pipelines] for more information. -[[apm-integration-ilm]] +[id="apm-integration-ilm",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/ilm-how-to.html"] === Index lifecycle management (ILM) The index lifecycle management (ILM) feature in {es} allows you to automate the diff --git a/docs/apm-package/data-streams.asciidoc b/docs/apm-package/data-streams.asciidoc index e271c2f2dbd..252f55d0df3 100644 --- a/docs/apm-package/data-streams.asciidoc +++ b/docs/apm-package/data-streams.asciidoc @@ -1,4 +1,4 @@ -[[apm-integration-data-streams]] +[id="apm-integration-data-streams",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/apm-data-streams.html"] == Data streams **** diff --git a/docs/apm-package/input-apm.asciidoc b/docs/apm-package/input-apm.asciidoc index d1e47cd58cb..ac5a44c16dd 100644 --- a/docs/apm-package/input-apm.asciidoc +++ b/docs/apm-package/input-apm.asciidoc @@ -1,6 +1,6 @@ :input-type: apm -[[input-apm]] +[id="input-apm",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/input-apm.html"] == APM input settings ++++ diff --git a/docs/breaking-changes.asciidoc b/docs/breaking-changes.asciidoc index d7f1db92e8a..9573cf96ba7 100644 --- a/docs/breaking-changes.asciidoc +++ b/docs/breaking-changes.asciidoc @@ -1,7 +1,7 @@ :issue: https://github.com/elastic/apm-server/issues/ :pull: https://github.com/elastic/apm-server/pull/ -[[breaking-changes]] +[id="breaking-changes",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/apm-breaking.html"] == Breaking Changes APM Server is built on top of {beats-ref}/index.html[libbeat]. As such, any breaking change in libbeat is also considered to be a breaking change in APM Server. diff --git a/docs/configuration-anonymous.asciidoc b/docs/configuration-anonymous.asciidoc index 9871a1b2b6e..bbafd663994 100644 --- a/docs/configuration-anonymous.asciidoc +++ b/docs/configuration-anonymous.asciidoc @@ -1,4 +1,4 @@ -[[configuration-anonymous]] +[id="configuration-anonymous",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/anonymous-auth.html"] == Anonymous auth configuration options ++++ diff --git a/docs/configuring.asciidoc b/docs/configuring.asciidoc index 10ba3e373c4..2d09351c1bf 100644 --- a/docs/configuring.asciidoc +++ b/docs/configuring.asciidoc @@ -1,4 +1,4 @@ -[[configuring-howto-apm-server]] +[id="configuring-howto-apm-server",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/configuring-howto-apm-server.html"] = Configure APM Server [partintro] diff --git a/docs/error-api.asciidoc b/docs/error-api.asciidoc index ae6af959ff1..d3e98ac3e68 100644 --- a/docs/error-api.asciidoc +++ b/docs/error-api.asciidoc @@ -1,4 +1,4 @@ -[[error-api]] +[id="error-api",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/api-error.html"] === Errors An error or a logged error message captured by an agent occurring in a monitored service. diff --git a/docs/events-api.asciidoc b/docs/events-api.asciidoc index 70493849faa..5fe0f0b1a49 100644 --- a/docs/events-api.asciidoc +++ b/docs/events-api.asciidoc @@ -1,4 +1,4 @@ -[[events-api]] +[id="events-api",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/api-events.html"] == Events Intake API ++++ diff --git a/docs/getting-started-apm-server.asciidoc b/docs/getting-started-apm-server.asciidoc index ef1edd4f6b1..1b254d1e562 100644 --- a/docs/getting-started-apm-server.asciidoc +++ b/docs/getting-started-apm-server.asciidoc @@ -1,4 +1,4 @@ -[[getting-started-apm-server]] +[id="getting-started-apm-server",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/apm-quick-start.html"] == Getting started with APM Server ++++ diff --git a/docs/guide/agent-server-compatibility.asciidoc b/docs/guide/agent-server-compatibility.asciidoc index f8c94a425c3..0c4607717d4 100644 --- a/docs/guide/agent-server-compatibility.asciidoc +++ b/docs/guide/agent-server-compatibility.asciidoc @@ -1,4 +1,4 @@ -[[agent-server-compatibility]] +[id="agent-server-compatibility",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/agent-server-compatibility.html"] == Agent and Server compatibility The chart below outlines the compatibility between different versions of the APM agents and the APM Server. diff --git a/docs/guide/apm-breaking-changes.asciidoc b/docs/guide/apm-breaking-changes.asciidoc index ceba614eb0f..d76a34ac13a 100644 --- a/docs/guide/apm-breaking-changes.asciidoc +++ b/docs/guide/apm-breaking-changes.asciidoc @@ -1,7 +1,7 @@ :issue: https://github.com/elastic/apm-server/issues/ :pull: https://github.com/elastic/apm-server/pull/ -[[apm-breaking-changes]] +[id="apm-breaking-changes",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/apm-breaking.html"] == Breaking changes This section discusses the changes that you need to be aware of when migrating your application from one version of APM to another. diff --git a/docs/guide/apm-data-model.asciidoc b/docs/guide/apm-data-model.asciidoc index 130cced9f5e..3e8b52196c5 100644 --- a/docs/guide/apm-data-model.asciidoc +++ b/docs/guide/apm-data-model.asciidoc @@ -1,4 +1,4 @@ -[[apm-data-model]] +[id="apm-data-model",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/data-model.html"] == Data Model Elastic APM agents capture different types of information from within their instrumented applications. @@ -11,7 +11,7 @@ These are known as events, and can be `spans`, `transactions`, `errors`, or `met Events can contain additional <> which further enriches your data. -[[transaction-spans]] +[id="transaction-spans",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/data-model-spans.html"] === Spans *Spans* contain information about the execution of a specific code path. @@ -68,7 +68,7 @@ Agents know how many spans a transaction should have; if the number of expected spans does not equal the number of spans received by the APM Server, the APM app will calculate the difference and display a message. -[[transactions]] +[id="transactions",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/data-model-transactions.html"] === Transactions *Transactions* are a special kind of <> that have additional attributes associated with them. @@ -118,7 +118,7 @@ non-keyword fields (e.g. `span.db.statement`) to 10,000 characters. Transactions are stored in {apm-server-ref-v}/transaction-indices.html[transaction indices]. -[[errors]] +[id="errors",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/data-model-errors.html"] === Errors An error event contains at least @@ -148,7 +148,7 @@ non-keyword fields (e.g. `error.exception.message`) to 10,000 characters. Errors are stored in {apm-server-ref-v}/error-indices.html[error indices]. -[[metrics]] +[id="metrics",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/data-model-metrics.html"] === Metrics APM agents automatically pick up basic host-level metrics, @@ -176,7 +176,7 @@ For a full list of tracked metrics, see the relevant agent documentation: * {apm-ruby-ref-v}/metrics.html[Ruby] // This heading is linked to from the APM UI section in Kibana -[[metadata]] +[id="metadata",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/data-model-metadata.html"] === Metadata Metadata can enrich your events and make application performance monitoring even more useful. diff --git a/docs/guide/apm-doc-directory.asciidoc b/docs/guide/apm-doc-directory.asciidoc index cd368843bfc..f8bcc56b6d8 100644 --- a/docs/guide/apm-doc-directory.asciidoc +++ b/docs/guide/apm-doc-directory.asciidoc @@ -1,4 +1,4 @@ -[[components]] +[id="components",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/apm-components.html"] === Components and documentation Elastic APM consists of four components: *APM agents*, *APM Server*, *Elasticsearch*, and *Kibana*. diff --git a/docs/guide/cross-cluster-search.asciidoc b/docs/guide/cross-cluster-search.asciidoc index 7039be7dcda..63c78a4813d 100644 --- a/docs/guide/cross-cluster-search.asciidoc +++ b/docs/guide/cross-cluster-search.asciidoc @@ -1,4 +1,4 @@ -[[apm-cross-cluster-search]] +[id="apm-cross-cluster-search",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/cross-cluster-search.html"] === Cross-cluster search Elastic APM utilizes Elasticsearch's cross-cluster search functionality. diff --git a/docs/guide/data-security.asciidoc b/docs/guide/data-security.asciidoc index d9c4dc736eb..9bf8fd7745c 100644 --- a/docs/guide/data-security.asciidoc +++ b/docs/guide/data-security.asciidoc @@ -1,4 +1,4 @@ -[[data-security]] +[id="data-security",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/apm-data-security.html"] === Data security When setting up Elastic APM, it's essential to review all captured data carefully to ensure diff --git a/docs/guide/distributed-tracing.asciidoc b/docs/guide/distributed-tracing.asciidoc index 51a69d2b2b9..05088728b88 100644 --- a/docs/guide/distributed-tracing.asciidoc +++ b/docs/guide/distributed-tracing.asciidoc @@ -1,4 +1,4 @@ -[[distributed-tracing]] +[id="distributed-tracing",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/apm-distributed-tracing.html"] === Distributed tracing A `trace` is a group of <> and <> with a common root. diff --git a/docs/guide/features.asciidoc b/docs/guide/features.asciidoc index 2758c432081..c98aff9d471 100644 --- a/docs/guide/features.asciidoc +++ b/docs/guide/features.asciidoc @@ -1,4 +1,4 @@ -[[apm-features]] +[id="apm-features",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/features.html"] == Elastic APM features ++++ diff --git a/docs/guide/index.asciidoc b/docs/guide/index.asciidoc index 4a1a49526c7..6ba03ccebf5 100644 --- a/docs/guide/index.asciidoc +++ b/docs/guide/index.asciidoc @@ -8,7 +8,7 @@ NOTE: For the best reading experience, please view this documentation at https://www.elastic.co/guide/en/apm/get-started[elastic.co] endif::[] -[[gettting-started]] +[id="gettting-started",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/index.html"] = APM Overview include::./overview.asciidoc[] diff --git a/docs/guide/install-and-run.asciidoc b/docs/guide/install-and-run.asciidoc index cacd1595316..2bf3a913a00 100644 --- a/docs/guide/install-and-run.asciidoc +++ b/docs/guide/install-and-run.asciidoc @@ -1,4 +1,4 @@ -[[install-and-run]] +[id="install-and-run",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/apm-quick-start.html"] == Quick start guide This guide describes how to get started quickly with Elastic APM. You’ll learn how to: diff --git a/docs/guide/obs-integrations.asciidoc b/docs/guide/obs-integrations.asciidoc index cae4cb78204..9f999983936 100644 --- a/docs/guide/obs-integrations.asciidoc +++ b/docs/guide/obs-integrations.asciidoc @@ -1,4 +1,4 @@ -[[observability-integrations]] +[id="observability-integrations",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/log-correlation.html"] === Observability integrations Elastic APM supports integrations with other observability solutions. diff --git a/docs/guide/opentelemetry-elastic.asciidoc b/docs/guide/opentelemetry-elastic.asciidoc index 413142b9b4c..917a8badc7c 100644 --- a/docs/guide/opentelemetry-elastic.asciidoc +++ b/docs/guide/opentelemetry-elastic.asciidoc @@ -1,4 +1,4 @@ -[[open-telemetry-elastic]] +[id="open-telemetry-elastic",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/open-telemetry.html"] === OpenTelemetry integration :ot-spec: https://github.com/open-telemetry/opentelemetry-specification/blob/master/README.md diff --git a/docs/guide/overview.asciidoc b/docs/guide/overview.asciidoc index 942726e9dcd..9e30515b33f 100644 --- a/docs/guide/overview.asciidoc +++ b/docs/guide/overview.asciidoc @@ -1,4 +1,4 @@ -[[overview]] +[id="overview",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/apm-overview.html"] == Free and open application performance monitoring ++++ diff --git a/docs/guide/rum.asciidoc b/docs/guide/rum.asciidoc index e7e38bcbd3e..bb7892cc508 100644 --- a/docs/guide/rum.asciidoc +++ b/docs/guide/rum.asciidoc @@ -1,4 +1,4 @@ -[[rum]] +[id="rum",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/apm-rum.html"] === Real User Monitoring (RUM) Real User Monitoring captures user interaction with clients such as web browsers. The {apm-rum-ref-v}[JavaScript Agent] is Elastic’s RUM Agent. diff --git a/docs/guide/trace-sampling.asciidoc b/docs/guide/trace-sampling.asciidoc index 7d640eb1a7c..ed248fe1ecb 100644 --- a/docs/guide/trace-sampling.asciidoc +++ b/docs/guide/trace-sampling.asciidoc @@ -1,4 +1,4 @@ -[[trace-sampling]] +[id="trace-sampling",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/sampling.html"] === Transaction sampling Elastic APM supports head-based, probability sampling. diff --git a/docs/howto.asciidoc b/docs/howto.asciidoc index 9410f612962..f5f7cbcd2c1 100644 --- a/docs/howto.asciidoc +++ b/docs/howto.asciidoc @@ -1,4 +1,4 @@ -[[howto-guides]] +[id="howto-guides",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/how-to-guides.html"] = How-to guides [partintro] diff --git a/docs/ilm-reference.asciidoc b/docs/ilm-reference.asciidoc index 8c543bfb6c2..0c24228cb84 100644 --- a/docs/ilm-reference.asciidoc +++ b/docs/ilm-reference.asciidoc @@ -1,4 +1,4 @@ -[[ilm-reference]] +[id="ilm-reference",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/ilm-how-to.html"] [role="xpack"] == Configure Index lifecycle management (ILM) diff --git a/docs/ilm.asciidoc b/docs/ilm.asciidoc index a5c090c134b..0d1b493d626 100644 --- a/docs/ilm.asciidoc +++ b/docs/ilm.asciidoc @@ -1,4 +1,4 @@ -[[ilm]] +[id="ilm",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/ilm-how-to.html"] [role="xpack"] == Custom index lifecycle management with APM Server diff --git a/docs/intake-api.asciidoc b/docs/intake-api.asciidoc index 11b714e7980..0f14d358aef 100644 --- a/docs/intake-api.asciidoc +++ b/docs/intake-api.asciidoc @@ -1,4 +1,4 @@ -[[intake-api]] +[id="intake-api",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/api-events.html"] = API [partintro] diff --git a/docs/jaeger-reference.asciidoc b/docs/jaeger-reference.asciidoc index 10ed2b7fa2e..3121daddbb5 100644 --- a/docs/jaeger-reference.asciidoc +++ b/docs/jaeger-reference.asciidoc @@ -1,4 +1,4 @@ -[[jaeger-reference]] +[id="jaeger-reference",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/jaeger-integration.html"] == Configure Jaeger ++++ diff --git a/docs/jaeger-support.asciidoc b/docs/jaeger-support.asciidoc index 2b1cfb5eb25..2719fa876eb 100644 --- a/docs/jaeger-support.asciidoc +++ b/docs/jaeger-support.asciidoc @@ -1,4 +1,4 @@ -[[jaeger]] +[id="jaeger",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/jaeger-integration.html"] == Jaeger integration ++++ diff --git a/docs/metadata-api.asciidoc b/docs/metadata-api.asciidoc index 52ea228f095..6ed8bc196fe 100644 --- a/docs/metadata-api.asciidoc +++ b/docs/metadata-api.asciidoc @@ -1,4 +1,4 @@ -[[metadata-api]] +[id="metadata-api",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/api-metadata.html"] === Metadata Every new connection to the APM Server starts with a `metadata` stanza. diff --git a/docs/metricset-api.asciidoc b/docs/metricset-api.asciidoc index 40c770d5c45..b51ed008dd2 100644 --- a/docs/metricset-api.asciidoc +++ b/docs/metricset-api.asciidoc @@ -1,4 +1,4 @@ -[[metricset-api]] +[id="metricset-api",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/api-metricset.html"] === Metrics Metrics contain application metric data captured by an APM agent. diff --git a/docs/release-notes.asciidoc b/docs/release-notes.asciidoc index d63b09ce2c1..24417de6dfb 100644 --- a/docs/release-notes.asciidoc +++ b/docs/release-notes.asciidoc @@ -1,6 +1,6 @@ :root-dir: ../ -[[release-notes]] +[id="release-notes",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/release-notes.html"] = Release notes :issue: https://github.com/elastic/apm-server/issues/ :pull: https://github.com/elastic/apm-server/pull/ diff --git a/docs/secure-communication-agents.asciidoc b/docs/secure-communication-agents.asciidoc index 5b0a5051c5a..0c165287924 100644 --- a/docs/secure-communication-agents.asciidoc +++ b/docs/secure-communication-agents.asciidoc @@ -1,4 +1,4 @@ -[[secure-communication-agents]] +[id="secure-communication-agents",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/secure-agent-communication.html"] == Secure communication with APM agents Communication between APM agents and APM Server can be both encrypted and authenticated. @@ -22,7 +22,7 @@ There is a less straightforward and more restrictive way to authenticate clients <>, which is currently a mainstream option only for the RUM agent (through the browser) and the Jaeger agent. -[[ssl-setup]] +[id="ssl-setup",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/agent-tls.html"] === SSL/TLS communication // Use the shared ssl short description diff --git a/docs/server-info.asciidoc b/docs/server-info.asciidoc index acc0eb2223a..39adab19dd5 100644 --- a/docs/server-info.asciidoc +++ b/docs/server-info.asciidoc @@ -1,4 +1,4 @@ -[[server-info]] +[id="server-info",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/api-info.html"] == Server Information API ++++ diff --git a/docs/sourcemap-api.asciidoc b/docs/sourcemap-api.asciidoc index 6990745ff10..018ab0a7d92 100644 --- a/docs/sourcemap-api.asciidoc +++ b/docs/sourcemap-api.asciidoc @@ -55,7 +55,7 @@ While comparing the stack trace frame's `abs_path` with the source map's `bundle } --------------------------------------------------------------------------- -But if there is no full match, it also accepts source maps that match only the URLs path (without the host). +But if there is no full match, it also accepts source maps that match only the URLs path (without the host). [source,console] --------------------------------------------------------------------------- { diff --git a/docs/sourcemaps.asciidoc b/docs/sourcemaps.asciidoc index 9b9eb962de1..4b9d3431a0f 100644 --- a/docs/sourcemaps.asciidoc +++ b/docs/sourcemaps.asciidoc @@ -1,4 +1,4 @@ -[[sourcemaps]] +[id="sourcemaps",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/source-map-how-to.html"] == How to apply source maps to error stack traces when using minified bundles ++++ diff --git a/docs/span-api.asciidoc b/docs/span-api.asciidoc index 11c96b62621..fec6bb140c6 100644 --- a/docs/span-api.asciidoc +++ b/docs/span-api.asciidoc @@ -1,4 +1,4 @@ -[[span-api]] +[id="span-api",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/api-span.html"] === Spans Spans are events captured by an agent occurring in a monitored service. diff --git a/docs/transaction-api.asciidoc b/docs/transaction-api.asciidoc index 0aec3a321e9..2db8bfeda27 100644 --- a/docs/transaction-api.asciidoc +++ b/docs/transaction-api.asciidoc @@ -1,4 +1,4 @@ -[[transaction-api]] +[id="transaction-api",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/api-transaction.html"] === Transactions Transactions are events corresponding to an incoming request or similar task occurring in a monitored service. diff --git a/docs/upgrading.asciidoc b/docs/upgrading.asciidoc index 9bc61be4dec..2ae949193fc 100644 --- a/docs/upgrading.asciidoc +++ b/docs/upgrading.asciidoc @@ -1,4 +1,4 @@ -[[upgrading]] +[id="upgrading",canonical-url="https://www.elastic.co/guide/en/apm/guide/current/upgrade.html"] = Upgrade APM Server ++++