@@ -18,12 +18,15 @@ npm install --save @opentelemetry/exporter-collector-grpc
1818The CollectorTraceExporter in Node expects the URL to only be the hostname. It will not work with ` /v1/trace ` .
1919
2020``` js
21+ const Graceful = require (' node-graceful' );
22+
2123const { BasicTracerProvider , SimpleSpanProcessor } = require (' @opentelemetry/tracing' );
2224const { CollectorTraceExporter } = require (' @opentelemetry/exporter-collector-grpc' );
2325
2426const collectorOptions = {
2527 serviceName: ' basic-service' ,
26- url: ' <opentelemetry-collector-url>' // url is optional and can be omitted - default is localhost:4317
28+ // url is optional and can be omitted - default is localhost:4317
29+ url: ' <collector-hostname>:<port>' ,
2730};
2831
2932const provider = new BasicTracerProvider ();
@@ -32,48 +35,70 @@ provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
3235
3336provider .register ();
3437
38+ Graceful .on (" exit" , async () => {
39+ await provider .shutdown ();
40+ });
3541```
3642
3743By default, plaintext connection is used. In order to use TLS in Node.js, provide ` credentials ` option like so:
3844
3945``` js
4046const fs = require (' fs' );
47+ // Must be 'grpc', _not_ '@grpc/grpc-js'
4148const grpc = require (' grpc' );
49+ const Graceful = require (' node-graceful' );
50+
4251const { BasicTracerProvider , SimpleSpanProcessor } = require (' @opentelemetry/tracing' );
4352const { CollectorTraceExporter } = require (' @opentelemetry/exporter-collector-grpc' );
4453
4554const collectorOptions = {
4655 serviceName: ' basic-service' ,
47- url: ' <opentelemetry-collector-url>' , // url is optional and can be omitted - default is localhost:4317
48- credentials: grpc .credentials .createSsl (
49- fs .readFileSync (' ./ca.crt' ),
50- fs .readFileSync (' ./client.key' ),
51- fs .readFileSync (' ./client.crt' )
52- )
56+ // url is optional and can be omitted - default is localhost:4317
57+ url: ' <collector-hostname>:<port>' ,
58+ credentials: grpc .credentials .createSsl (),
5359};
5460
5561const provider = new BasicTracerProvider ();
5662const exporter = new CollectorTraceExporter (collectorOptions);
5763provider .addSpanProcessor (new SimpleSpanProcessor (exporter));
5864
5965provider .register ();
66+
67+ Graceful .on (" exit" , async () => {
68+ await provider .shutdown ();
69+ });
6070```
6171
62- To see how to generate credentials, you can refer to the script used to generate certificates for tests [ here] ( ./test/certs/regenerate.sh )
72+ To use mutual authentication, pass to the ` createSsl() ` constructor:
73+
74+ ``` js
75+ credentials: grpc .credentials .createSsl (
76+ fs .readFileSync (' ./ca.crt' ),
77+ fs .readFileSync (' ./client.key' ),
78+ fs .readFileSync (' ./client.crt' )
79+ ),
80+ ```
81+
82+ To generate credentials for mutual authentication, you can refer to the script used to generate certificates for tests [ here] ( ./test/certs/regenerate.sh )
6383
6484The exporter can be configured to send custom metadata with each request as in the example below:
6585
6686``` js
87+ // Must be 'grpc', _not_ '@grpc/grpc-js'
6788const grpc = require (' grpc' );
89+ const Graceful = require (' node-graceful' );
90+
6891const { BasicTracerProvider , SimpleSpanProcessor } = require (' @opentelemetry/tracing' );
6992const { CollectorTraceExporter } = require (' @opentelemetry/exporter-collector-grpc' );
7093
7194const metadata = new grpc.Metadata ();
95+ // For instance, an API key or access token might go here.
7296metadata .set (' k' , ' v' );
7397
7498const collectorOptions = {
7599 serviceName: ' basic-service' ,
76- url: ' <opentelemetry-collector-url>' , // url is optional and can be omitted - default is localhost:4317
100+ // url is optional and can be omitted - default is localhost:4317
101+ url: ' <collector-hostname>:<port>' ,
77102 metadata, // // an optional grpc.Metadata object to be sent with each request
78103};
79104
@@ -82,6 +107,10 @@ const exporter = new CollectorTraceExporter(collectorOptions);
82107provider .addSpanProcessor (new SimpleSpanProcessor (exporter));
83108
84109provider .register ();
110+
111+ Graceful .on (" exit" , async () => {
112+ await provider .shutdown ();
113+ });
85114```
86115
87116Note, that this will only work if TLS is also configured on the server.
@@ -95,7 +124,8 @@ const { MeterProvider } = require('@opentelemetry/metrics');
95124const { CollectorMetricExporter } = require (' @opentelemetry/exporter-collector-grpc' );
96125const collectorOptions = {
97126 serviceName: ' basic-service' ,
98- url: ' <opentelemetry-collector-url>' , // url is optional and can be omitted - default is localhost:55681
127+ // url is optional and can be omitted - default is localhost:4317
128+ url: ' <collector-hostname>:<port>' ,
99129};
100130const exporter = new CollectorMetricExporter (collectorOptions);
101131
0 commit comments