Skip to content

Commit 10a5fe6

Browse files
authored
Merge branch 'main' into chore/deprecate-jaeger-exporter
2 parents d10c38a + 2f715bd commit 10a5fe6

File tree

7 files changed

+82
-2
lines changed

7 files changed

+82
-2
lines changed

experimental/CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ All notable changes to experimental packages in this project will be documented
1212

1313
* feat: use HTTP_ROUTE in span name [#3603](https://github.com/open-telemetry/opentelemetry-js/pull/3603) @Flarna
1414
* feat: add HTTP_ROUTE attribute to http incoming metrics if present [#3581](https://github.com/open-telemetry/opentelemetry-js/pull/3581) @hermogenes
15+
* feat(opentelemetry-instrumentation-grpc): allow to add attributes from grpc metadata in the patched server [#3589](https://github.com/open-telemetry/opentelemetry-js/pull/3589) @zombispormedio
1516
* feat(sdk-node): install diag logger with OTEL_LOG_LEVEL [#3627](https://github.com/open-telemetry/opentelemetry-js/pull/3627) @legendecas
1617
* feat(otlp-exporter-base): add retries [#3207](https://github.com/open-telemetry/opentelemetry-js/pull/3207) @svetlanabrennan
1718
* feat(sdk-node): override IdGenerator when using NodeSDK [#3645](https://github.com/open-telemetry/opentelemetry-js/pull/3645) @haddasbronfman

experimental/packages/opentelemetry-instrumentation-grpc/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ gRPC instrumentation accepts the following configuration:
4747
| Options | Type | Description |
4848
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
4949
| [`ignoreGrpcMethods`](https://github.com/open-telemetry/opentelemetry-js/blob/main/experimental/packages/opentelemetry-instrumentation-grpc/src/types.ts#L25) | `IgnoreMatcher[]` | gRPC instrumentation will not trace any methods that match anything in this list. You may pass a string (case-insensitive match), a `RegExp` object, or a filter function. |
50-
| [`metadataToSpanAttributes`](https://github.com/open-telemetry/opentelemetry-js/blob/main/experimental/packages/opentelemetry-instrumentation-grpc/src/types.ts#L27) | `object` | List of case insensitive metadata to convert to span attributes. Client (outgoing requests, incoming responses) metadata attributes will be converted to span attributes in the form of `rpc.{request\response}.metadata.metadata_key`, e.g. `rpc.response.metadata.date` |
50+
| [`metadataToSpanAttributes`](https://github.com/open-telemetry/opentelemetry-js/blob/main/experimental/packages/opentelemetry-instrumentation-grpc/src/types.ts#L27) | `object` | List of case insensitive metadata to convert to span attributes. Client and server (outgoing requests, incoming responses) metadata attributes will be converted to span attributes in the form of `rpc.{request\response}.metadata.metadata_key`, e.g. `rpc.response.metadata.date` |
5151

5252
## Useful links
5353

experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/index.ts

+28
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,24 @@ export class GrpcJsInstrumentation extends InstrumentationBase {
212212
[SemanticAttributes.RPC_SERVICE]: service,
213213
});
214214

215+
instrumentation._metadataCapture.server.captureRequestMetadata(
216+
span,
217+
call.metadata
218+
);
219+
220+
instrumentation._wrap(
221+
call,
222+
'sendMetadata',
223+
originalSendMetadata =>
224+
(responseMetadata: grpcJs.Metadata) => {
225+
instrumentation._metadataCapture.server.captureResponseMetadata(
226+
span,
227+
responseMetadata
228+
);
229+
originalSendMetadata.call(call, responseMetadata);
230+
}
231+
);
232+
215233
context.with(trace.setSpan(context.active(), span), () => {
216234
handleServerFunction.call(
217235
self,
@@ -385,6 +403,16 @@ export class GrpcJsInstrumentation extends InstrumentationBase {
385403
config.metadataToSpanAttributes?.client?.responseMetadata ?? []
386404
),
387405
},
406+
server: {
407+
captureRequestMetadata: metadataCapture(
408+
'request',
409+
config.metadataToSpanAttributes?.server?.requestMetadata ?? []
410+
),
411+
captureResponseMetadata: metadataCapture(
412+
'response',
413+
config.metadataToSpanAttributes?.server?.responseMetadata ?? []
414+
),
415+
},
388416
};
389417
}
390418
}

experimental/packages/opentelemetry-instrumentation-grpc/src/grpc/index.ts

+28
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,24 @@ export class GrpcNativeInstrumentation extends InstrumentationBase<
223223
[SemanticAttributes.RPC_SERVICE]: service,
224224
});
225225

226+
instrumentation._metadataCapture.server.captureRequestMetadata(
227+
span,
228+
call.metadata
229+
);
230+
231+
instrumentation._wrap(
232+
call as any,
233+
'sendMetadata',
234+
originalSendMetadata =>
235+
(responseMetadata: grpcTypes.Metadata) => {
236+
instrumentation._metadataCapture.server.captureResponseMetadata(
237+
span,
238+
responseMetadata
239+
);
240+
originalSendMetadata.call(call, responseMetadata);
241+
}
242+
);
243+
226244
context.with(trace.setSpan(context.active(), span), () => {
227245
switch (type) {
228246
case 'unary':
@@ -370,6 +388,16 @@ export class GrpcNativeInstrumentation extends InstrumentationBase<
370388
config.metadataToSpanAttributes?.client?.responseMetadata ?? []
371389
),
372390
},
391+
server: {
392+
captureRequestMetadata: metadataCapture(
393+
'request',
394+
config.metadataToSpanAttributes?.server?.requestMetadata ?? []
395+
),
396+
captureResponseMetadata: metadataCapture(
397+
'response',
398+
config.metadataToSpanAttributes?.server?.responseMetadata ?? []
399+
),
400+
},
373401
};
374402
}
375403
}

experimental/packages/opentelemetry-instrumentation-grpc/src/internal-types.ts

+10
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,14 @@ export type metadataCaptureType = {
2929
metadata: grpcJsTypes.Metadata | grpcTypes.Metadata
3030
) => void;
3131
};
32+
server: {
33+
captureRequestMetadata: (
34+
span: Span,
35+
metadata: grpcJsTypes.Metadata | grpcTypes.Metadata
36+
) => void;
37+
captureResponseMetadata: (
38+
span: Span,
39+
metadata: grpcJsTypes.Metadata | grpcTypes.Metadata
40+
) => void;
41+
};
3242
};

experimental/packages/opentelemetry-instrumentation-grpc/src/types.ts

+4
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,9 @@ export interface GrpcInstrumentationConfig extends InstrumentationConfig {
2929
responseMetadata?: string[];
3030
requestMetadata?: string[];
3131
};
32+
server?: {
33+
responseMetadata?: string[];
34+
requestMetadata?: string[];
35+
};
3236
};
3337
}

experimental/packages/opentelemetry-instrumentation-grpc/test/helper.ts

+10-1
Original file line numberDiff line numberDiff line change
@@ -978,6 +978,10 @@ export const runTests = (
978978
requestMetadata: ['client_metadata_key'],
979979
responseMetadata: ['server_metadata_key'],
980980
},
981+
server: {
982+
requestMetadata: ['client_metadata_key'],
983+
responseMetadata: ['server_metadata_key'],
984+
},
981985
},
982986
});
983987

@@ -999,13 +1003,18 @@ export const runTests = (
9991003
});
10001004
});
10011005

1002-
describe('Capture request/response metadata in client span', () => {
1006+
describe('Capture request/response metadata in client and server spans', () => {
10031007
const attributeValidation = {
10041008
clientAttributes: {
10051009
'rpc.request.metadata.client_metadata_key': 'client_metadata_value',
10061010
'rpc.response.metadata.server_metadata_key':
10071011
'server_metadata_value',
10081012
},
1013+
serverAttributes: {
1014+
'rpc.request.metadata.client_metadata_key': 'client_metadata_value',
1015+
'rpc.response.metadata.server_metadata_key':
1016+
'server_metadata_value',
1017+
},
10091018
};
10101019

10111020
runTestWithAttributeValidation(

0 commit comments

Comments
 (0)