Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion config/_default/menus/main.en.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4434,11 +4434,16 @@ menu:
parent: tracing_services
identifier: tracing_service_remapping_rules
weight: 908
- name: Service Override Removal
url: tracing/services/service_override_removal
parent: tracing_services
identifier: tracing_service_override_removal
weight: 909
- name: APM Monitors
url: /monitors/create/types/apm/
parent: tracing_services
identifier: tracing_apm_monitors
weight: 909
weight: 910
- name: Endpoint Observability
url: internal_developer_portal/software_catalog/endpoints/
identifier: endpoint_observability
Expand Down
63 changes: 5 additions & 58 deletions content/en/tracing/guide/service_overrides.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ title: Service Overrides
description: Understand service overrides and how to adapt your configuration when using inferred services to improve service dependency representation.
disable_toc: false
further_reading:
- link: "/tracing/services/service_override_removal"
tag: "Documentation"
text: "Remove Service Overrides"
- link: "/tracing/services/inferred_services"
tag: "Documentation"
text: "Inferred services"
Expand Down Expand Up @@ -75,59 +78,7 @@ In the trace side panel, the client span header represents the call going from t

## Remove service overrides

To remove *integration service overrides*, set the environment variable:

```sh
DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED=true
```

This ensures the `service` attribute always uses the base service name instead of appending the integration name (for example,`*-postgres`, `*-http-client`).

<div class="alert alert-warning">Removing service overrides is a <b>breaking change</b>. Metrics, monitors, or dashboard queries based on the overridden service name will stop matching.</div>

It is recommended to remove service overrides progressively, proceeding service by service, to ensure that no critical assets (such as dashboards, monitors, retention filters, and so on) are affected by the change. Follow the [detailed instructions](#remove-service-overrides-progressively) to ensure a smooth transition to the new model.

### Examples

For example:

- .NET tags gRPC calls as `service:<DD_SERVICE>-grpc-client`
- Python tags gRPC calls as `service:grpc-client`

With the `DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED` option set to `true`, all supported tracing libraries tag client spans capturing the call to the downstream service with the calling service's name, `service:<DD_SERVICE>`. This ensures all spans are always tagged with the *default service name* emitting the span; [`peer.*`][6] attributes are used to describe the called dependency (for example, database or queue).

| Scenario | Service Name | Additional `peer.*` Attributes |
|----------|--------------|--------------------------------|
| *Without* inferred services and *with* service overrides | `service:my-service-grpc-client` or `service:grpc-client` | No `peer.*` attributes set |
| *With* inferred services and *without* service overrides | `service:myservice` | `@peer.service:otherservice` (where `otherservice` is the name of the remote service being called with gRPC) |

Similarly, for a span representing a call to a mySQL database:

| Scenario | Service Name | Additional `peer.*` Attributes |
|----------|--------------|--------------------------------|
| *Without* inferred services and *with* service overrides | `service:my-service-mysql` or `service:mysql` | No `peer.*` tags set |
| *With* inferred services and *without* service overrides | `service:myservice` | `@peer.db.name:user-db`, `@peer.db.system:mysql` |

### Remove service overrides progressively

1. Identify the service override you want to remove and navigate to its **service page**.
2. Hover over the service override pill in the page header and note the underlying base service names. These are the original services emitting spans with overrides. You need to update the configuration for these instrumented services.

{{< img src="/tracing/guide/service_overrides/service_overrides_service_page.png" alt="Service page overrides" style="width:70%;">}}

3. Scan through your existing assets that might contain queries using the override service name:

- Any monitors, dashboards, or notebooks queries based on [APM Trace metrics][5]
- [APM metrics from spans][2]
- [Trace analytics monitors][3] (based on indexed spans)
- [Retention filters][4]
- Sensitive data scanner pipelines

4. Update these queries to use the base service name (`service:<DD_SERVICE>`). This allows queries to continue to match when you remove service overrides

5. Set `DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED=true` for integration service overrides.

**Note**: The configuration above only removes [integration service overrides](#integration-service-overrides). Custom service overrides must be removed directly in the code.
With inferred services, integration service overrides are no longer necessary and may clutter your service maps. You can remove them directly in Datadog. For step-by-step instructions, see [Service Override Removal][2].

## Glossary

Expand All @@ -142,8 +93,4 @@ The default `DD_SERVICE` name.
{{< partial name="whats-next/whats-next.html" >}}

[1]: /tracing/services/inferred_services
[2]: /tracing/trace_pipeline/generate_metrics
[3]: /monitors/types/apm/?tab=traceanalytics
[4]: /tracing/trace_pipeline/trace_retention/#retention-filters
[5]: /tracing/metrics/metrics_namespace/
[6]: /tracing/services/inferred_services/#peer-tags
[2]: /tracing/services/service_override_removal
101 changes: 101 additions & 0 deletions content/en/tracing/services/service_override_removal.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
---
title: Service Override Removal
description: Learn how to remove integration service overrides from Datadog.
disable_toc: false
further_reading:
- link: "/tracing/guide/service_overrides"
tag: "Documentation"
text: "Service Overrides"
- link: "/tracing/services/inferred_services"
tag: "Documentation"
text: "Inferred Services"
---

This page explains how to remove integration service overrides, which use integration-specific service names to represent calls to other services. For conceptual background, see [Service Overrides][10] and [Inferred Services][8].

## Prerequisites

Before you remove integration service overrides:

1. You must have the `apm_service_renaming_write` permission.
1. Your Datadog SDK version must support override removal. See [SDK version requirements](#sdk-version-requirements).

### SDK version requirements

| Language | Minimum supported version |
|------------|---------------------------|
| .NET | [3.4.0][1] |
| Go | [1.55.0][2] |
| Java | [1.20.0][3] |
| Node.js | [4.16.0][4] |
| PHP | [0.94.1][5] |
| Python | [1.19.0][6] |
| Ruby | [1.15.0][7] |

## Remove service overrides

To remove service overrides in Datadog:

1. Navigate to **Software Catalog** > **Manage** > [**Manage Remapping Rules**][12], and click **Manage Overrides**.

{{< img src="tracing/guide/service_overrides/SO_removal_page.png" alt="Service Overrides page showing migration progress and removal options" style="width:100%;" >}}

1. For each override you plan to remove, review the related monitors and dashboards.

These assets reference the overridden service name and stop matching after removal. Update them to use the base service name (`service:<DD_SERVICE>`) to preserve functionality.

{{< img src="tracing/guide/service_overrides/SO_removal_page_sidepanel.png" alt="Service override side panel showing affected monitors and dashboards" style="width:100%;" >}}

1. Remove overrides individually or in bulk:
- **Select specific overrides to remove**: Choose individual integration service overrides to remove. A **Migration Progress** bar shows your progress as you remove overrides. This action is reversible.
- **Remove all overrides**: Select **Remove All Overrides** to permanently remove all integration service overrides and prevent future ones from appearing as APM usage increases. Custom service overrides are not affected.

<div class="alert alert-danger">Removing all integration service overrides is permanent and cannot be undone.</div>

## Examples: Service naming after removal

Removing service overrides changes how client spans are tagged and how downstream dependencies are identified. After overrides are removed, client spans use the calling service's name (`service:<DD_SERVICE>`) instead of the integration-specific name. The called dependency is identified using [`peer.*` attributes][11] (for example, database or queue).

**gRPC example:**

| Scenario | Service name | Additional `peer.*` attributes |
|---------------------------|-----------------------------------------------------------|--------------------------------|
| With service overrides | `service:my-service-grpc-client` or `service:grpc-client` | None |
| Without service overrides | `service:myservice` | `@peer.service:otherservice` |

**MySQL example:**

| Scenario | Service name | Additional `peer.*` attributes |
|----------|--------------|--------------------------------|
| With service overrides | `service:my-service-mysql` or `service:mysql` | None |
| Without service overrides | `service:myservice` | `@peer.db.name:user-db`, `@peer.db.system:mysql` |

## Configuration-based removal

You can also remove integration service overrides by setting an environment variable in your application configuration. This approach is useful if you cannot access the Datadog UI.

1. Confirm that your SDK meets the [minimum version requirements](#sdk-version-requirements).
2. Set the following environment variable:
```sh
DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED=true
```

This ensures the `service` attribute always uses the base service name instead of appending the integration name (for example, `*-postgres`, `*-http-client`). Custom service overrides are not affected and must be removed directly in your code.

## Further reading

{{< partial name="whats-next/whats-next.html" >}}

[1]: https://github.com/DataDog/dd-trace-dotnet/releases/tag/v3.4.0
[2]: https://github.com/DataDog/dd-trace-go/releases/tag/v1.55.0
[3]: https://github.com/DataDog/dd-trace-java/releases/tag/v1.20.0
[4]: https://github.com/DataDog/dd-trace-js/releases/tag/v4.16.0
[5]: https://github.com/DataDog/dd-trace-php/releases/tag/0.94.1
[6]: https://github.com/DataDog/dd-trace-py/releases/tag/v1.19.0
[7]: https://github.com/DataDog/dd-trace-rb/releases/tag/v1.15.0
[8]: /tracing/services/inferred_services
[9]: https://app.datadoghq.com/apm/settings/service-naming
[10]: /tracing/guide/service_overrides
[11]: /tracing/services/inferred_services/#peer-tags
[12]: https://app.datadoghq.com/software/settings/service-remapping

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading