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 +4 -4
- data/README.md +218 -183
- data/lib/signalfx/tracing.rb +21 -3
- data/lib/signalfx/tracing/version.rb +1 -1
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e8255be0adcf8bd4fe4412bfed79136715ec13962fa187d08e6e199bba5b3311
|
4
|
+
data.tar.gz: 93708387b7486bd4995b0b509f0ba02cb9fa544f963666b5f2d56eb489395735
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1b1a21c3a139f0accc57cebd68c736112eeae7b9c6c4d63cbad374969f677c8901026ec06acec13d458c34dccb04d541528b395f2f2adb8c2715f5d67187d05f
|
7
|
+
data.tar.gz: 61fbd5998c46d0c44551308598da14a92e8a7f1d08a00715ee8ca1e4bfd508c1bd4fad991fe76fa5913e857fab28eed35fa593404524c2b6a15f9f7105892f79
|
data/README.md
CHANGED
@@ -1,157 +1,163 @@
|
|
1
|
-
# SignalFx
|
1
|
+
# SignalFx Tracing Library for Ruby
|
2
2
|
|
3
|
-
|
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
|
-
|
6
|
-
|
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
|
-
|
9
|
-
```
|
12
|
+
## Requirements and supported software
|
10
13
|
|
11
|
-
|
14
|
+
Here are the requirements and supported software for the library.
|
12
15
|
|
13
|
-
###
|
16
|
+
### Supported runtimes
|
14
17
|
|
15
|
-
|
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
|
-
|
20
|
+
### Supported servers
|
33
21
|
|
34
|
-
|
35
|
-
|
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
|
-
|
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
|
-
|
47
|
-
```
|
48
|
-
|
49
|
-
Then execute the following (or use your desired installation method for your application).
|
130
|
+
require 'signalfx/tracing'
|
50
131
|
|
51
|
-
|
52
|
-
$ bundle install
|
132
|
+
SignalFx::Tracing::Instrumenter.configure(auto_instrument:true)
|
53
133
|
```
|
54
134
|
|
55
|
-
|
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
|
-
|
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
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
157
|
+
The source for this instrumentation is located
|
158
|
+
[here](https://github.com/salemove/ruby-activerecord-opentracing).
|
153
159
|
|
154
|
-
|
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
|
-
|
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
|
178
|
+
The forked source for the instrumentation is located
|
179
|
+
[here](https://github.com/signalfx/ruby-elasticsearch-tracer).
|
173
180
|
|
174
|
-
|
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
|
-
|
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
|
217
|
+
The source for this instrumentation is located
|
218
|
+
[here](https://github.com/opentracing-contrib/ruby-faraday-tracer).
|
211
219
|
|
212
|
-
|
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
|
-
|
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
|
249
|
+
The source for this instrumentation is located
|
250
|
+
[here](https://github.com/signalfx/ruby-grape-instrumentation)
|
242
251
|
|
243
|
-
|
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.
|
259
|
-
|
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
|
-
|
291
|
+
### Mongo
|
281
292
|
|
282
|
-
Mongo driver instrumentation traces queries performed through the Ruby Mongodb
|
293
|
+
Mongo driver instrumentation traces queries performed through the Ruby Mongodb
|
294
|
+
driver.
|
283
295
|
|
284
|
-
The source for this instrumentation is located
|
296
|
+
The source for this instrumentation is located
|
297
|
+
[here](https://github.com/signalfx/ruby-mongodb-instrumentation)
|
285
298
|
|
286
|
-
|
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
|
-
|
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
|
316
|
+
The source for this instrumentation is located
|
317
|
+
[here](https://github.com/signalfx/ruby-mysql2-instrumentation)
|
304
318
|
|
305
|
-
|
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
|
-
|
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
|
336
|
+
The source for this instrumentation is located
|
337
|
+
[here](https://github.com/signalfx/ruby-net-http-instrumentation).
|
323
338
|
|
324
|
-
|
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.
|
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
|
-
|
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
|
354
|
+
The source for this instrumentation is located
|
355
|
+
[here](https://github.com/signalfx/ruby-pg-instrumentation)
|
339
356
|
|
340
|
-
|
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
|
-
|
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
|
375
|
+
The source for this instrumentation is located
|
376
|
+
[here](https://github.com/opentracing-contrib/ruby-rack-tracer).
|
359
377
|
|
360
|
-
|
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
|
-
|
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
|
398
|
+
The forked source for this instrumentation is located
|
399
|
+
[here](https://github.com/signalfx/ruby-rails-instrumentation).
|
381
400
|
|
382
|
-
|
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
|
-
|
430
|
+
### Redis
|
412
431
|
|
413
|
-
This instrumentation traces commands performed using the
|
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
|
435
|
+
The source for this instrumentation is located
|
436
|
+
[here](https://github.com/signalfx/ruby-redis-instrumentation).
|
416
437
|
|
417
|
-
|
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
|
-
|
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
|
460
|
+
The source for this instrumentation is located
|
461
|
+
[here](https://github.com/signalfx/ruby-restclient-instrumentation).
|
440
462
|
|
441
|
-
|
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
|
-
|
482
|
+
### Sequel
|
461
483
|
|
462
|
-
Sequel instrumentation adds extensions to the Database and Dataset to trace
|
484
|
+
Sequel instrumentation adds extensions to the Database and Dataset to trace
|
485
|
+
queries.
|
463
486
|
|
464
|
-
The source for this instrumentation is located
|
487
|
+
The source for this instrumentation is located
|
488
|
+
[here](https://github.com/signalfx/ruby-sequel-instrumentation).
|
465
489
|
|
466
|
-
|
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
|
-
|
507
|
+
### Sidekiq
|
484
508
|
|
485
|
-
Sidekiq instrumentation traces worker job submissions and execution via
|
486
|
-
|
487
|
-
|
488
|
-
|
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
|
516
|
+
The source for this instrumentation is located
|
517
|
+
[here](https://github.com/signalfx/ruby-sidekiq-tracer).
|
491
518
|
|
492
|
-
|
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
|
535
|
+
- `propagate`: Optional boolean to enable/disable trace context injection via
|
536
|
+
job metadata
|
509
537
|
- Default: `true`
|
510
538
|
|
511
539
|
|
512
|
-
|
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
|
547
|
+
The source for this instrumentation is located
|
548
|
+
[here](https://github.com/signalfx/ruby-sinatra-instrumentation).
|
520
549
|
|
521
|
-
|
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
|
-
##
|
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),
|
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
|
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`)
|
549
|
-
|
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.
|
data/lib/signalfx/tracing.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
45
|
+
logger.error { "instrumentation not found: #{to_patch}" }
|
40
46
|
else
|
41
|
-
|
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
|
|
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.
|
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-
|
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
|
-
|
144
|
-
|
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: []
|