Skip to content

Commit 62408d3

Browse files
[SqlClient] Support new DB convention: db.system.name (open-telemetry#2727)
Co-authored-by: Rajkumar Rangaraj <[email protected]>
1 parent b01f5f3 commit 62408d3

File tree

5 files changed

+39
-16
lines changed

5 files changed

+39
-16
lines changed

src/OpenTelemetry.Instrumentation.SqlClient/Implementation/SqlActivitySourceHelper.cs

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ namespace OpenTelemetry.Instrumentation.SqlClient.Implementation;
1515
/// </summary>
1616
internal sealed class SqlActivitySourceHelper
1717
{
18-
public const string MicrosoftSqlServerDatabaseSystemName = "mssql";
18+
public const string MicrosoftSqlServerDbSystemName = "microsoft.sql_server";
19+
public const string MicrosoftSqlServerDbSystem = "mssql";
1920

2021
public static readonly Assembly Assembly = typeof(SqlActivitySourceHelper).Assembly;
2122
public static readonly AssemblyName AssemblyName = Assembly.GetName();
@@ -34,6 +35,7 @@ internal sealed class SqlActivitySourceHelper
3435
internal static readonly string[] SharedTagNames =
3536
[
3637
SemanticConventions.AttributeDbSystem,
38+
SemanticConventions.AttributeDbSystemName,
3739
SemanticConventions.AttributeDbCollectionName,
3840
SemanticConventions.AttributeDbNamespace,
3941
SemanticConventions.AttributeDbResponseStatusCode,
@@ -45,12 +47,21 @@ internal sealed class SqlActivitySourceHelper
4547

4648
public static TagList GetTagListFromConnectionInfo(string? dataSource, string? databaseName, SqlClientTraceInstrumentationOptions options, out string activityName)
4749
{
48-
activityName = MicrosoftSqlServerDatabaseSystemName;
50+
activityName = options.EmitNewAttributes
51+
? MicrosoftSqlServerDbSystemName
52+
: MicrosoftSqlServerDbSystem;
4953

50-
var tags = new TagList
54+
var tags = new TagList { };
55+
56+
if (options.EmitOldAttributes)
5157
{
52-
{ SemanticConventions.AttributeDbSystem, MicrosoftSqlServerDatabaseSystemName },
53-
};
58+
tags.Add(SemanticConventions.AttributeDbSystem, MicrosoftSqlServerDbSystem);
59+
}
60+
61+
if (options.EmitNewAttributes)
62+
{
63+
tags.Add(SemanticConventions.AttributeDbSystemName, MicrosoftSqlServerDbSystemName);
64+
}
5465

5566
if (dataSource != null)
5667
{
@@ -80,7 +91,7 @@ public static TagList GetTagListFromConnectionInfo(string? dataSource, string? d
8091
tags.Add(SemanticConventions.AttributeServerPort, connectionDetails.Port);
8192
}
8293

83-
if (activityName == MicrosoftSqlServerDatabaseSystemName)
94+
if (activityName == MicrosoftSqlServerDbSystem || activityName == MicrosoftSqlServerDbSystemName)
8495
{
8596
activityName = connectionDetails.Port.HasValue
8697
? $"{serverAddress}:{connectionDetails.Port}" // TODO: Another opportunity to refactor SqlConnectionDetails

src/OpenTelemetry.Instrumentation.SqlClient/Implementation/SqlEventSourceListener.netfx.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,17 @@ private void RecordDuration(Activity? activity, EventWrittenEventArgs eventData)
253253
}
254254
else
255255
{
256-
tags.Add(SemanticConventions.AttributeDbSystem, SqlActivitySourceHelper.MicrosoftSqlServerDatabaseSystemName);
256+
var options = SqlClientInstrumentation.TracingOptions;
257+
258+
if (options.EmitOldAttributes)
259+
{
260+
tags.Add(SemanticConventions.AttributeDbSystem, SqlActivitySourceHelper.MicrosoftSqlServerDbSystem);
261+
}
262+
263+
if (options.EmitNewAttributes)
264+
{
265+
tags.Add(SemanticConventions.AttributeDbSystemName, SqlActivitySourceHelper.MicrosoftSqlServerDbSystemName);
266+
}
257267

258268
var (hasError, errorNumber, exceptionType) = ExtractErrorFromEvent(eventData);
259269

src/Shared/SemanticConventions.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ internal static class SemanticConventions
4848
public const string AttributeDbJdbcDriverClassName = "db.jdbc.driver_classname";
4949
public const string AttributeDbName = "db.name";
5050
public const string AttributeDbStatement = "db.statement";
51+
public const string AttributeDbSystem = "db.system";
5152
public const string AttributeDbOperation = "db.operation";
5253
public const string AttributeDbInstance = "db.instance";
5354
public const string AttributeDbCassandraKeyspace = "db.cassandra.keyspace";
@@ -138,9 +139,9 @@ internal static class SemanticConventions
138139
public const string AttributeMessagingKafkaMessageKey = "messaging.kafka.message.key";
139140
public const string AttributeMessagingKafkaMessageOffset = "messaging.kafka.message.offset";
140141

141-
// New database conventions as of commit:
142-
// https://github.com/open-telemetry/semantic-conventions/blob/25f74191d749645fdd5ec42ae661438cf2c1cf51/docs/database/database-spans.md#common-attributes
143-
public const string AttributeDbSystem = "db.system";
142+
// New database conventions:
143+
// https://github.com/open-telemetry/semantic-conventions/blob/main/docs/database
144+
public const string AttributeDbSystemName = "db.system.name";
144145
public const string AttributeDbCollectionName = "db.collection.name";
145146
public const string AttributeDbNamespace = "db.namespace";
146147
public const string AttributeDbOperationName = "db.operation.name";

test/OpenTelemetry.Instrumentation.SqlClient.Tests/SqlClientTests.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -469,15 +469,15 @@ internal static void VerifyActivityData(
469469
Assert.DoesNotContain(activity.Tags, tag => tag.Key == "enriched");
470470
}
471471

472-
Assert.Equal(SqlActivitySourceHelper.MicrosoftSqlServerDatabaseSystemName, activity.GetTagValue(SemanticConventions.AttributeDbSystem));
473-
474472
if (emitOldAttributes)
475473
{
474+
Assert.Equal(SqlActivitySourceHelper.MicrosoftSqlServerDbSystem, activity.GetTagValue(SemanticConventions.AttributeDbSystem));
476475
Assert.Equal("master", activity.GetTagValue(SemanticConventions.AttributeDbName));
477476
}
478477

479478
if (emitNewAttributes)
480479
{
480+
Assert.Equal(SqlActivitySourceHelper.MicrosoftSqlServerDbSystemName, activity.GetTagValue(SemanticConventions.AttributeDbSystemName));
481481
Assert.Equal("MSSQLLocalDB.master", activity.GetTagValue(SemanticConventions.AttributeDbNamespace));
482482
}
483483

@@ -556,15 +556,15 @@ internal static void VerifySamplingParameters(SamplingParameters samplingParamet
556556
samplingParameters.Tags,
557557
kvp => kvp.Key == SemanticConventions.AttributeDbSystem
558558
&& kvp.Value != null
559-
&& (string)kvp.Value == SqlActivitySourceHelper.MicrosoftSqlServerDatabaseSystemName);
559+
&& (string)kvp.Value == SqlActivitySourceHelper.MicrosoftSqlServerDbSystem);
560560
}
561561

562562
internal static void VerifySamplingParameters(SqlClientTestCase testCase, Activity activity, SamplingParameters samplingParameters)
563563
{
564564
Assert.NotNull(samplingParameters.Tags);
565565

566566
Assert.Equal(testCase.ExpectedActivityName, activity.DisplayName);
567-
Assert.Equal(SqlActivitySourceHelper.MicrosoftSqlServerDatabaseSystemName, activity.GetTagItem(SemanticConventions.AttributeDbSystem));
567+
Assert.Equal(SqlActivitySourceHelper.MicrosoftSqlServerDbSystem, activity.GetTagItem(SemanticConventions.AttributeDbSystem));
568568
Assert.Equal(testCase.ExpectedDbNamespace, activity.GetTagItem(SemanticConventions.AttributeDbName));
569569
Assert.Equal(testCase.ExpectedServerAddress, activity.GetTagItem(SemanticConventions.AttributeServerAddress));
570570
Assert.Equal(testCase.ExpectedPort, activity.GetTagItem(SemanticConventions.AttributeServerPort));
@@ -574,7 +574,7 @@ internal static void VerifySamplingParameters(SqlClientTestCase testCase, Activi
574574
samplingParameters.Tags,
575575
kvp => kvp.Key == SemanticConventions.AttributeDbSystem
576576
&& kvp.Value is string
577-
&& (string)kvp.Value == SqlActivitySourceHelper.MicrosoftSqlServerDatabaseSystemName);
577+
&& (string)kvp.Value == SqlActivitySourceHelper.MicrosoftSqlServerDbSystem);
578578

579579
if (testCase.ExpectedDbNamespace != null)
580580
{

test/OpenTelemetry.Instrumentation.SqlClient.Tests/SqlEventSourceTests.netfx.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,6 @@ private static void VerifyActivityData(
317317
}
318318

319319
Assert.Equal(ActivityKind.Client, activity.Kind);
320-
Assert.Equal(SqlActivitySourceHelper.MicrosoftSqlServerDatabaseSystemName, activity.GetTagValue(SemanticConventions.AttributeDbSystem));
321320

322321
var connectionDetails = SqlConnectionDetails.ParseFromDataSource(dataSource);
323322

@@ -346,11 +345,13 @@ private static void VerifyActivityData(
346345

347346
if (emitOldAttributes)
348347
{
348+
Assert.Equal(SqlActivitySourceHelper.MicrosoftSqlServerDbSystem, activity.GetTagValue(SemanticConventions.AttributeDbSystem));
349349
Assert.Equal("master", activity.GetTagValue(SemanticConventions.AttributeDbName));
350350
}
351351

352352
if (emitNewAttributes)
353353
{
354+
Assert.Equal(SqlActivitySourceHelper.MicrosoftSqlServerDbSystemName, activity.GetTagValue(SemanticConventions.AttributeDbSystemName));
354355
Assert.Equal("instanceName.master", activity.GetTagValue(SemanticConventions.AttributeDbNamespace));
355356
}
356357

0 commit comments

Comments
 (0)