Skip to content

Commit 20c5d82

Browse files
[Tracer] Add Azure Service Bus instrumentation (#7413)
## Summary of changes New integration disabled by default, to be enabled with `DD_TRACE_AZURESERVICEBUS_ENABLED=true` ### Created [ServiceBusSenderSendMessagesAsyncIntegration](https://github.com/Azure/azure-sdk-for-net/blob/25a961e365e147fa446cc76b30ecfb8f4abfc90e/sdk/servicebus/Azure.Messaging.ServiceBus/src/Sender/ServiceBusSender.cs#L226) * Creates a span ### Created [ServiceBusReceiverReceiveMessagesAsyncIntegration](https://github.com/Azure/azure-sdk-for-net/blob/25a961e365e147fa446cc76b30ecfb8f4abfc90e/sdk/servicebus/Azure.Messaging.ServiceBus/src/Receiver/ServiceBusReceiver.cs#L298) * On begin: Does nothing. On serverless message reception can block for 60s, so we wait until something is actually read * On end: 1. Creates a new span extracting context from Service Bus message and ~~parents/~~ links. ~~Parenting is used when all contexts are the same, span links otherwise.~~ 2. Rewrites the contex for all messages so they point to the span we just created ### AzureFunctionsCommon changes On service bus trigger, extracts context from service bus messages to set the parent. Given ServiceBusReceiverReceiveMessagesAsyncIntegration this should be one single context, warn otherwise. ### InstrumentMessageIntegration changes Add context to all messages. ### Test coverage Service Bus integration tests for sending, receiving and ~~parenting/~~ linking. ### Limitations * Batching not included
1 parent 8e47328 commit 20c5d82

File tree

46 files changed

+2713
-565
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+2713
-565
lines changed

Datadog.Trace.Samples.g.sln

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples.AWS.Kinesis", "trac
381381
EndProject
382382
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples.AzureServiceBus", "tracer\test\test-applications\integrations\Samples.AzureServiceBus\Samples.AzureServiceBus.csproj", "{BC44A41F-1BED-4438-9F66-0EA5607906D5}"
383383
EndProject
384+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples.AzureServiceBus.APM", "tracer\test\test-applications\integrations\Samples.AzureServiceBus.APM\Samples.AzureServiceBus.APM.csproj", "{BC44A41F-1BED-4438-9F66-0EA5607906D6}"
385+
EndProject
384386
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples.DataStreams.AzureServiceBus", "tracer\test\test-applications\integrations\Samples.DataStreams.AzureServiceBus\Samples.DataStreams.AzureServiceBus.csproj", "{56DE0D44-E9E5-48DA-BAEA-2934B1E28D4E}"
385387
EndProject
386388
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples.AWS.DynamoDBv2", "tracer\test\test-applications\integrations\Samples.AWS.DynamoDBv2\Samples.AWS.DynamoDBv2.csproj", "{D59C5649-BE0E-4A33-B868-B652D8614534}"
@@ -937,6 +939,10 @@ Global
937939
{BC44A41F-1BED-4438-9F66-0EA5607906D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
938940
{BC44A41F-1BED-4438-9F66-0EA5607906D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
939941
{BC44A41F-1BED-4438-9F66-0EA5607906D5}.Release|Any CPU.Build.0 = Release|Any CPU
942+
{BC44A41F-1BED-4438-9F66-0EA5607906D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
943+
{BC44A41F-1BED-4438-9F66-0EA5607906D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
944+
{BC44A41F-1BED-4438-9F66-0EA5607906D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
945+
{BC44A41F-1BED-4438-9F66-0EA5607906D6}.Release|Any CPU.Build.0 = Release|Any CPU
940946
{56DE0D44-E9E5-48DA-BAEA-2934B1E28D4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
941947
{56DE0D44-E9E5-48DA-BAEA-2934B1E28D4E}.Debug|Any CPU.Build.0 = Debug|Any CPU
942948
{56DE0D44-E9E5-48DA-BAEA-2934B1E28D4E}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -1191,6 +1197,7 @@ Global
11911197
{1B3E6BEE-F7AB-433E-A1D9-E8BE3782419B} = {498A300E-D036-49B7-A43D-821D1CAF11A5}
11921198
{C7DE0626-9EB6-475E-AA0C-CB9DE21D4FAE} = {BAF8F246-3645-42AD-B1D0-0F7EAFBAB34A}
11931199
{BC44A41F-1BED-4438-9F66-0EA5607906D5} = {BAF8F246-3645-42AD-B1D0-0F7EAFBAB34A}
1200+
{BC44A41F-1BED-4438-9F66-0EA5607906D6} = {BAF8F246-3645-42AD-B1D0-0F7EAFBAB34A}
11941201
{56DE0D44-E9E5-48DA-BAEA-2934B1E28D4E} = {BAF8F246-3645-42AD-B1D0-0F7EAFBAB34A}
11951202
{D59C5649-BE0E-4A33-B868-B652D8614534} = {BAF8F246-3645-42AD-B1D0-0F7EAFBAB34A}
11961203
{18A6904A-5AFD-4816-AC3F-9F5E433720B5} = {BAF8F246-3645-42AD-B1D0-0F7EAFBAB34A}

Datadog.Trace.sln

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples.AWS.Kinesis", "trac
527527
EndProject
528528
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples.AzureServiceBus", "tracer\test\test-applications\integrations\Samples.AzureServiceBus\Samples.AzureServiceBus.csproj", "{BC44A41F-1BED-4438-9F66-0EA5607906D5}"
529529
EndProject
530+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples.AzureServiceBus.APM", "tracer\test\test-applications\integrations\Samples.AzureServiceBus.APM\Samples.AzureServiceBus.APM.csproj", "{BC44A41F-1BED-4438-9F66-0EA5607906D6}"
531+
EndProject
530532
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples.DataStreams.AzureServiceBus", "tracer\test\test-applications\integrations\Samples.DataStreams.AzureServiceBus\Samples.DataStreams.AzureServiceBus.csproj", "{56DE0D44-E9E5-48DA-BAEA-2934B1E28D4E}"
531533
EndProject
532534
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Datadog.Trace.Tools.dd_dotnet", "tracer\src\Datadog.Trace.Tools.dd_dotnet\Datadog.Trace.Tools.dd_dotnet.csproj", "{B28A33A4-C694-4514-BC30-2680605B0B3D}"
@@ -1321,6 +1323,10 @@ Global
13211323
{BC44A41F-1BED-4438-9F66-0EA5607906D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
13221324
{BC44A41F-1BED-4438-9F66-0EA5607906D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
13231325
{BC44A41F-1BED-4438-9F66-0EA5607906D5}.Release|Any CPU.Build.0 = Release|Any CPU
1326+
{BC44A41F-1BED-4438-9F66-0EA5607906D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
1327+
{BC44A41F-1BED-4438-9F66-0EA5607906D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
1328+
{BC44A41F-1BED-4438-9F66-0EA5607906D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
1329+
{BC44A41F-1BED-4438-9F66-0EA5607906D6}.Release|Any CPU.Build.0 = Release|Any CPU
13241330
{56DE0D44-E9E5-48DA-BAEA-2934B1E28D4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
13251331
{56DE0D44-E9E5-48DA-BAEA-2934B1E28D4E}.Debug|Any CPU.Build.0 = Debug|Any CPU
13261332
{56DE0D44-E9E5-48DA-BAEA-2934B1E28D4E}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -1677,6 +1683,7 @@ Global
16771683
{1B3E6BEE-F7AB-433E-A1D9-E8BE3782419B} = {498A300E-D036-49B7-A43D-821D1CAF11A5}
16781684
{C7DE0626-9EB6-475E-AA0C-CB9DE21D4FAE} = {BAF8F246-3645-42AD-B1D0-0F7EAFBAB34A}
16791685
{BC44A41F-1BED-4438-9F66-0EA5607906D5} = {BAF8F246-3645-42AD-B1D0-0F7EAFBAB34A}
1686+
{BC44A41F-1BED-4438-9F66-0EA5607906D6} = {BAF8F246-3645-42AD-B1D0-0F7EAFBAB34A}
16801687
{56DE0D44-E9E5-48DA-BAEA-2934B1E28D4E} = {BAF8F246-3645-42AD-B1D0-0F7EAFBAB34A}
16811688
{B28A33A4-C694-4514-BC30-2680605B0B3D} = {9E5F0022-0A50-40BF-AC6A-C3078585ECAB}
16821689
{604CE6F2-9E90-4D0B-91CB-EBA06880A7D7} = {8CEC2042-F11C-49F5-A674-2355793B600A}

docker-compose.yml

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,25 @@ services:
209209
- ACCEPT_EULA=Y
210210
- SA_PASSWORD=Strong!Passw0rd
211211

212+
sqledge:
213+
image: mcr.microsoft.com/azure-sql-edge:latest
214+
environment:
215+
- ACCEPT_EULA=Y
216+
- MSSQL_SA_PASSWORD=Strong!Passw0rd
217+
218+
azureservicebus-emulator:
219+
image: mcr.microsoft.com/azure-messaging/servicebus-emulator:1.1.2
220+
hostname: azureservicebus-emulator
221+
container_name: azureservicebus-emulator
222+
depends_on:
223+
- sqledge
224+
environment:
225+
- ACCEPT_EULA=Y
226+
- SQL_SERVER=sqledge:1433
227+
- MSSQL_SA_PASSWORD=Strong!Passw0rd
228+
volumes:
229+
- ./docker/servicebus-emulator-config.json:/ServiceBus_Emulator/ConfigFiles/Config.json:ro
230+
212231
# this docker image doesn't work on arm64. It can still be tested on Mac using colima, see https://github.com/abiosoft/colima
213232
oracle:
214233
image: container-registry.oracle.com/database/free:latest
@@ -425,6 +444,7 @@ services:
425444
- ORACLE_HOST=oracle
426445
- COUCHBASE_HOST=couchbase
427446
- COUCHBASE_PORT=8091
447+
- ASB_CONNECTION_STRING=Endpoint=sb://azureservicebus-emulator:5672;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=SAS_KEY_VALUE;UseDevelopmentEmulator=true;
428448
- CONTAINER_HOSTNAME=http://integrationtests
429449
- DD_LOGGER_DD_API_KEY
430450
- DD_LOGGER_DD_TRACE_LOG_DIRECTORY=/project/artifacts/build_data/infra_logs
@@ -473,6 +493,7 @@ services:
473493
- kafka-zookeeper
474494
- localstack
475495
- couchbase
496+
- azureservicebus-emulator
476497

477498
IntegrationTests.Debugger:
478499
build:
@@ -653,9 +674,10 @@ services:
653674
- kafka-zookeeper
654675
- localstack
655676
- couchbase
677+
- azureservicebus-emulator
656678
environment:
657679
- TIMEOUT_LENGTH=120
658-
command: servicestackredis:6379 stackexchangeredis:6379 stackexchangeredis-replica:6379 stackexchangeredis-single:6379 elasticsearch5:9200 elasticsearch6:9200 elasticsearch7:9200 sqlserver:1433 mongo:27017 postgres:5432 mysql:3306 mysql57:3306 rabbitmq:5672 kafka-broker:9092 kafka-zookeeper:2181 localstack:4566 couchbase:11210 # oracle:1521
680+
command: servicestackredis:6379 stackexchangeredis:6379 stackexchangeredis-replica:6379 stackexchangeredis-single:6379 elasticsearch5:9200 elasticsearch6:9200 elasticsearch7:9200 sqlserver:1433 mongo:27017 postgres:5432 mysql:3306 mysql57:3306 rabbitmq:5672 kafka-broker:9092 kafka-zookeeper:2181 localstack:4566 couchbase:11210 azureservicebus-emulator:5672 # oracle:1521
659681

660682
IntegrationTests.ARM64:
661683
build:
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{
2+
"UserConfig": {
3+
"Namespaces": [
4+
{
5+
"Name": "sbemulatorns",
6+
"Queues": [
7+
{
8+
"Name": "samples-azureservicebus-queue",
9+
"Properties": {
10+
"DeadLetteringOnMessageExpiration": false,
11+
"DefaultMessageTimeToLive": "PT1H",
12+
"LockDuration": "PT1M",
13+
"MaxDeliveryCount": 10,
14+
"EnablePartitioning": false,
15+
"RequiresDuplicateDetection": false,
16+
"RequiresSession": false
17+
}
18+
}
19+
]
20+
}
21+
],
22+
"Logging": {
23+
"Type": "File"
24+
}
25+
}
26+
}

tracer/build/PackageVersionsGeneratorDefinitions.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -864,6 +864,17 @@
864864
"7.*.*"
865865
]
866866
},
867+
{
868+
"IntegrationName": "AzureServiceBusAPM",
869+
"SampleProjectName": "Samples.AzureServiceBus.APM",
870+
"NugetPackageSearchName": "Azure.Messaging.ServiceBus",
871+
"MinVersion": "7.18.0",
872+
"MaxVersionExclusive": "7.21.0",
873+
"SpecificVersions": [
874+
"7.18.*",
875+
"7.*.*"
876+
]
877+
},
867878
{
868879
"IntegrationName": "Selenium",
869880
"SampleProjectName": "Samples.Selenium",

tracer/build/PackageVersionsLatestMajors.g.props

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6102,6 +6102,60 @@ NOTE: This code was generated by the GeneratePackageVersions tool. To safely
61026102
<RequiresDockerDependency>None</RequiresDockerDependency>
61036103
<SampleName>Samples.AzureServiceBus</SampleName>
61046104
</PackageVersionSample>
6105+
<PackageVersionSample Include="test\test-applications\integrations\Samples.AzureServiceBus.APM\Samples.AzureServiceBus.APM.csproj">
6106+
<Properties>ApiVersion=7.20.1;RestoreRecursive=false;BuildProjectReferences=false</Properties>
6107+
<TargetFramework>netcoreapp2.1</TargetFramework>
6108+
<RequiresDockerDependency>All</RequiresDockerDependency>
6109+
<SampleName>Samples.AzureServiceBus.APM</SampleName>
6110+
</PackageVersionSample>
6111+
<PackageVersionSample Include="test\test-applications\integrations\Samples.AzureServiceBus.APM\Samples.AzureServiceBus.APM.csproj">
6112+
<Properties>ApiVersion=7.20.1;RestoreRecursive=false;BuildProjectReferences=false</Properties>
6113+
<TargetFramework>netcoreapp3.0</TargetFramework>
6114+
<RequiresDockerDependency>All</RequiresDockerDependency>
6115+
<SampleName>Samples.AzureServiceBus.APM</SampleName>
6116+
</PackageVersionSample>
6117+
<PackageVersionSample Include="test\test-applications\integrations\Samples.AzureServiceBus.APM\Samples.AzureServiceBus.APM.csproj">
6118+
<Properties>ApiVersion=7.20.1;RestoreRecursive=false;BuildProjectReferences=false</Properties>
6119+
<TargetFramework>netcoreapp3.1</TargetFramework>
6120+
<RequiresDockerDependency>All</RequiresDockerDependency>
6121+
<SampleName>Samples.AzureServiceBus.APM</SampleName>
6122+
</PackageVersionSample>
6123+
<PackageVersionSample Include="test\test-applications\integrations\Samples.AzureServiceBus.APM\Samples.AzureServiceBus.APM.csproj">
6124+
<Properties>ApiVersion=7.20.1;RestoreRecursive=false;BuildProjectReferences=false</Properties>
6125+
<TargetFramework>net5.0</TargetFramework>
6126+
<RequiresDockerDependency>All</RequiresDockerDependency>
6127+
<SampleName>Samples.AzureServiceBus.APM</SampleName>
6128+
</PackageVersionSample>
6129+
<PackageVersionSample Include="test\test-applications\integrations\Samples.AzureServiceBus.APM\Samples.AzureServiceBus.APM.csproj">
6130+
<Properties>ApiVersion=7.20.1;RestoreRecursive=false;BuildProjectReferences=false</Properties>
6131+
<TargetFramework>net6.0</TargetFramework>
6132+
<RequiresDockerDependency>All</RequiresDockerDependency>
6133+
<SampleName>Samples.AzureServiceBus.APM</SampleName>
6134+
</PackageVersionSample>
6135+
<PackageVersionSample Include="test\test-applications\integrations\Samples.AzureServiceBus.APM\Samples.AzureServiceBus.APM.csproj">
6136+
<Properties>ApiVersion=7.20.1;RestoreRecursive=false;BuildProjectReferences=false</Properties>
6137+
<TargetFramework>net7.0</TargetFramework>
6138+
<RequiresDockerDependency>All</RequiresDockerDependency>
6139+
<SampleName>Samples.AzureServiceBus.APM</SampleName>
6140+
</PackageVersionSample>
6141+
<PackageVersionSample Include="test\test-applications\integrations\Samples.AzureServiceBus.APM\Samples.AzureServiceBus.APM.csproj">
6142+
<Properties>ApiVersion=7.20.1;RestoreRecursive=false;BuildProjectReferences=false</Properties>
6143+
<TargetFramework>net8.0</TargetFramework>
6144+
<RequiresDockerDependency>All</RequiresDockerDependency>
6145+
<SampleName>Samples.AzureServiceBus.APM</SampleName>
6146+
</PackageVersionSample>
6147+
<PackageVersionSample Include="test\test-applications\integrations\Samples.AzureServiceBus.APM\Samples.AzureServiceBus.APM.csproj">
6148+
<Properties>ApiVersion=7.20.1;RestoreRecursive=false;BuildProjectReferences=false</Properties>
6149+
<TargetFramework>net9.0</TargetFramework>
6150+
<RequiresDockerDependency>All</RequiresDockerDependency>
6151+
<SampleName>Samples.AzureServiceBus.APM</SampleName>
6152+
</PackageVersionSample>
6153+
<PackageVersionSample Include="test\test-applications\integrations\Samples.AzureServiceBus.APM\Samples.AzureServiceBus.APM.csproj">
6154+
<Properties>ApiVersion=7.20.1;RestoreRecursive=false;BuildProjectReferences=false</Properties>
6155+
<TargetFramework>net10.0</TargetFramework>
6156+
<RequiresDockerDependency>All</RequiresDockerDependency>
6157+
<SampleName>Samples.AzureServiceBus.APM</SampleName>
6158+
</PackageVersionSample>
61056159
<PackageVersionSample Include="test\test-applications\integrations\Samples.Selenium\Samples.Selenium.csproj">
61066160
<Properties>ApiVersion=4.35.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
61076161
<TargetFramework>net48</TargetFramework>

0 commit comments

Comments
 (0)