Skip to content

Commit df306ac

Browse files
authored
Emit database query spans as OpenTelemetry clients (#1334)
* Emit database query spans as OTel clients * Update telemetry example span assertions
1 parent 9db187c commit df306ac

2 files changed

Lines changed: 25 additions & 1 deletion

File tree

examples/telemetry/test.hurl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,8 @@ body contains "\"service.name\""
4040
body contains "\"sqlpage\""
4141
body contains "\"nginx\""
4242
body contains "\"name\":\"GET /\""
43-
body contains "\"db.query\""
43+
body contains "\"name\":\"SELECT\""
44+
body contains "\"kind\":\"SPAN_KIND_CLIENT\""
45+
body contains "\"db.query.text\""
46+
body contains "\"db.system.name\""
47+
body contains "\"db.operation.name\""

src/webserver/database/execute_queries.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,8 @@ fn create_db_query_span(
120120
let operation_name = sql.split_whitespace().next().unwrap_or("").to_uppercase();
121121
let span = tracing::info_span!(
122122
"db.query",
123+
"otel.kind" = "client",
124+
"otel.name" = %operation_name,
123125
{ otel::DB_QUERY_TEXT } = sql,
124126
{ otel::DB_SYSTEM_NAME } = db_system_name,
125127
{ otel::DB_OPERATION_NAME } = operation_name,
@@ -892,6 +894,24 @@ mod tests {
892894
.expect("closed span fields")
893895
}
894896

897+
#[test]
898+
fn db_query_span_uses_otel_database_client_semantics() {
899+
let fields = with_recorded_span_fields(|| {
900+
let (span, operation_name) =
901+
create_db_query_span("select * from users", Path::new("index.sql"), 7, "sqlite");
902+
assert_eq!(operation_name, "SELECT");
903+
drop(span);
904+
});
905+
906+
assert_eq!(fields["otel.kind"], "client");
907+
assert_eq!(fields["otel.name"], "SELECT");
908+
assert_eq!(fields[otel::DB_QUERY_TEXT], "select * from users");
909+
assert_eq!(fields[otel::DB_SYSTEM_NAME], "sqlite");
910+
assert_eq!(fields[otel::DB_OPERATION_NAME], "SELECT");
911+
assert_eq!(fields[otel::CODE_FILE_PATH], "index.sql");
912+
assert_eq!(fields[otel::CODE_LINE_NUMBER], "7");
913+
}
914+
895915
#[test]
896916
fn db_query_success_records_ok_status_and_row_count() {
897917
let fields = with_recorded_span_fields(|| {

0 commit comments

Comments
 (0)