diff --git a/redirects.yml b/redirects.yml
index 4ca85d456..bb5982adb 100644
--- a/redirects.yml
+++ b/redirects.yml
@@ -187,3 +187,19 @@ redirects:
'solutions/observability/apps/inspect-uptime-duration-anomalies.md': 'solutions/observability/uptime/inspect-duration-anomalies.md'
'solutions/observability/apps/configure-settings.md': 'solutions/observability/uptime/configure-settings.md'
'solutions/observability/apps/tutorial-monitor-java-application.md': 'solutions/observability/applications/tutorial-monitor-java-application.md'
+ # Related to https://github.com/elastic/docs-content/pull/1083/
+ 'troubleshoot/elasticsearch/elasticsearch-client-java-api-client/apache-errors.md': 'reference/elasticsearch/clients/io-reactor-errors.md'
+ 'troubleshoot/elasticsearch/elasticsearch-client-java-api-client/error-no-such-method.md': 'reference/elasticsearch/clients/java/troubleshooting/no-such-method-request-options.md'
+ 'troubleshoot/elasticsearch/elasticsearch-client-java-api-client/java.md': 'reference/elasticsearch/clients/java/troubleshooting/index.md'
+ 'troubleshoot/elasticsearch/elasticsearch-client-java-api-client/missing-required-property.md': 'reference/elasticsearch/clients/java/troubleshooting/missing-required-property.md'
+ 'troubleshoot/elasticsearch/elasticsearch-client-java-api-client/typed-keys-serialization.md': 'reference/elasticsearch/clients/java/troubleshooting/serialize-without-typed-keys.md'
+ 'troubleshoot/elasticsearch/elasticsearch-client-javascript-api/nodejs.md': 'reference/elasticsearch/clients/javascript/index.md'
+ 'troubleshoot/elasticsearch/elasticsearch-client-net-api/audit-trail.md': 'reference/elasticsearch/clients/dotnet/troubleshoot/audit-trail.md'
+ 'troubleshoot/elasticsearch/elasticsearch-client-net-api/debug-information.md': 'reference/elasticsearch/clients/dotnet/troubleshoot/debug-information.md'
+ 'troubleshoot/elasticsearch/elasticsearch-client-net-api/debug-mode.md': 'reference/elasticsearch/clients/dotnet/troubleshoot/debug-mode.md'
+ 'troubleshoot/elasticsearch/elasticsearch-client-net-api/debugging.md': 'reference/elasticsearch/clients/dotnet/troubleshoot/debugging.md'
+ 'troubleshoot/elasticsearch/elasticsearch-client-net-api/logging-with-fiddler.md': 'reference/elasticsearch/clients/dotnet/troubleshoot/logging-with-fiddler.md'
+ 'troubleshoot/elasticsearch/elasticsearch-client-net-api/logging-with-onrequestcompleted.md': 'reference/elasticsearch/clients/dotnet/troubleshoot/logging-with-onrequestcompleted.md'
+ 'troubleshoot/elasticsearch/elasticsearch-client-net-api/logging.md': 'reference/elasticsearch/clients/dotnet/troubleshoot/logging.md'
+ 'troubleshoot/elasticsearch/elasticsearch-client-net-api/net.md': 'reference/elasticsearch/clients/dotnet/troubleshoot/index.md'
+ 'troubleshoot/elasticsearch/elasticsearch-client-ruby-api/ruby.md': 'reference/elasticsearch/clients/ruby/troubleshoot.md'
\ No newline at end of file
diff --git a/troubleshoot/elasticsearch/clients.md b/troubleshoot/elasticsearch/clients.md
index a4976e4f3..ca3b7340d 100644
--- a/troubleshoot/elasticsearch/clients.md
+++ b/troubleshoot/elasticsearch/clients.md
@@ -4,13 +4,14 @@ navigation_title: "Clients"
# Troubleshoot {{es}} clients
-Use the topics in this section to troubleshoot issues you encounter while using the official [Elasticsearch clients](/reference/elasticsearch-clients/index.md):
+For troubleshooting tips for the official {{es}} clients, refer to the client docs:
-* [](/troubleshoot/elasticsearch/elasticsearch-client-java-api-client/java.md)
-* [](/troubleshoot/elasticsearch/elasticsearch-client-net-api/net.md)
-* [](/troubleshoot/elasticsearch/elasticsearch-client-javascript-api/nodejs.md)
-* [](/troubleshoot/elasticsearch/elasticsearch-client-ruby-api/ruby.md)
-
-## Additional resources
-* [Troubleshooting overview](/troubleshoot/index.md)
-* [Contact us](/troubleshoot/index.md#contact-us)
\ No newline at end of file
+- [Go](go-elasticsearch://reference/index.md)
+- [Java](elasticsearch-java://reference/index.md)
+- [JavaScript](elasticsearch-js://reference/index.md)
+- [.NET](elasticsearch-net://reference/index.md)
+- [PHP](elasticsearch-php://reference/index.md)
+- [Python](elasticsearch-py://reference/index.md)
+ - [Eland](eland://reference/index.md) (Python client and toolkit for DataFrames and machine learning)
+- [Ruby](elasticsearch-ruby://reference/index.md)
+- [Rust](elasticsearch-rs://reference/index.md)
diff --git a/troubleshoot/elasticsearch/elasticsearch-client-java-api-client/apache-errors.md b/troubleshoot/elasticsearch/elasticsearch-client-java-api-client/apache-errors.md
deleted file mode 100644
index 14a69403d..000000000
--- a/troubleshoot/elasticsearch/elasticsearch-client-java-api-client/apache-errors.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-mapped_pages:
- - https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/io-reactor-errors.html
----
-
-# Apache errors [io-reactor-errors]
-
-Sending requests can sometimes fail with one of the following errors, coming from the Apache http-client library:
-
-* `Request cannot be executed; I/O reactor status: STOPPED`
-* `I/O reactor terminated abnormally`
-* `I/O reactor has been shut down`
-
-The I/O Reactor is the internal event loop in the http client library. It can terminate when an application callback throws an `Error`, like an `OutOfMemoryError` or a `StackOverflowError`. Remember that `Error` is different from a regular `Exception` and – [quoting the Java documentation](https://docs.oracle.com/javase/8/docs/api/?java/lang/Error.md) – *indicates serious problems that a reasonable application should not try to catch*.
-
-In the context of the Elasticsearch Java clients, this can happen on two occasions:
-
-* the application calls the low level `RestClient` directly, using the asynchronous `performRequestAsync` method, and an `Error` is thrown in the `ResponseListener` provided by the application.
-* an `OutOfMemoryError` happens while buffering the body of an http response.
-
-In the first case, it is the application’s responsibility to catch `Error` in its `ResponseListener` and decide what to do when these errors happen.
-
-The second case is taken care of in the Java API Client since version 8.12: the error is wrapped in a `RuntimeException` that is reported to the application.
-
-In previous versions of the Java API Client, you can copy/paste the `SafeResponseConsumer` class in your project and initialize the `RestClientTransport` as follows:
-
-```java
-RestClient restClient = ...
-JsonpMapper mapper = ...
-RestClientOptions options = new RestClientOptions(
- SafeResponseConsumer.DEFAULT_REQUEST_OPTIONS
-);
-RestClientTransport transport = new RestClientTransport(
- restClient, mapper, options
-);
-```
-
diff --git a/troubleshoot/elasticsearch/elasticsearch-client-java-api-client/error-no-such-method.md b/troubleshoot/elasticsearch/elasticsearch-client-java-api-client/error-no-such-method.md
deleted file mode 100644
index 9962665f3..000000000
--- a/troubleshoot/elasticsearch/elasticsearch-client-java-api-client/error-no-such-method.md
+++ /dev/null
@@ -1,35 +0,0 @@
----
-mapped_pages:
- - https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/no-such-method-request-options.html
----
-
-# Error: No such method [no-such-method-request-options]
-
-In certain contexts you may encounter an error when creating the `ElasticsearchClient` saying that the method `RequestOptions$Builder.removeHeader` does not exist:
-
-```java
-java.lang.NoSuchMethodError: 'org.elasticsearch.client.RequestOptions$Builder org.elasticsearch.client.RequestOptions$Builder.removeHeader(java.lang.String)'
-```
-
-This method was introduced in `elasticsearch-rest-client` version 7.16.0. The error happens because your project is using an older version of this dependency.
-
-This happens in particular when the project is using the [Spring Boot Maven Plugin](https://docs.spring.io/spring-boot/docs/current/maven-plugin/reference/htmlsingle/), as this plugin [defines versions for commonly used libraries](https://github.com/spring-projects/spring-boot/blob/main/spring-boot-project/spring-boot-dependencies/build.gradle), including `elasticsearch-rest-client`. Depending on the version of Spring Boot used in the project, that version may be outdated.
-
-To solve this issue, you have to add the `elasticsearch-rest-client` dependency explicitly in your project, with the same version as `elasticsearch-java` (see also [Installation](elasticsearch-java://reference/installation.md)).
-
-Using Gradle:
-
-```groovy
-implementation 'org.elasticsearch.client:elasticsearch-rest-client:9.0.0-beta1'
-```
-
-Using Maven:
-
-```xml
-
- org.elasticsearch.client
- elasticsearch-rest-client
- 9.0.0-beta1
-
-```
-
diff --git a/troubleshoot/elasticsearch/elasticsearch-client-java-api-client/java.md b/troubleshoot/elasticsearch/elasticsearch-client-java-api-client/java.md
deleted file mode 100644
index 90e6a0208..000000000
--- a/troubleshoot/elasticsearch/elasticsearch-client-java-api-client/java.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-navigation_title: Java
-mapped_pages:
- - https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/troubleshooting.html
----
-
-# Troubleshoot {{es}} Java client [troubleshooting]
-
-
-## Exceptions [_exceptions]
-
-* [`MissingRequiredPropertyException` in a response](missing-required-property.md)
-* [`NoSuchMethodError RequestOptions$Builder.removeHeader` when creating a client](error-no-such-method.md)
-* [Apache http-client I/O reactor errors](apache-errors.md)
-
-
-## Miscellaneous [_miscellaneous]
-
-* [Serializing aggregations and suggestions without typed keys](typed-keys-serialization.md)
-
-
-
-
-
diff --git a/troubleshoot/elasticsearch/elasticsearch-client-java-api-client/missing-required-property.md b/troubleshoot/elasticsearch/elasticsearch-client-java-api-client/missing-required-property.md
deleted file mode 100644
index 36c9dfdf1..000000000
--- a/troubleshoot/elasticsearch/elasticsearch-client-java-api-client/missing-required-property.md
+++ /dev/null
@@ -1,44 +0,0 @@
----
-mapped_pages:
- - https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/missing-required-property.html
----
-
-# Missing required property [missing-required-property]
-
-The Java API Client distinguishes optional and required properties. Optional properties are marked with the `@Nullable` annotation.
-
-When an API object is built and a required property hasn’t been set, a `MissingRequiredPropertyException` is thrown. This applies both to request object built by your application and to response objects returned by Elasticsearch, so that you can be assured that a property that does not have the `@Nullable` annotation will never be `null`.
-
-However, there may be bugs in the [Elasticsearch API specification](https://github.com/elastic/elasticsearch-specification) where a response object’s property is incorrectly required, leading to a `MissingRequiredPropertyException` when deserializing a response. If this happens, here’s how you can work around it:
-
-* Make sure you use the latest release of the Java API Client. The issue may already have been fixed.
-* If the issue is still present on the latest version, [open an issue](https://github.com/elastic/elasticsearch-java/issues/new/choose) so that we can fix it in the next release. Help us to improve the Java API Client.
-* Temporarily disable required property checks for the offending request:
-
-::::{warning}
-This is a workaround. Do not consider this as a permanent solution, and [open an issue](https://github.com/elastic/elasticsearch-java/issues/new/choose) so that the problem can be fixed in a future release.
-::::
-
-
-```java
- ApiTypeHelper.DANGEROUS_disableRequiredPropertiesCheck(true);
- SomeRequest request = SomeRequest.of(...);
- SomeResponse response = esClient.someApi(request);
- ApiTypeHelper.DANGEROUS_disableRequiredPropertiesCheck(false);
- // Do something with response
-}
-```
-
-The `DANGEROUS_disableRequiredPropertiesCheck` method disables required property checks on the current thread, and for response deserialization in asynchronous requests. As its name implies, it is dangerous as it removes the guarantees of properties that are not `@Nullable`. This is a temporary workaround until the issue is fixed.
-
-Note that the result of this method is an `AutoCloseable` object that resets required property checks to its previous setting. You can therefore use it in a try-with-resource block as follows:
-
-```java
-try (ApiTypeHelper.DisabledChecksHandle h =
- ApiTypeHelper.DANGEROUS_disableRequiredPropertiesCheck(true)) {
- SomeRequest request = SomeRequest.of(...);
- SomeResponse response = esClient.someApi(request);
- // Do something with response
-}
-```
-
diff --git a/troubleshoot/elasticsearch/elasticsearch-client-java-api-client/typed-keys-serialization.md b/troubleshoot/elasticsearch/elasticsearch-client-java-api-client/typed-keys-serialization.md
deleted file mode 100644
index 5d3be9b6a..000000000
--- a/troubleshoot/elasticsearch/elasticsearch-client-java-api-client/typed-keys-serialization.md
+++ /dev/null
@@ -1,47 +0,0 @@
----
-mapped_pages:
- - https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/serialize-without-typed-keys.html
----
-
-# Typed keys serialization [serialize-without-typed-keys]
-
-{{es}} search requests accept a `typed_key` parameter that allow returning type information along with the name in aggregation and suggestion results (see the [aggregations documentation](/explore-analyze/query-filter/aggregations.md#return-agg-type) for additional details).
-
-The Java API Client always adds this parameter to search requests, as type information is needed to know the concrete class that should be used to deserialize aggregation and suggestion results.
-
-Symmetrically, the Java API Client also serializes aggregation and suggestion results using this `typed_keys` format, so that it can correctly deserialize the results of its own serialization.
-
-```java
-ElasticsearchClient esClient = ...
-JsonpMapper mapper = esClient._jsonpMapper();
-
-StringWriter writer = new StringWriter();
-try (JsonGenerator generator = mapper.jsonProvider().createGenerator(writer)) {
- mapper.serialize(searchResponse, generator);
-}
-String result = writer.toString();
-
-// The aggregation property provides the "avg" type and "price" name
-assertTrue(result.contains("\"aggregations\":{\"avg#price\":{\"value\":3.14}}}"));
-```
-
-However, in some use cases serializing objects in the `typed_keys` format may not be desirable, for example when the Java API Client is used in an application that acts as a front-end to other services that expect the default format for aggregations and suggestions.
-
-You can disable `typed_keys` serialization by setting the `JsonpMapperFeatures.SERIALIZE_TYPED_KEYS` attribute to `false` on your mapper object:
-
-```java
-ElasticsearchClient esClient = ...
-// Create a new mapper with the typed_keys feature disabled
-JsonpMapper mapper = esClient._jsonpMapper()
- .withAttribute(JsonpMapperFeatures.SERIALIZE_TYPED_KEYS, false);
-
-StringWriter writer = new StringWriter();
-try (JsonGenerator generator = mapper.jsonProvider().createGenerator(writer)) {
- mapper.serialize(searchResponse, generator);
-}
-String result = writer.toString();
-
-// The aggregation only provides the "price" name
-assertTrue(result.contains("\"aggregations\":{\"price\":{\"value\":3.14}}}"));
-```
-
diff --git a/troubleshoot/elasticsearch/elasticsearch-client-javascript-api/nodejs.md b/troubleshoot/elasticsearch/elasticsearch-client-javascript-api/nodejs.md
deleted file mode 100644
index 3dcae7ed9..000000000
--- a/troubleshoot/elasticsearch/elasticsearch-client-javascript-api/nodejs.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-navigation_title: Node.js
-mapped_pages:
- - https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/timeout-best-practices.html
----
-
-# Troubleshoot {{es}} Node.js client [timeout-best-practices]
-
-Starting in 9.0.0, this client is configured to not time out any HTTP request by default. {{es}} will always eventually respond to any request, even if it takes several minutes. Reissuing a request that it has not responded to yet can cause performance side effects. See the [official {{es}} recommendations for HTTP clients](elasticsearch://reference/elasticsearch/configuration-reference/networking-settings.md#_http_client_configuration) for more information.
-
-Prior to 9.0, this client was configured by default to operate like many HTTP client libraries do, by using a relatively short (30 second) timeout on all requests sent to {{es}}, raising a `TimeoutError` when that time period elapsed without receiving a response.
-
-If your circumstances require you to set timeouts on Elasticsearch requests, setting the `requestTimeout` value to a millisecond value will cause this client to operate as it did prior to 9.0.
-
diff --git a/troubleshoot/elasticsearch/elasticsearch-client-net-api/audit-trail.md b/troubleshoot/elasticsearch/elasticsearch-client-net-api/audit-trail.md
deleted file mode 100644
index 96d3008aa..000000000
--- a/troubleshoot/elasticsearch/elasticsearch-client-net-api/audit-trail.md
+++ /dev/null
@@ -1,66 +0,0 @@
----
-mapped_pages:
- - https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/audit-trail.html
----
-
-# Audit trail [audit-trail]
-
-Elasticsearch.Net and NEST provide an audit trail for the events within the request pipeline that occur when a request is made. This audit trail is available on the response as demonstrated in the following example.
-
-We’ll use a Sniffing connection pool here since it sniffs on startup and pings before first usage, so we can get an audit trail with a few events out
-
-```csharp
-var pool = new SniffingConnectionPool(new []{ TestConnectionSettings.CreateUri() });
-var connectionSettings = new ConnectionSettings(pool)
- .DefaultMappingFor(i => i
- .IndexName("project")
- );
-
-var client = new ElasticClient(connectionSettings);
-```
-
-After issuing the following request
-
-```csharp
-var response = client.Search(s => s
- .MatchAll()
-);
-```
-
-The audit trail is provided in the [Debug information](debug-information.md) in a human readable fashion, similar to
-
-```
-Valid NEST response built from a successful low level call on POST: /project/doc/_search
-# Audit trail of this API call:
- - [1] SniffOnStartup: Took: 00:00:00.0360264
- - [2] SniffSuccess: Node: http://localhost:9200/ Took: 00:00:00.0310228
- - [3] PingSuccess: Node: http://127.0.0.1:9200/ Took: 00:00:00.0115074
- - [4] HealthyResponse: Node: http://127.0.0.1:9200/ Took: 00:00:00.1477640
-# Request:
-
-# Response:
-
-```
-to help with troubleshootin
-
-```csharp
-var debug = response.DebugInformation;
-```
-
-But can also be accessed manually:
-
-```csharp
-response.ApiCall.AuditTrail.Count.Should().Be(4, "{0}", debug);
-response.ApiCall.AuditTrail[0].Event.Should().Be(SniffOnStartup, "{0}", debug);
-response.ApiCall.AuditTrail[1].Event.Should().Be(SniffSuccess, "{0}", debug);
-response.ApiCall.AuditTrail[2].Event.Should().Be(PingSuccess, "{0}", debug);
-response.ApiCall.AuditTrail[3].Event.Should().Be(HealthyResponse, "{0}", debug);
-```
-
-Each audit has a started and ended `DateTime` on it that will provide some understanding of how long it took
-
-```csharp
-response.ApiCall.AuditTrail
- .Should().OnlyContain(a => a.Ended - a.Started >= TimeSpan.Zero);
-```
-
diff --git a/troubleshoot/elasticsearch/elasticsearch-client-net-api/debug-information.md b/troubleshoot/elasticsearch/elasticsearch-client-net-api/debug-information.md
deleted file mode 100644
index f682179a0..000000000
--- a/troubleshoot/elasticsearch/elasticsearch-client-net-api/debug-information.md
+++ /dev/null
@@ -1,165 +0,0 @@
----
-mapped_pages:
- - https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/debug-information.html
----
-
-# Debug information [debug-information]
-
-Every response from Elasticsearch.Net and NEST contains a `DebugInformation` property that provides a human readable description of what happened during the request for both successful and failed requests
-
-```csharp
-var response = client.Search(s => s
- .Query(q => q
- .MatchAll()
- )
-);
-
-response.DebugInformation.Should().Contain("Valid NEST response");
-```
-
-This can be useful in tracking down numerous problems and can also be useful when filing an [issue](https://github.com/elastic/elasticsearch-net/issues) on the GitHub repository.
-
-## Request and response bytes [_request_and_response_bytes]
-
-By default, the request and response bytes are not available within the debug information, but can be enabled globally on Connection Settings by setting `DisableDirectStreaming`. This disables direct streaming of
-
-1. the serialized request type to the request stream
-2. the response stream to a deserialized response type
-
-```csharp
-var connectionPool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
-
-var settings = new ConnectionSettings(connectionPool)
- .DisableDirectStreaming(); <1>
-
-var client = new ElasticClient(settings);
-```
-
-1. disable direct streaming for **all** requests
-
-
-or on a *per request* basis
-
-```csharp
-var response = client.Search(s => s
- .RequestConfiguration(r => r
- .DisableDirectStreaming() <1>
- )
- .Query(q => q
- .MatchAll()
- )
-);
-```
-
-1. disable direct streaming for **this** request only
-
-
-Configuring `DisableDirectStreaming` on an individual request takes precedence over any global configuration.
-
-There is typically a performance and allocation cost associated with disabling direct streaming since both the request and response bytes must be buffered in memory, to allow them to be exposed on the response call details.
-
-
-## TCP statistics [_tcp_statistics]
-
-It can often be useful to see the statistics for active TCP connections, particularly when trying to diagnose issues with the client. The client can collect the states of active TCP connections just before making a request, and expose these on the response and in the debug information.
-
-Similarly to `DisableDirectStreaming`, TCP statistics can be collected for every request by configuring on `ConnectionSettings`
-
-```csharp
-var connectionPool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
-
-var settings = new ConnectionSettings(connectionPool)
- .EnableTcpStats(); <1>
-
-var client = new ElasticClient(settings);
-```
-
-1. collect TCP statistics for **all** requests
-
-
-or on a *per request* basis
-
-```csharp
-var response = client.Search(s => s
- .RequestConfiguration(r => r
- .EnableTcpStats() <1>
- )
- .Query(q => q
- .MatchAll()
- )
-);
-
-var debugInformation = response.DebugInformation;
-```
-
-1. collect TCP statistics for **this** request only
-
-
-With `EnableTcpStats` set, the states of active TCP connections will now be included on the response and in the debug information.
-
-The client includes a `TcpStats` class to help with retrieving more detail about active TCP connections should it be required
-
-```csharp
-var tcpStatistics = TcpStats.GetActiveTcpConnections(); <1>
-var ipv4Stats = TcpStats.GetTcpStatistics(NetworkInterfaceComponent.IPv4); <2>
-var ipv6Stats = TcpStats.GetTcpStatistics(NetworkInterfaceComponent.IPv6); <3>
-
-var response = client.Search(s => s
- .Query(q => q
- .MatchAll()
- )
-);
-```
-
-1. Retrieve details about active TCP connections, including local and remote addresses and ports
-2. Retrieve statistics about IPv4
-3. Retrieve statistics about IPv6
-
-
-::::{note}
-Collecting TCP statistics may not be accessible in all environments, for example, Azure App Services. When this is the case, `TcpStats.GetActiveTcpConnections()` returns `null`.
-
-::::
-
-
-
-## ThreadPool statistics [_threadpool_statistics]
-
-It can often be useful to see the statistics for thread pool threads, particularly when trying to diagnose issues with the client. The client can collect statistics for both worker threads and asynchronous I/O threads, and expose these on the response and in debug information.
-
-Similar to collecting TCP statistics, ThreadPool statistics can be collected for all requests by configuring `EnableThreadPoolStats` on `ConnectionSettings`
-
-```csharp
-var connectionPool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
-
-var settings = new ConnectionSettings(connectionPool)
- .EnableThreadPoolStats(); <1>
-
-var client = new ElasticClient(settings);
-```
-
-1. collect thread pool statistics for **all** requests
-
-
-or on a *per request* basis
-
-```csharp
-var response = client.Search(s => s
- .RequestConfiguration(r => r
- .EnableThreadPoolStats() <1>
- )
- .Query(q => q
- .MatchAll()
- )
- );
-
-var debugInformation = response.DebugInformation; <2>
-```
-
-1. collect thread pool statistics for **this** request only
-2. contains thread pool statistics
-
-
-With `EnableThreadPoolStats` set, the statistics of thread pool threads will now be included on the response and in the debug information.
-
-
diff --git a/troubleshoot/elasticsearch/elasticsearch-client-net-api/debug-mode.md b/troubleshoot/elasticsearch/elasticsearch-client-net-api/debug-mode.md
deleted file mode 100644
index fce96b34b..000000000
--- a/troubleshoot/elasticsearch/elasticsearch-client-net-api/debug-mode.md
+++ /dev/null
@@ -1,50 +0,0 @@
----
-mapped_pages:
- - https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/debug-mode.html
----
-
-# Debug mode [debug-mode]
-
-The [Debug information](debug-information.md) explains that every response from Elasticsearch.Net and NEST contains a `DebugInformation` property, and properties on `ConnectionSettings` and `RequestConfiguration` can control which additional information is included in debug information, for all requests or on a per request basis, respectively.
-
-During development, it can be useful to enable the most verbose debug information, to help identify and troubleshoot problems, or simply ensure that the client is behaving as expected. The `EnableDebugMode` setting on `ConnectionSettings` is a convenient shorthand for enabling verbose debug information, configuring a number of settings like
-
-* disabling direct streaming to capture request and response bytes
-* prettyfying JSON responses from Elasticsearch
-* collecting TCP statistics when a request is made
-* collecting thread pool statistics when a request is made
-* including the Elasticsearch stack trace in the response if there is a an error on the server side
-
-```csharp
-IConnectionPool pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
-
-var settings = new ConnectionSettings(pool)
- .EnableDebugMode(); <1>
-
-var client = new ElasticClient(settings);
-
-var response = client.Search(s => s
- .Query(q => q
- .MatchAll()
- )
-);
-
-var debugInformation = response.DebugInformation; <2>
-```
-
-1. configure debug mode
-2. verbose debug information
-
-
-In addition to exposing debug information on the response, debug mode will also cause the debug information to be written to the trace listeners in the `System.Diagnostics.Debug.Listeners` collection by default, when the request has completed. A delegate can be passed when enabling debug mode to perform a different action when a request has completed, using [`OnRequestCompleted`](logging-with-onrequestcompleted.md)
-
-```csharp
-var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
-var client = new ElasticClient(new ConnectionSettings(pool)
- .EnableDebugMode(apiCallDetails =>
- {
- // do something with the call details e.g. send with logging framework
- })
-);
-```
-
diff --git a/troubleshoot/elasticsearch/elasticsearch-client-net-api/debugging.md b/troubleshoot/elasticsearch/elasticsearch-client-net-api/debugging.md
deleted file mode 100644
index b8f943356..000000000
--- a/troubleshoot/elasticsearch/elasticsearch-client-net-api/debugging.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-mapped_pages:
- - https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/debugging.html
----
-
-# Debugging [debugging]
-
-When things are going awry, you want to be provided with as much information as possible, to resolve the issue!
-
-Elasticsearch.Net and NEST provide an [audit trail](audit-trail.md) and [debug information](debug-information.md) to help get you back on the happy path.
-
-
-
-
diff --git a/troubleshoot/elasticsearch/elasticsearch-client-net-api/logging-with-fiddler.md b/troubleshoot/elasticsearch/elasticsearch-client-net-api/logging-with-fiddler.md
deleted file mode 100644
index 24336e475..000000000
--- a/troubleshoot/elasticsearch/elasticsearch-client-net-api/logging-with-fiddler.md
+++ /dev/null
@@ -1,50 +0,0 @@
----
-mapped_pages:
- - https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/logging-with-fiddler.html
----
-
-# Logging with Fiddler [logging-with-fiddler]
-
-A web debugging proxy such as [Fiddler](http://www.telerik.com/fiddler) is a useful way to capture HTTP traffic from a machine, particularly whilst developing against a local Elasticsearch cluster.
-
-## Capturing traffic to a remote cluster [_capturing_traffic_to_a_remote_cluster]
-
-To capture traffic against a remote cluster is as simple as launching Fiddler! You may want to also filter traffic to only show requests to the remote cluster by using the filters tab
-
-:::{image} /troubleshoot/images/elasticsearch-client-net-api-capture-requests-remotehost.png
-:alt: Capturing requests to a remote host
-:::
-
-
-## Capturing traffic to a local cluster [_capturing_traffic_to_a_local_cluster]
-
-The .NET Framework is hardcoded not to send requests for `localhost` through any proxies and as a proxy Fiddler will not receive such traffic.
-
-This is easily circumvented by using `ipv4.fiddler` as the hostname instead of `localhost`
-
-```csharp
-var isFiddlerRunning = Process.GetProcessesByName("fiddler").Any();
-var host = isFiddlerRunning ? "ipv4.fiddler" : "localhost";
-
-var connectionSettings = new ConnectionSettings(new Uri($"http://{host}:9200"))
- .PrettyJson(); <1>
-
-var client = new ElasticClient(connectionSettings);
-```
-
-1. prettify json requests and responses to make them easier to read in Fiddler
-
-
-With Fiddler running, the requests and responses will now be captured and can be inspected in the Inspectors tab
-
-:::{image} /troubleshoot/images/elasticsearch-client-net-api-inspect-requests.png
-:alt: Inspecting requests and responses
-:::
-
-As before, you may also want to filter traffic to only show requests to `ipv4.fiddler` on the port on which you are running Elasticsearch.
-
-:::{image} /troubleshoot/images/elasticsearch-client-net-api-capture-requests-localhost.png
-:alt: Capturing requests to localhost
-:::
-
-
diff --git a/troubleshoot/elasticsearch/elasticsearch-client-net-api/logging-with-onrequestcompleted.md b/troubleshoot/elasticsearch/elasticsearch-client-net-api/logging-with-onrequestcompleted.md
deleted file mode 100644
index f1c365ffa..000000000
--- a/troubleshoot/elasticsearch/elasticsearch-client-net-api/logging-with-onrequestcompleted.md
+++ /dev/null
@@ -1,209 +0,0 @@
----
-mapped_pages:
- - https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/logging-with-on-request-completed.html
----
-
-# Logging with OnRequestCompleted [logging-with-on-request-completed]
-
-When constructing the connection settings to pass to the client, you can pass a callback of type `Action` to the `OnRequestCompleted` method that can eavesdrop every time a response(good or bad) is received.
-
-If you have complex logging needs this is a good place to add that in since you have access to both the request and response details.
-
-In this example, we’ll use `OnRequestCompleted` on connection settings to increment a counter each time it’s called.
-
-```csharp
-var counter = 0;
-var client = new ElasticClient(new AlwaysInMemoryConnectionSettings().OnRequestCompleted(r => counter++)); <1>
-
-client.RootNodeInfo(); <2>
-counter.Should().Be(1);
-
-await client.RootNodeInfoAsync(); <3>
-counter.Should().Be(2);
-```
-
-1. Construct a client
-2. Make a synchronous call and assert the counter is incremented
-3. Make an asynchronous call and assert the counter is incremented
-
-
-`OnRequestCompleted` is called even when an exception is thrown, so it can be used even if the client is configured to throw exceptions
-
-```csharp
-var counter = 0;
-var client = FixedResponseClient.Create( <1>
- new { },
- 500,
- connectionSettings => connectionSettings
- .ThrowExceptions() <2>
- .OnRequestCompleted(r => counter++)
-);
-
-Assert.Throws(() => client.RootNodeInfo()); <3>
-counter.Should().Be(1);
-
-await Assert.ThrowsAsync(async () => await client.RootNodeInfoAsync());
-counter.Should().Be(2);
-```
-
-1. Configure a client with a connection that **always returns a HTTP 500 response
-2. Always throw exceptions when a call results in an exception
-3. Assert an exception is thrown and the counter is incremented
-
-
-Here’s an example using `OnRequestCompleted()` for more complex logging
-
-::::{note}
-By default, the client writes directly to the request stream and deserializes directly from the response stream.
-
-If you would also like to capture the request and/or response bytes, you also need to set `.DisableDirectStreaming()` to `true`.
-
-::::
-
-
-```csharp
-var list = new List();
-var connectionPool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
-
-var settings = new ConnectionSettings(connectionPool, new InMemoryConnection()) <1>
- .DefaultIndex("default-index")
- .DisableDirectStreaming() <2>
- .OnRequestCompleted(apiCallDetails => <3>
- {
- // log out the request and the request body, if one exists for the type of request
- if (apiCallDetails.RequestBodyInBytes != null)
- {
- list.Add(
- $"{apiCallDetails.HttpMethod} {apiCallDetails.Uri} " +
- $"{Encoding.UTF8.GetString(apiCallDetails.RequestBodyInBytes)}");
- }
- else
- {
- list.Add($"{apiCallDetails.HttpMethod} {apiCallDetails.Uri}");
- }
-
- // log out the response and the response body, if one exists for the type of response
- if (apiCallDetails.ResponseBodyInBytes != null)
- {
- list.Add($"Status: {apiCallDetails.HttpStatusCode}" +
- $"{Encoding.UTF8.GetString(apiCallDetails.ResponseBodyInBytes)}");
- }
- else
- {
- list.Add($"Status: {apiCallDetails.HttpStatusCode}");
- }
- });
-
-var client = new ElasticClient(settings);
-
-var syncResponse = client.Search