Skip to content

Commit 81881ad

Browse files
committed
update semconv
1 parent 60bc681 commit 81881ad

File tree

3 files changed

+90
-95
lines changed

3 files changed

+90
-95
lines changed

plugins/node/instrumentation-sequelize/README.md

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -65,21 +65,19 @@ You can set the following:
6565

6666
## Semantic Conventions
6767

68-
This package uses `@opentelemetry/semantic-conventions` version `1.25+`, which implements Semantic Convention [Version 1.7.0](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.7.0/semantic_conventions/README.md)
68+
| Attribute | Short Description |
69+
| ---------------------| --------------------------------------------------------------------------- |
70+
| `db.namespace` | The name of the database being accessed. |
71+
| `db.operation.name` | The name of the operation being executed (e.g. the SQL keyword). |
72+
| `db.collection.name` | The name of the table being accessed. |
73+
| `db.query.text` | The database statement being executed. |
74+
| `db.system.name` | An identifier for the database management system (DBMS) product being used. |
75+
| `server.address` | Remote address of the database. |
76+
| `server.port` | Peer port number of the network connection. |
77+
| `network transport` | OSI transport layer or inter-process communication method. |
6978

7079
Attributes collected:
7180

72-
| Attribute | Short Description |
73-
| ----------------| --------------------------------------------------------------------------- |
74-
| `db.name` | The name of the database being accessed. |
75-
| `db.operation` | The name of the operation being executed. |
76-
| `db.statement` | The database statement being executed. |
77-
| `db.sql.table` | The name of the table being used. |
78-
| `db.system` | An identifier for the database management system (DBMS) product being used. |
79-
| `db.user` | Username for accessing the database. |
80-
| `net.peer.name` | Remote hostname of the database. |
81-
| `net.peer.port` | Port of the database. |
82-
| `net.transport` | The transport protocol being used. |
8381

8482
## Useful links
8583

plugins/node/instrumentation-sequelize/src/instrumentation.ts

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,19 @@ import {
2424
} from '@opentelemetry/api';
2525
import { suppressTracing } from '@opentelemetry/core';
2626
import {
27-
NETTRANSPORTVALUES_IP_TCP,
28-
SEMATTRS_DB_NAME,
29-
SEMATTRS_DB_OPERATION,
30-
SEMATTRS_DB_SQL_TABLE,
31-
SEMATTRS_DB_STATEMENT,
32-
SEMATTRS_DB_SYSTEM,
33-
SEMATTRS_DB_USER,
34-
SEMATTRS_NET_PEER_NAME,
35-
SEMATTRS_NET_PEER_PORT,
36-
SEMATTRS_NET_TRANSPORT,
27+
ATTR_DB_COLLECTION_NAME,
28+
ATTR_DB_OPERATION_NAME,
29+
ATTR_DB_NAMESPACE,
30+
ATTR_DB_QUERY_TEXT,
31+
ATTR_DB_SYSTEM_NAME,
32+
ATTR_SERVER_ADDRESS,
33+
ATTR_SERVER_PORT,
34+
ATTR_NETWORK_TRANSPORT,
35+
NETWORK_TRANSPORT_VALUE_TCP,
3736
} from '@opentelemetry/semantic-conventions';
3837
import type * as sequelize from 'sequelize';
3938
import { SequelizeInstrumentationConfig } from './types';
39+
/** @knipignore */
4040
import { PACKAGE_NAME, PACKAGE_VERSION } from './version';
4141
import { extractTableFromQuery } from './utils';
4242
import {
@@ -164,17 +164,14 @@ export class SequelizeInstrumentation extends InstrumentationBase<SequelizeInstr
164164

165165
// eslint-disable-next-line @typescript-eslint/no-explicit-any
166166
const attributes: Record<string, any> = {
167-
[SEMATTRS_DB_SYSTEM]: sequelizeInstance.getDialect(),
168-
[SEMATTRS_DB_USER]: config?.username,
169-
[SEMATTRS_NET_PEER_NAME]: config?.host,
170-
[SEMATTRS_NET_PEER_PORT]: config?.port
171-
? Number(config?.port)
172-
: undefined,
173-
[SEMATTRS_NET_TRANSPORT]: self._getNetTransport(config?.protocol),
174-
[SEMATTRS_DB_NAME]: config?.database,
175-
[SEMATTRS_DB_OPERATION]: operation,
176-
[SEMATTRS_DB_STATEMENT]: statement,
177-
[SEMATTRS_DB_SQL_TABLE]: tableName,
167+
[ATTR_DB_SYSTEM_NAME]: sequelizeInstance.getDialect(),
168+
[ATTR_DB_NAMESPACE]: config?.database,
169+
[ATTR_DB_OPERATION_NAME]: operation,
170+
[ATTR_DB_QUERY_TEXT]: statement,
171+
[ATTR_DB_COLLECTION_NAME]: tableName,
172+
[ATTR_SERVER_ADDRESS]: config?.host,
173+
[ATTR_SERVER_PORT]: config?.port ? Number(config?.port) : undefined,
174+
[ATTR_NETWORK_TRANSPORT]: self._getNetTransport(config?.protocol),
178175
};
179176

180177
Object.entries(attributes).forEach(([key, value]) => {
@@ -244,7 +241,7 @@ export class SequelizeInstrumentation extends InstrumentationBase<SequelizeInstr
244241
private _getNetTransport(protocol: string) {
245242
switch (protocol) {
246243
case 'tcp':
247-
return NETTRANSPORTVALUES_IP_TCP;
244+
return NETWORK_TRANSPORT_VALUE_TCP;
248245
default:
249246
return undefined;
250247
}

plugins/node/instrumentation-sequelize/test/sequelize.test.ts

Lines changed: 61 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,13 @@ import {
2525
ROOT_CONTEXT,
2626
} from '@opentelemetry/api';
2727
import {
28-
SEMATTRS_DB_NAME,
29-
SEMATTRS_DB_STATEMENT,
30-
SEMATTRS_DB_SQL_TABLE,
31-
SEMATTRS_NET_PEER_NAME,
32-
SEMATTRS_NET_PEER_PORT,
33-
SEMATTRS_DB_OPERATION,
34-
SEMATTRS_DB_SYSTEM,
35-
SEMATTRS_DB_USER,
28+
ATTR_DB_COLLECTION_NAME,
29+
ATTR_DB_OPERATION_NAME,
30+
ATTR_DB_NAMESPACE,
31+
ATTR_DB_QUERY_TEXT,
32+
ATTR_DB_SYSTEM_NAME,
33+
ATTR_SERVER_ADDRESS,
34+
ATTR_SERVER_PORT,
3635
} from '@opentelemetry/semantic-conventions';
3736
import {
3837
getTestSpans,
@@ -65,12 +64,12 @@ describe('instrumentation-sequelize', () => {
6564
describe('postgres', () => {
6665
const DB_SYSTEM = 'postgres';
6766
const DB_USER = 'some-user';
68-
const NET_PEER_NAME = 'localhost';
69-
const NET_PEER_PORT = 12345;
67+
const SERVER_ADDRESS = 'localhost';
68+
const SERVER_PORT = 12345;
7069
const DB_NAME = 'my-db';
7170

7271
const instance = new sequelize.Sequelize(
73-
`${DB_SYSTEM}://${DB_USER}@${NET_PEER_NAME}:${NET_PEER_PORT}/${DB_NAME}`,
72+
`${DB_SYSTEM}://${DB_USER}@${SERVER_ADDRESS}:${SERVER_PORT}/${DB_NAME}`,
7473
{ logging: false }
7574
);
7675
class User extends sequelize.Model {
@@ -93,15 +92,14 @@ describe('instrumentation-sequelize', () => {
9392
assert.strictEqual(spans[0].status.code, SpanStatusCode.ERROR);
9493
const attributes = spans[0].attributes;
9594

96-
assert.strictEqual(attributes[SEMATTRS_DB_SYSTEM], DB_SYSTEM);
97-
assert.strictEqual(attributes[SEMATTRS_DB_USER], DB_USER);
98-
assert.strictEqual(attributes[SEMATTRS_NET_PEER_NAME], NET_PEER_NAME);
99-
assert.strictEqual(attributes[SEMATTRS_NET_PEER_PORT], NET_PEER_PORT);
100-
assert.strictEqual(attributes[SEMATTRS_DB_NAME], DB_NAME);
101-
assert.strictEqual(attributes[SEMATTRS_DB_OPERATION], 'INSERT');
102-
assert.strictEqual(attributes[SEMATTRS_DB_SQL_TABLE], 'Users');
95+
assert.strictEqual(attributes[ATTR_DB_SYSTEM_NAME], DB_SYSTEM);
96+
assert.strictEqual(attributes[ATTR_SERVER_ADDRESS], SERVER_ADDRESS);
97+
assert.strictEqual(attributes[ATTR_SERVER_PORT], SERVER_PORT);
98+
assert.strictEqual(attributes[ATTR_DB_NAMESPACE], DB_NAME);
99+
assert.strictEqual(attributes[ATTR_DB_OPERATION_NAME], 'INSERT');
100+
assert.strictEqual(attributes[ATTR_DB_COLLECTION_NAME], 'Users');
103101
assert.match(
104-
attributes[SEMATTRS_DB_STATEMENT] as string,
102+
attributes[ATTR_DB_QUERY_TEXT] as string,
105103
/INSERT INTO "Users" \("id","firstName","createdAt","updatedAt"\) VALUES \(DEFAULT,\$1,\$2,\$3\) RETURNING (\*|"id","firstName","createdAt","updatedAt");/
106104
);
107105
});
@@ -112,10 +110,10 @@ describe('instrumentation-sequelize', () => {
112110
assert.strictEqual(spans.length, 1);
113111
const attributes = spans[0].attributes;
114112

115-
assert.strictEqual(attributes[SEMATTRS_DB_OPERATION], 'SELECT');
116-
assert.strictEqual(attributes[SEMATTRS_DB_SQL_TABLE], 'Users');
113+
assert.strictEqual(attributes[ATTR_DB_OPERATION_NAME], 'SELECT');
114+
assert.strictEqual(attributes[ATTR_DB_COLLECTION_NAME], 'Users');
117115
assert.strictEqual(
118-
attributes[SEMATTRS_DB_STATEMENT],
116+
attributes[ATTR_DB_QUERY_TEXT],
119117
'SELECT "id", "firstName", "createdAt", "updatedAt" FROM "Users" AS "User";'
120118
);
121119
});
@@ -126,9 +124,9 @@ describe('instrumentation-sequelize', () => {
126124
assert.strictEqual(spans.length, 1);
127125
const attributes = spans[0].attributes;
128126

129-
assert.strictEqual(attributes[SEMATTRS_DB_OPERATION], 'BULKDELETE');
130-
assert.strictEqual(attributes[SEMATTRS_DB_SQL_TABLE], 'Users');
131-
assert.strictEqual(attributes[SEMATTRS_DB_STATEMENT], 'TRUNCATE "Users"');
127+
assert.strictEqual(attributes[ATTR_DB_OPERATION_NAME], 'BULKDELETE');
128+
assert.strictEqual(attributes[ATTR_DB_COLLECTION_NAME], 'Users');
129+
assert.strictEqual(attributes[ATTR_DB_QUERY_TEXT], 'TRUNCATE "Users"');
132130
});
133131

134132
it('count is instrumented', async () => {
@@ -137,10 +135,10 @@ describe('instrumentation-sequelize', () => {
137135
assert.strictEqual(spans.length, 1);
138136
const attributes = spans[0].attributes;
139137

140-
assert.strictEqual(attributes[SEMATTRS_DB_OPERATION], 'SELECT');
141-
assert.strictEqual(attributes[SEMATTRS_DB_SQL_TABLE], 'Users');
138+
assert.strictEqual(attributes[ATTR_DB_OPERATION_NAME], 'SELECT');
139+
assert.strictEqual(attributes[ATTR_DB_COLLECTION_NAME], 'Users');
142140
assert.strictEqual(
143-
attributes[SEMATTRS_DB_STATEMENT],
141+
attributes[ATTR_DB_QUERY_TEXT],
144142
'SELECT count(*) AS "count" FROM "Users" AS "User";'
145143
);
146144
});
@@ -167,10 +165,10 @@ describe('instrumentation-sequelize', () => {
167165
assert.strictEqual(spans.length, 1);
168166
const attributes = spans[0].attributes;
169167

170-
assert.strictEqual(attributes[SEMATTRS_DB_OPERATION], 'SELECT');
171-
assert.strictEqual(attributes[SEMATTRS_DB_SQL_TABLE], 'Users');
168+
assert.strictEqual(attributes[ATTR_DB_OPERATION_NAME], 'SELECT');
169+
assert.strictEqual(attributes[ATTR_DB_COLLECTION_NAME], 'Users');
172170
assert.strictEqual(
173-
attributes[SEMATTRS_DB_STATEMENT],
171+
attributes[ATTR_DB_QUERY_TEXT],
174172
'SELECT "id", "username" FROM "Users" AS "User" WHERE "User"."username" = \'Shlomi\' AND ("User"."rank" < 1000 OR "User"."rank" IS NULL) ORDER BY "User"."username" DESC LIMIT 10 OFFSET 5;'
175173
);
176174
});
@@ -184,7 +182,10 @@ describe('instrumentation-sequelize', () => {
184182
const spans = getSequelizeSpans();
185183
assert.strictEqual(spans.length, 1);
186184
const attributes = spans[0].attributes;
187-
assert.strictEqual(attributes[SEMATTRS_DB_SQL_TABLE], expectedTableName);
185+
assert.strictEqual(
186+
attributes[ATTR_DB_COLLECTION_NAME],
187+
expectedTableName
188+
);
188189
});
189190

190191
it('handles JOIN queries', async () => {
@@ -217,10 +218,10 @@ describe('instrumentation-sequelize', () => {
217218
assert.strictEqual(spans.length, 1);
218219
const attributes = spans[0].attributes;
219220

220-
assert.strictEqual(attributes[SEMATTRS_DB_OPERATION], 'SELECT');
221-
assert.strictEqual(attributes[SEMATTRS_DB_SQL_TABLE], 'Dogs,Users');
221+
assert.strictEqual(attributes[ATTR_DB_OPERATION_NAME], 'SELECT');
222+
assert.strictEqual(attributes[ATTR_DB_COLLECTION_NAME], 'Dogs,Users');
222223
assert.strictEqual(
223-
attributes[SEMATTRS_DB_STATEMENT],
224+
attributes[ATTR_DB_QUERY_TEXT],
224225
'SELECT "Dog"."id", "Dog"."firstName", "Dog"."owner", "User"."id" AS "User.id", "User"."firstName" AS "User.firstName" FROM "Dogs" AS "Dog" INNER JOIN "Users" AS "User" ON "Dog"."firstName" = "User"."id" LIMIT 1;'
225226
);
226227
});
@@ -229,13 +230,13 @@ describe('instrumentation-sequelize', () => {
229230
describe('mysql', () => {
230231
const DB_SYSTEM = 'mysql';
231232
const DB_USER = 'RickSanchez';
232-
const NET_PEER_NAME = 'localhost';
233-
const NET_PEER_PORT = 34567;
233+
const SERVER_NAME = 'localhost';
234+
const SERVER_PORT = 34567;
234235
const DB_NAME = 'mysql-db';
235236

236237
const instance = new sequelize.Sequelize(DB_NAME, DB_USER, 'password', {
237-
host: NET_PEER_NAME,
238-
port: NET_PEER_PORT,
238+
host: SERVER_NAME,
239+
port: SERVER_PORT,
239240
dialect: DB_SYSTEM,
240241
});
241242

@@ -252,15 +253,14 @@ describe('instrumentation-sequelize', () => {
252253
assert.strictEqual(spans[0].status.code, SpanStatusCode.ERROR);
253254
const attributes = spans[0].attributes;
254255

255-
assert.strictEqual(attributes[SEMATTRS_DB_SYSTEM], DB_SYSTEM);
256-
assert.strictEqual(attributes[SEMATTRS_DB_USER], DB_USER);
257-
assert.strictEqual(attributes[SEMATTRS_NET_PEER_NAME], NET_PEER_NAME);
258-
assert.strictEqual(attributes[SEMATTRS_NET_PEER_PORT], NET_PEER_PORT);
259-
assert.strictEqual(attributes[SEMATTRS_DB_NAME], DB_NAME);
260-
assert.strictEqual(attributes[SEMATTRS_DB_OPERATION], 'INSERT');
261-
assert.strictEqual(attributes[SEMATTRS_DB_SQL_TABLE], 'Users');
256+
assert.strictEqual(attributes[ATTR_DB_SYSTEM_NAME], DB_SYSTEM);
257+
assert.strictEqual(attributes[ATTR_SERVER_ADDRESS], SERVER_NAME);
258+
assert.strictEqual(attributes[ATTR_SERVER_PORT], SERVER_PORT);
259+
assert.strictEqual(attributes[ATTR_DB_NAMESPACE], DB_NAME);
260+
assert.strictEqual(attributes[ATTR_DB_OPERATION_NAME], 'INSERT');
261+
assert.strictEqual(attributes[ATTR_DB_COLLECTION_NAME], 'Users');
262262
assert.strictEqual(
263-
attributes[SEMATTRS_DB_STATEMENT],
263+
attributes[ATTR_DB_QUERY_TEXT],
264264
'INSERT INTO `Users` (`id`,`firstName`,`createdAt`,`updatedAt`) VALUES (DEFAULT,$1,$2,$3);'
265265
);
266266
});
@@ -271,10 +271,10 @@ describe('instrumentation-sequelize', () => {
271271
assert.strictEqual(spans.length, 1);
272272
const attributes = spans[0].attributes;
273273

274-
assert.strictEqual(attributes[SEMATTRS_DB_OPERATION], 'SELECT');
275-
assert.strictEqual(attributes[SEMATTRS_DB_SQL_TABLE], 'Users');
274+
assert.strictEqual(attributes[ATTR_DB_OPERATION_NAME], 'SELECT');
275+
assert.strictEqual(attributes[ATTR_DB_COLLECTION_NAME], 'Users');
276276
assert.strictEqual(
277-
attributes[SEMATTRS_DB_STATEMENT],
277+
attributes[ATTR_DB_QUERY_TEXT],
278278
'SELECT `id`, `firstName`, `createdAt`, `updatedAt` FROM `Users` AS `User`;'
279279
);
280280
});
@@ -290,8 +290,8 @@ describe('instrumentation-sequelize', () => {
290290
assert.strictEqual(spans.length, 1);
291291
const attributes = spans[0].attributes;
292292

293-
assert.strictEqual(attributes[SEMATTRS_DB_OPERATION], 'SELECT');
294-
assert.strictEqual(attributes[SEMATTRS_DB_STATEMENT], 'SELECT 1 + 1');
293+
assert.strictEqual(attributes[ATTR_DB_OPERATION_NAME], 'SELECT');
294+
assert.strictEqual(attributes[ATTR_DB_QUERY_TEXT], 'SELECT 1 + 1');
295295
});
296296
it('with type not specified in options', async () => {
297297
try {
@@ -303,8 +303,8 @@ describe('instrumentation-sequelize', () => {
303303
assert.strictEqual(spans.length, 1);
304304
const attributes = spans[0].attributes;
305305

306-
assert.strictEqual(attributes[SEMATTRS_DB_OPERATION], 'SELECT');
307-
assert.strictEqual(attributes[SEMATTRS_DB_STATEMENT], 'SELECT 1 + 1');
306+
assert.strictEqual(attributes[ATTR_DB_OPERATION_NAME], 'SELECT');
307+
assert.strictEqual(attributes[ATTR_DB_QUERY_TEXT], 'SELECT 1 + 1');
308308
});
309309

310310
it('with type specified in options', async () => {
@@ -319,8 +319,8 @@ describe('instrumentation-sequelize', () => {
319319
assert.strictEqual(spans.length, 1);
320320
const attributes = spans[0].attributes;
321321

322-
assert.strictEqual(attributes[SEMATTRS_DB_OPERATION], 'RAW');
323-
assert.strictEqual(attributes[SEMATTRS_DB_STATEMENT], 'SELECT 1 + 1');
322+
assert.strictEqual(attributes[ATTR_DB_OPERATION_NAME], 'RAW');
323+
assert.strictEqual(attributes[ATTR_DB_QUERY_TEXT], 'SELECT 1 + 1');
324324
});
325325
});
326326
});
@@ -340,12 +340,12 @@ describe('instrumentation-sequelize', () => {
340340
const spans = getSequelizeSpans();
341341
assert.strictEqual(spans.length, 1);
342342
const attributes = spans[0].attributes;
343-
assert.strictEqual(attributes[SEMATTRS_DB_SYSTEM], 'sqlite');
344-
assert.strictEqual(attributes[SEMATTRS_NET_PEER_NAME], 'memory');
345-
assert.strictEqual(attributes[SEMATTRS_DB_OPERATION], 'INSERT');
346-
assert.strictEqual(attributes[SEMATTRS_DB_SQL_TABLE], 'Users');
343+
assert.strictEqual(attributes[ATTR_DB_SYSTEM_NAME], 'sqlite');
344+
assert.strictEqual(attributes[ATTR_SERVER_ADDRESS], 'memory');
345+
assert.strictEqual(attributes[ATTR_DB_OPERATION_NAME], 'INSERT');
346+
assert.strictEqual(attributes[ATTR_DB_COLLECTION_NAME], 'Users');
347347
assert.strictEqual(
348-
attributes[SEMATTRS_DB_STATEMENT],
348+
attributes[ATTR_DB_QUERY_TEXT],
349349
'INSERT INTO `Users` (`id`,`firstName`,`createdAt`,`updatedAt`) VALUES (NULL,$1,$2,$3);'
350350
);
351351
});

0 commit comments

Comments
 (0)