signalfx-tracing 1.3.2 → 1.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d95b680693c8655b3286cde3c992ce9d84fee86279a8d99b1b2f52f3115812fa
4
- data.tar.gz: 171566719e15255aded0b0a619f166a9ccf70ab72f5ccb90396a91862e351dbf
3
+ metadata.gz: e8255be0adcf8bd4fe4412bfed79136715ec13962fa187d08e6e199bba5b3311
4
+ data.tar.gz: 93708387b7486bd4995b0b509f0ba02cb9fa544f963666b5f2d56eb489395735
5
5
  SHA512:
6
- metadata.gz: a1168ad08b03278dffc7867bb9b171f284ef443f7dcf0a6b1b8b3ee7d82ca86c3b13bd329727cfcf85526c5f83e94bd481b8a4fadd650a3cf013307bfc6d6355
7
- data.tar.gz: '096c5f0c3394101383db0e5ab6cebae093582fa3a20beb3bd53468cd256117d8a8c77c04bb30394f3f44a3f79d8040f34b881fbbb2bdea035fe3828dd21dcb2a'
6
+ metadata.gz: 1b1a21c3a139f0accc57cebd68c736112eeae7b9c6c4d63cbad374969f677c8901026ec06acec13d458c34dccb04d541528b395f2f2adb8c2715f5d67187d05f
7
+ data.tar.gz: 61fbd5998c46d0c44551308598da14a92e8a7f1d08a00715ee8ca1e4bfd508c1bd4fad991fe76fa5913e857fab28eed35fa593404524c2b6a15f9f7105892f79
data/README.md CHANGED
@@ -1,157 +1,163 @@
1
- # SignalFx-Tracing Library for Ruby: An OpenTracing Auto-Instrumentor
1
+ # SignalFx Tracing Library for Ruby
2
2
 
3
- This utility provides users with the ability of automatically configuring OpenTracing community-contributed [instrumentation libraries](https://github.com/opentracing-contrib) for their Ruby application via a single function.
3
+ The SignalFx Tracing Library for Ruby helps you instrument Ruby applications
4
+ with the OpenTracing API to capture and report distributed traces to SignalFx.
4
5
 
5
- ```ruby
6
- require 'signalfx/tracing'
6
+ The library consists of an auto-instrumentor that works with OpenTracing
7
+ community-provided instrumentations, and provides a bootstrap utility to help
8
+ install instrumentations. It also configures and uses a
9
+ [Jaeger tracer](https://github.com/salemove/jaeger-client-ruby) to send trace
10
+ data to SignalFx.
7
11
 
8
- SignalFx::Tracing::Instrumenter.configure(auto_instrument:true)
9
- ```
12
+ ## Requirements and supported software
10
13
 
11
- ## Installation
14
+ Here are the requirements and supported software for the library.
12
15
 
13
- ### General installation
16
+ ### Supported runtimes
14
17
 
15
- ```bash
16
- $ gem install signalfx-tracing
17
- ```
18
-
19
- The SignalFx Tracing Library for Ruby requires just enough dependencies to allow custom instrumentation for your application, with target library instrumentations needing to be installed manually.
20
- The basic installation provides an `sfx-rb-trace-bootstrap` executable to assist with this process, which allows you to specify the desired libraries for instrumentation as a comma-separated list:
21
-
22
- ```bash
23
- $ sfx-rb-trace-bootstrap --install-deps rack,rails,activerecord,restclient
24
- $ # use the --list option to see all available instrumentations
25
- $ sfx-rb-trace-bootstrap --list
26
- Available target libraries:
27
- {"activerecord"=>["activerecord-opentracing", "~> 0.2.1"],
28
- < ... >
29
- "sinatra"=>["sinatra-instrumentation", "~> 0.1.2"]}
30
- ```
18
+ - MRI Ruby (CRuby) 2.0+
31
19
 
32
- If you'd prefer to install all the available instrumentations without the assistance of the `sfx-rb-trace-bootstrap` utility, please install the provided [gem dependencies](./gem.deps.rb).
20
+ ### Supported servers
33
21
 
34
- ```bash
35
- $ # Run from a cloned and updated https://github.com/signalfx/signalfx-ruby-tracing.git
36
- $ cd signalfx-ruby-tracing
37
- $ bundle install
38
- $ gem install -g
39
- ```
40
-
41
- ### Installation in existing application
22
+ - Puma >= 3.0.0
23
+ - Passenger >= 5.0.25
42
24
 
43
- Specify the desired dependency by adding this line to your application's Gemfile:
25
+ ### Supported libraries
26
+
27
+ | Library | Instrumentation name | Versions Supported |
28
+ | ------------------------------- | -------------------------------------- | ------------------ |
29
+ | [ActiveRecord](#active-record) | activerecord-opentracing | ~> 5.0 |
30
+ | [Elasticsearch](#elasticsearch) | signalfx-elasticsearch-instrumentation | >= 6.0.2 |
31
+ | [Faraday](#faraday) | signalfx-faraday-instrumentation | >= 0.9.0 |
32
+ | [Grape](#grape) | grape-instrumentation | >= 0.13.0 |
33
+ | [Mongo](#mongo) | mongodb-instrumentation | >= 2.1.0 |
34
+ | [Mysql2](#mysql2) | mysql2-instrumentation | >= 0.4.0 |
35
+ | [Net::HTTP](#nethttp) | nethttp-instrumentation | Ruby >= 2.0 |
36
+ | [Pg](#pg) | pg-instrumentation | >= 0.18.0 |
37
+ | [Rack](#rack) | rack-tracer | >= 0.1 |
38
+ | [Rails](#rails) | rails-instrumentation | >= 3.0.0 |
39
+ | [Redis](#redis) | redis-instrumentation | >= 4.0.0 |
40
+ | [RestClient](#restclient) | restclient-instrumentation | >= 1.5.0 |
41
+ | [Sequel](#sequel) | sequel-instrumentation | >= 3.47.0 |
42
+ | [Sidekiq](#sidekiq) | sfx-sidekiq-opentracing | >= 0.7.0 |
43
+ | [Sinatra](#sinatra) | sinatra-instrumentation | >= 1.0.0 |
44
+
45
+ Instrumentation for routes using Puma or Passenger is provided through
46
+ Rack. If you use a framework that builds on top of Rack, such as Rails or
47
+ Sinatra, install the `rack-tracer` instrumentation with your dependency manager
48
+ or with the bootstrap utility. In these cases, the routes through the web
49
+ server are automatically traced.
50
+
51
+ ## Install the SignalFx Tracing Library for Ruby
52
+
53
+ Follow these steps to install the tracing library. You can either use the
54
+ bootstrap utility to install the tracing library and its dependencies or
55
+ manually install everything.
56
+
57
+ The bootstrap utility updates your Gemfile and installs the required
58
+ dependencies for you. For information about the bootstrap utility, see the
59
+ [sfx-rb-trace-bootstrap](bin/sfx-rb-trace-bootstrap) file.
60
+
61
+ The steps assume you have RubyGems and Bundler.
62
+
63
+ ### Install the library with the bootstrap utility
64
+
65
+ 1. Install the tracing library:
66
+ ```bash
67
+ $ gem install signalfx-tracing
68
+ ```
69
+ 2. View the list of instrumentations you can install with the bootstrap utility:
70
+ ```bash
71
+ $ sfx-rb-trace-bootstrap --list
72
+ ```
73
+ 3. Use the bootstrap utility to install applicable instrumentations for your
74
+ application. For example, this is how you add Rails and Redis:
75
+ ```bash
76
+ $ sfx-rb-trace-bootstrap --install-deps rails,redis
77
+ ```
78
+ For information about instrumentation names, see supported libraries and their
79
+ current versions in `gem.deps.rb`. If you configure Rails instrumentation, it
80
+ also configures Active Record instrumentation, so you don't need to instrument both.
81
+
82
+ ### Manually install the library
83
+
84
+ 1. Download the [latest release](https://github.com/signalfx/signalfx-ruby-tracing/releases/latest) of the tracing library.
85
+ 2. Add `signalfx-tracing` to your application's Gemfile:
86
+ ```bash
87
+ $ gem 'signalfx-tracing'
88
+ ```
89
+ 3. Add each applicable instrumentation to your application's Gemfile. For
90
+ example, this is how you add Rails and Redis:
91
+ ```bash
92
+ $ gem 'rails-instrumentation'
93
+ $ gem 'redis-instrumentation'
94
+ ```
95
+ For information about instrumentation names, see supported libraries and their
96
+ current versions in `gem.deps.rb`. If you configure Rails instrumentation, it
97
+ also configures Active Record instrumentation, so you don't need to instrument both.
98
+ 4. Install the gems for the tracing library and instrumentations:
99
+ ```bash
100
+ $ bundle install
101
+ ```
102
+
103
+ ## Configure instrumentation for a Ruby application
104
+
105
+ Configure the instrumentation anywhere in the setup portion of your code or
106
+ before importing and using any libraries that need to be traced.
107
+
108
+ For example, with Rails, configure instrumentation in `config/initializer/tracing.rb`.
109
+
110
+ You can configure instrumentation automatically or manually. Manual
111
+ instrumentation is convenient when you want to trace only some libraries.
112
+
113
+ ### Set configuration values
114
+
115
+ If the default configuration values don't apply for your environment, override them before running the process you instrument.
116
+
117
+ | `configure` parameter | Environment variable | Default | Notes |
118
+ | ------------------- | -------------------- | -------------------------------- | ----- |
119
+ | tracer | N/A | `nil` | The OpenTracing global tracer. |
120
+ | ingest_url | SIGNALFX_ENDPOINT_URL | `http://localhost:9080/v1/trace` | The endpoint the tracer sends spans to. Send spans to a Smart Agent, OpenTelemetry Collector, or a SignalFx ingest endpoint. |
121
+ | service_name | SIGNALFX_SERVICE_NAME | `signalfx-ruby-tracing` | The name to identify the service in SignalFx. |
122
+ | access_token | SIGNALFX_ACCESS_TOKEN | `''` | The SignalFx organization access token. |
123
+
124
+ ### Automatically instrument code:
125
+
126
+ Configure the auto-instrumentor to check for modules defined in the code and
127
+ instrument them if available:
44
128
 
45
129
  ```ruby
46
- gem 'signalfx-tracing'
47
- ```
48
-
49
- Then execute the following (or use your desired installation method for your application).
130
+ require 'signalfx/tracing'
50
131
 
51
- ```bash
52
- $ bundle install
132
+ SignalFx::Tracing::Instrumenter.configure(auto_instrument:true)
53
133
  ```
54
134
 
55
- ## Usage
56
-
57
- Configure the instrumentation anywhere in the setup portion of your code or before doing anything
58
- that needs to be traced.
135
+ ### Manually specify which libraries to instrument
59
136
 
60
- For Rails, this would go in `config/initializer/tracing.rb`.
61
-
62
- The instrumentation can be done automatically, where the auto-instrumenter will
63
- check for modules defined in the code and instrument them if available:
137
+ Specify which libraries to instrument:
64
138
 
65
139
  ```ruby
66
140
  require 'signalfx/tracing'
67
141
 
68
- SignalFx::Tracing::Instrumenter.configure(auto_instrument:true)
69
- ```
70
-
71
- Manual configuration may be desirable when only some libraries should be traced.
72
- These instrumentations to can be selected in a block:
73
-
74
- ```ruby
75
- SignalFx::Tracing::Instrumenter.configure do |patcher|
76
- patcher.instrument(:LibName)
142
+ SignalFx::Tracing::Instrumenter.configure do |p|
143
+ p.instrument(<:myLibName>)
77
144
  ...
78
145
  end
79
146
  ```
80
147
 
81
- Valid lib names are listed below with the instrumentation documentation.
82
-
83
- `configure` accepts several optional parameters:
84
- - `tracer`: a preconfigured OpenTracing tracer to use. If one is not provided,
85
- a new tracer will be initialized.
86
- - Default: `nil`
87
- - `ingest_url`: this is the Smart Agent or Smart Gateway endpoint to which spans are sent by the tracer.
88
- - Default: `http://localhost:9080/v1/trace`
89
- - `service_name`: service name to send spans under.
90
- - Default: `signalfx-ruby-tracing`
91
- - `access_token`: SignalFx access token for authentication. Unnecessary for most deployments.
92
- - Default: `''`
93
-
94
- Environment variables can be used to configure `service_name` and `access_token`
95
- if not given to the `configure` method.
148
+ ## Usage information for each library
96
149
 
97
- ```bash
98
- export SIGNALFX_SERVICE_NAME="<service_name>"
99
- export SIGNALFX_ENDPOINT_URL="<url>"
100
- export SIGNALFX_ACCESS_TOKEN="<token>"
101
- ```
102
-
103
- If these environment variables are not set, the values will default to the ones
104
- listed above.
105
-
106
- # Instrumentation
107
-
108
- This section contains details and configuration for specific frameworks.
109
-
110
- ### Runtimes
111
-
112
- - MRI Ruby (CRuby) 2.0+
113
-
114
- ### Web servers
115
-
116
- - Puma >= 3.0.0
117
- - Passenger >= 5.0.25
150
+ Here's information about instrumenting each supported library.
118
151
 
119
- Instrumentation for routes using these web servers is provided through Rack.
120
- If using a framework that builds on top of Rack, such as Rails or Sinatra, our
121
- instrumentation includes Rack instrumentation. In these cases, the routes
122
- through the web server will be automatically traced.
123
-
124
- When interfacing with these web servers as a Rack application, please configure
125
- [Rack instrumentation](#rack) and insert it as middleware.
126
-
127
- ### Libraries/Frameworks
128
-
129
- | Library | Versions Supported |
130
- | ----------------------------------- | ------------------ |
131
- | [ActiveRecord](#active-record) | ~> 5.0 |
132
- | [Elasticsearch](#elasticsearch) | >= 6.0.2 |
133
- | [Faraday](#faraday) | >= 0.9.0 |
134
- | [Grape](#grape) | >= 0.13.0 |
135
- | [Mongo](#mongo) | >= 2.1.0 |
136
- | [Mysql2](#mysql2) | >= 0.4.0 |
137
- | [Net::HTTP](#nethttp) | Ruby >= 2.0 |
138
- | [Pg](#pg) | >= 0.18.0 |
139
- | [Rack](#rack) | >= 0.1 |
140
- | [Rails](#rails) | >= 3.0.0 |
141
- | [Redis](#redis) | >= 4.0.0 |
142
- | [RestClient](#restclient) | >= 1.5.0 |
143
- | [Sequel](#sequel) | >= 3.47.0 |
144
- | [Sidekiq](#sidekiq) | >= 0.7.0 |
145
- | [Sinatra](#sinatra) | >= 1.0.0 |
146
-
147
- ## Active Record
152
+ ### Active Record
148
153
 
149
154
  This instrumentation creates spans for each Active Record query using the Active
150
- Support notifications framework.
155
+ Support notifications framework. If you configure Rails instrumentation, it also configures Active Record instrumentation, so you don't need to instrument both.
151
156
 
152
- The source for this instrumentation is located [here](https://github.com/salemove/ruby-activerecord-opentracing).
157
+ The source for this instrumentation is located
158
+ [here](https://github.com/salemove/ruby-activerecord-opentracing).
153
159
 
154
- ### Usage
160
+ #### Usage
155
161
 
156
162
  ```bash
157
163
  $ # install the instrumentation if not done previously
@@ -164,14 +170,15 @@ SignalFx::Tracing::Instrumenter.configure do |p|
164
170
  end
165
171
  ```
166
172
 
167
- ## Elasticsearch
173
+ ### Elasticsearch
168
174
 
169
175
  Elasticsearch queries through the Ruby client are traced using a wrapper around
170
176
  the transport.
171
177
 
172
- The forked source for the instrumentation is located [here](https://github.com/signalfx/ruby-elasticsearch-tracer).
178
+ The forked source for the instrumentation is located
179
+ [here](https://github.com/signalfx/ruby-elasticsearch-tracer).
173
180
 
174
- ### Usage
181
+ #### Usage
175
182
 
176
183
  ```bash
177
184
  $ # install the instrumentation if not done previously
@@ -201,15 +208,16 @@ client.transport = Elasticsearch::Tracer::Transport.new(tracer: OpenTracing.glob
201
208
  transport: client.transport)
202
209
  ```
203
210
 
204
- ## Faraday
211
+ ### Faraday
205
212
 
206
213
  Faraday HTTP client instrumentation automatically creates spans for outgoing
207
214
  requests. If the remote service has instrumentation that is aware of Rack,
208
215
  those spans will be automatically nested with Faraday's spans.
209
216
 
210
- The source for this instrumentation is located [here](https://github.com/opentracing-contrib/ruby-faraday-tracer).
217
+ The source for this instrumentation is located
218
+ [here](https://github.com/opentracing-contrib/ruby-faraday-tracer).
211
219
 
212
- ### Usage
220
+ #### Usage
213
221
 
214
222
  ```bash
215
223
  $ # install the instrumentation if not done previously
@@ -232,15 +240,16 @@ end
232
240
 
233
241
  For more detailed usage, please check the instrumentation's page.
234
242
 
235
- ## Grape
243
+ ### Grape
236
244
 
237
245
  This instrumentation subscribes to ActiveSupport notifications emitted by the
238
246
  Grape API. It patches `Grape::API` to automatically insert the `Rack::Tracer`
239
247
  middleware and trace requests.
240
248
 
241
- The source for this instrumentation is located [here](https://github.com/signalfx/ruby-grape-instrumentation)
249
+ The source for this instrumentation is located
250
+ [here](https://github.com/signalfx/ruby-grape-instrumentation)
242
251
 
243
- ### Usage
252
+ #### Usage
244
253
 
245
254
  ```bash
246
255
  $ # install the instrumentation if not done previously
@@ -255,8 +264,10 @@ end
255
264
 
256
265
  `instrument` takes these optional arguments:
257
266
  - `tracer`: custom tracer to use. Defaults to `OpenTracing.global_tracer`
258
- - `parent_span`: parent span to group spans or block that returns a span. Default: `nil`
259
- - `disable_patching`: disable patching if managing the middleware stack manually. Default: `false`
267
+ - `parent_span`: parent span to group spans or block that returns a span.
268
+ Default: `nil`
269
+ - `disable_patching`: disable patching if managing the middleware stack
270
+ manually. Default: `false`
260
271
 
261
272
  If patching is disabled, but spans nested by request are still desired, then the
262
273
  Rack middleware must be manually added to the API class.
@@ -277,13 +288,15 @@ end
277
288
 
278
289
  Please see the instrumentation's page for more details.
279
290
 
280
- ## Mongo
291
+ ### Mongo
281
292
 
282
- Mongo driver instrumentation traces queries performed through the Ruby Mongodb driver.
293
+ Mongo driver instrumentation traces queries performed through the Ruby Mongodb
294
+ driver.
283
295
 
284
- The source for this instrumentation is located [here](https://github.com/signalfx/ruby-mongodb-instrumentation)
296
+ The source for this instrumentation is located
297
+ [here](https://github.com/signalfx/ruby-mongodb-instrumentation)
285
298
 
286
- ### Usage
299
+ #### Usage
287
300
 
288
301
  ```bash
289
302
  $ # install the instrumentation if not done previously
@@ -296,13 +309,14 @@ SignalFx::Tracing::Instrumenter.configure do |p|
296
309
  end
297
310
  ```
298
311
 
299
- ## Mysql2
312
+ ### Mysql2
300
313
 
301
314
  Mysql2 instrumentation traces all queries performed with the Mysql2 client.
302
315
 
303
- The source for this instrumentation is located [here](https://github.com/signalfx/ruby-mysql2-instrumentation)
316
+ The source for this instrumentation is located
317
+ [here](https://github.com/signalfx/ruby-mysql2-instrumentation)
304
318
 
305
- ### Usage
319
+ #### Usage
306
320
 
307
321
  ```bash
308
322
  $ # install the instrumentation if not done previously
@@ -315,13 +329,14 @@ SignalFx::Tracing::Instrumenter.configure do |p|
315
329
  end
316
330
  ```
317
331
 
318
- ## Net::HTTP
332
+ ### Net::HTTP
319
333
 
320
334
  This automatically traces all requests using Net::HTTP.
321
335
 
322
- The source for this instrumentation is located [here](https://github.com/signalfx/ruby-net-http-instrumentation).
336
+ The source for this instrumentation is located
337
+ [here](https://github.com/signalfx/ruby-net-http-instrumentation).
323
338
 
324
- ### Usage
339
+ #### Usage
325
340
 
326
341
  ```ruby
327
342
  SignalFx::Tracing::Instrumenter.configure do |p|
@@ -329,15 +344,17 @@ SignalFx::Tracing::Instrumenter.configure do |p|
329
344
  end
330
345
  ```
331
346
 
332
- An optional `tracer` named argument can be provided to use a custom tracer. It will default to `OpenTracing.global_tracer` if not provided.
347
+ An optional `tracer` named argument can be provided to use a custom tracer.
348
+ It will default to `OpenTracing.global_tracer` if not provided.
333
349
 
334
- ## Pg
350
+ ### Pg
335
351
 
336
352
  Pg instrumentation traces all queries performed with the pg client.
337
353
 
338
- The source for this instrumentation is located [here](https://github.com/signalfx/ruby-pg-instrumentation)
354
+ The source for this instrumentation is located
355
+ [here](https://github.com/signalfx/ruby-pg-instrumentation)
339
356
 
340
- ### Usage
357
+ #### Usage
341
358
 
342
359
  ```bash
343
360
  $ # install the instrumentation if not done previously
@@ -349,15 +366,16 @@ SignalFx::Tracing::Instrumenter.configure do |p|
349
366
  p.instrument(:pg)
350
367
  end
351
368
  ```
352
- ## Rack
369
+ ### Rack
353
370
 
354
371
  Rack spans are created using the `rack-tracer` gem. This is enabled
355
372
  automatically for other frameworks that are built on top of Rack, but it can
356
373
  also be separately enabled.
357
374
 
358
- The source for this instrumentation is located [here](https://github.com/opentracing-contrib/ruby-rack-tracer).
375
+ The source for this instrumentation is located
376
+ [here](https://github.com/opentracing-contrib/ruby-rack-tracer).
359
377
 
360
- ### Usage
378
+ #### Usage
361
379
 
362
380
  ```bash
363
381
  $ # install the instrumentation if not done previously
@@ -372,14 +390,15 @@ end
372
390
  use Rack::Tracer
373
391
  ```
374
392
 
375
- ## Rails
393
+ ### Rails
376
394
 
377
395
  Rails applications can be traced using the notifications provided by ActiveSupport.
378
396
  It will use `rack-tracer` to trace by requests.
379
397
 
380
- The forked source for this instrumentation is located [here](https://github.com/signalfx/ruby-rails-instrumentation).
398
+ The forked source for this instrumentation is located
399
+ [here](https://github.com/signalfx/ruby-rails-instrumentation).
381
400
 
382
- ### Usage
401
+ #### Usage
383
402
 
384
403
  ```bash
385
404
  $ # install the instrumentation if not done previously
@@ -408,13 +427,15 @@ Note that if `rack_tracer` is set to `false`, requests propagated to the Rails
408
427
  app will not be extracted. For example, if a traced service makes a request to
409
428
  an endpoint served by the Rails app, it will not be automatically nested.
410
429
 
411
- ## Redis
430
+ ### Redis
412
431
 
413
- This instrumentation traces commands performed using the [Redis client](https://github.com/redis/redis-rb).
432
+ This instrumentation traces commands performed using the
433
+ [Redis client](https://github.com/redis/redis-rb).
414
434
 
415
- The source for this instrumentation is located [here](https://github.com/signalfx/ruby-redis-instrumentation).
435
+ The source for this instrumentation is located
436
+ [here](https://github.com/signalfx/ruby-redis-instrumentation).
416
437
 
417
- ### Usage
438
+ #### Usage
418
439
 
419
440
  ```bash
420
441
  $ # install the instrumentation if not done previously
@@ -431,14 +452,15 @@ Arguments:
431
452
  - `tracer`: Optional custom tracer to use for this instrumentation
432
453
  - Default: `OpenTracing.global_tracer`
433
454
 
434
- ## RestClient
455
+ ### RestClient
435
456
 
436
457
  RestClient requests can be patched to automatically be wrapped in a span. It
437
458
  will also inject the span context so remote services can extract it.
438
459
 
439
- The source for this instrumentation is located [here](https://github.com/signalfx/ruby-restclient-instrumentation).
460
+ The source for this instrumentation is located
461
+ [here](https://github.com/signalfx/ruby-restclient-instrumentation).
440
462
 
441
- ### Usage
463
+ #### Usage
442
464
 
443
465
  ```bash
444
466
  $ # install the instrumentation if not done previously
@@ -457,13 +479,15 @@ Arguments:
457
479
  - `propagate`: Propagate spans to the request endpoint.
458
480
  - Default: `false`
459
481
 
460
- ## Sequel
482
+ ### Sequel
461
483
 
462
- Sequel instrumentation adds extensions to the Database and Dataset to trace queries.
484
+ Sequel instrumentation adds extensions to the Database and Dataset to trace
485
+ queries.
463
486
 
464
- The source for this instrumentation is located [here](https://github.com/signalfx/ruby-sequel-instrumentation).
487
+ The source for this instrumentation is located
488
+ [here](https://github.com/signalfx/ruby-sequel-instrumentation).
465
489
 
466
- ### Usage
490
+ #### Usage
467
491
 
468
492
  ```bash
469
493
  $ # install the instrumentation if not done previously
@@ -480,16 +504,19 @@ Arguments:
480
504
  - `tracer`: Optional custom tracer for this instrumentation
481
505
  - Default: `OpenTracing.global_tracer`
482
506
 
483
- ## Sidekiq
507
+ ### Sidekiq
484
508
 
485
- Sidekiq instrumentation traces worker job submissions and execution via [Sidekiq middleware](https://github.com/mperham/sidekiq/wiki/Middleware).
486
- The instrumenter registers both client and server middleware that use job metadata to
487
- represent all job submissions and their invocations. Trace context propagation adds
488
- to this job metadata to unifiy distributed client and server requests and processing.
509
+ Sidekiq instrumentation traces worker job submissions and execution via
510
+ [Sidekiq middleware](https://github.com/mperham/sidekiq/wiki/Middleware).
511
+ The instrumenter registers both client and server middleware that use job
512
+ metadata to represent all job submissions and their invocations. Trace
513
+ context propagation adds to this job metadata to unifiy distributed client
514
+ and server requests and processing.
489
515
 
490
- The source for this instrumentation is located [here](https://github.com/signalfx/ruby-sidekiq-tracer).
516
+ The source for this instrumentation is located
517
+ [here](https://github.com/signalfx/ruby-sidekiq-tracer).
491
518
 
492
- ### Usage
519
+ #### Usage
493
520
 
494
521
  ```bash
495
522
  $ # install the instrumentation if not done previously
@@ -505,20 +532,22 @@ end
505
532
  Arguments:
506
533
  - `tracer`: Optional custom tracer for this instrumentation
507
534
  - Default: `OpenTracing.global_tracer`
508
- - `propagate`: Optional boolean to enable/disable trace context injection via job metadata
535
+ - `propagate`: Optional boolean to enable/disable trace context injection via
536
+ job metadata
509
537
  - Default: `true`
510
538
 
511
539
 
512
- ## Sinatra
540
+ ### Sinatra
513
541
 
514
542
  Sinatra instrumentation traces requests and template rendering. The instrumenter
515
543
  registers a Sinatra extension that uses `rack-tracer` to trace requests and
516
544
  monkey-patches to trace view rendering. Rack instrumentation is automatically
517
545
  enabled when using Sinatra instrumentation.
518
546
 
519
- The source for this instrumentation is located [here](https://github.com/signalfx/ruby-sinatra-instrumentation).
547
+ The source for this instrumentation is located
548
+ [here](https://github.com/signalfx/ruby-sinatra-instrumentation).
520
549
 
521
- ### Usage
550
+ #### Usage
522
551
 
523
552
  ```bash
524
553
  $ # install the instrumentation if not done previously
@@ -531,9 +560,10 @@ SignalFx::Tracing::Instrumenter.configure do |p|
531
560
  end
532
561
  ```
533
562
 
534
- ## Configuring the Logger
563
+ ## Configure the logger
535
564
 
536
- The logger, based on the [Ruby Logger](https://ruby-doc.org/stdlib-2.4.0/libdoc/logger/rdoc/Logger.html), can be configured by setting the following environment variables:
565
+ The logger, based on the [Ruby Logger](https://ruby-doc.org/stdlib-2.4.0/libdoc/logger/rdoc/Logger.html),
566
+ can be configured by setting the following environment variables:
537
567
 
538
568
  | Environmental Variable Name | Description | Default |
539
569
  |:------------------------------|:----------------------|:-------------------- |
@@ -542,8 +572,13 @@ The logger, based on the [Ruby Logger](https://ruby-doc.org/stdlib-2.4.0/libdoc/
542
572
  | `SIGNALFX_LOG_SHIFT_SIZE` | The desired maximum size of log files (this only applies when. A new one would be created when the maximum is reached. | `1048576` (1 MB) |
543
573
  | `SIGNALFX_LOG_LEVEL` | The severity criteria for recording logs (from least to most severe). Options: `debug`, `info`, `warn`, `error`, `fatal`, `unknown` | `warn` |
544
574
 
545
- More information regarding the logging configuration may be found [here](https://ruby-doc.org/stdlib-2.4.0/libdoc/logger/rdoc/Logger.html).
575
+ More information regarding the logging configuration may be found
576
+ [here](https://ruby-doc.org/stdlib-2.4.0/libdoc/logger/rdoc/Logger.html).
546
577
 
547
578
  **NB**:
548
- - If the default path for `SIGNALFX_LOG_PATH` (that is, `/var/log/signalfx/signalfx-ruby-tracing.log`) is to be used, then please create the directory and or file (if necessary) and grant the relevant access permissions to the instrumentation user process.
549
- If there are permission issues, the instrumentation will default to logging to the standard error (STDERR) handle, until the path is provided to which logs can be written without any access issues.
579
+ - If the default path for `SIGNALFX_LOG_PATH` (that is, `/var/log/signalfx/signalfx-ruby-tracing.log`)
580
+ is to be used, then please create the directory and or file (if necessary)
581
+ and grant the relevant access permissions to the instrumentation user process.
582
+ If there are permission issues, the instrumentation will default to logging to
583
+ the standard error (STDERR) handle, until the path is provided to which logs
584
+ can be written without any access issues.
@@ -2,6 +2,7 @@ require 'jaeger/client'
2
2
  require 'signalfx/tracing/http_sender'
3
3
  require 'signalfx/tracing/register'
4
4
  require 'signalfx/tracing/compat'
5
+ require 'signalfx/tracing/sfx_logger'
5
6
  require 'thread'
6
7
 
7
8
  module SignalFx
@@ -25,7 +26,12 @@ module SignalFx
25
26
 
26
27
  if auto_instrument
27
28
  Register.available_libs.each_pair do |key, value|
28
- value.instrument
29
+ begin
30
+ value.instrument
31
+ rescue Exception => e
32
+ logger.error { "failed to initialize instrumentation '#{key}': #{e.inspect}" }
33
+ logger.error { e.backtrace }
34
+ end
29
35
  end
30
36
  else
31
37
  yield self
@@ -36,9 +42,14 @@ module SignalFx
36
42
 
37
43
  def instrument(to_patch, **args)
38
44
  if Register.available_libs[to_patch].nil?
39
- puts "instrumentation not found"
45
+ logger.error { "instrumentation not found: #{to_patch}" }
40
46
  else
41
- Register.available_libs[to_patch].instrument(**args)
47
+ begin
48
+ Register.available_libs[to_patch].instrument(**args)
49
+ rescue Exception => e
50
+ logger.error { "failed to initialize instrumentation '#{to_patch}': #{e.inspect}" }
51
+ logger.error { e.backtrace }
52
+ end
42
53
  end
43
54
  end
44
55
 
@@ -78,6 +89,13 @@ module SignalFx
78
89
  def revive
79
90
  set_tracer(service_name: @service_name, access_token: @access_token)
80
91
  end
92
+
93
+ def logger()
94
+ if @_logger == nil
95
+ @_logger = Logging.logger
96
+ end
97
+ return @_logger
98
+ end
81
99
  end
82
100
  end
83
101
 
@@ -1,5 +1,5 @@
1
1
  module Signalfx
2
2
  module Tracing
3
- VERSION = "1.3.2"
3
+ VERSION = "1.3.3"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: signalfx-tracing
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
4
+ version: 1.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - SignalFx, Inc.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-21 00:00:00.000000000 Z
11
+ date: 2020-06-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,7 +80,7 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: 0.1.2
83
- description:
83
+ description:
84
84
  email:
85
85
  - info@signalfx.com
86
86
  executables:
@@ -125,7 +125,7 @@ homepage: https://github.com/signalfx/signalfx-ruby-tracing
125
125
  licenses:
126
126
  - Apache-2.0
127
127
  metadata: {}
128
- post_install_message:
128
+ post_install_message:
129
129
  rdoc_options: []
130
130
  require_paths:
131
131
  - lib
@@ -140,8 +140,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
140
  - !ruby/object:Gem::Version
141
141
  version: '0'
142
142
  requirements: []
143
- rubygems_version: 3.0.6
144
- signing_key:
143
+ rubyforge_project:
144
+ rubygems_version: 2.7.6.2
145
+ signing_key:
145
146
  specification_version: 4
146
147
  summary: Auto-instrumentation framework for Ruby
147
148
  test_files: []