elastic-apm 1.1.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of elastic-apm might be problematic. Click here for more details.

Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rspec +1 -0
  4. data/.rubocop.yml +7 -1
  5. data/CHANGELOG.md +45 -0
  6. data/Gemfile +17 -12
  7. data/bench/app.rb +1 -2
  8. data/bench/benchmark.rb +1 -1
  9. data/bench/stackprof.rb +1 -1
  10. data/docs/api.asciidoc +115 -76
  11. data/docs/configuration.asciidoc +232 -167
  12. data/docs/context.asciidoc +7 -3
  13. data/docs/custom-instrumentation.asciidoc +17 -28
  14. data/docs/index.asciidoc +13 -7
  15. data/docs/supported-technologies.asciidoc +65 -0
  16. data/elastic-apm.gemspec +3 -2
  17. data/lib/elastic_apm.rb +272 -121
  18. data/lib/elastic_apm/agent.rb +56 -107
  19. data/lib/elastic_apm/config.rb +130 -106
  20. data/lib/elastic_apm/config/duration.rb +25 -0
  21. data/lib/elastic_apm/config/size.rb +28 -0
  22. data/lib/elastic_apm/context_builder.rb +1 -0
  23. data/lib/elastic_apm/deprecations.rb +19 -0
  24. data/lib/elastic_apm/error.rb +5 -2
  25. data/lib/elastic_apm/error/exception.rb +1 -1
  26. data/lib/elastic_apm/error_builder.rb +5 -0
  27. data/lib/elastic_apm/instrumenter.rb +121 -53
  28. data/lib/elastic_apm/internal_error.rb +1 -0
  29. data/lib/elastic_apm/{log.rb → logging.rb} +16 -11
  30. data/lib/elastic_apm/metadata.rb +20 -0
  31. data/lib/elastic_apm/metadata/process_info.rb +26 -0
  32. data/lib/elastic_apm/metadata/service_info.rb +56 -0
  33. data/lib/elastic_apm/metadata/system_info.rb +30 -0
  34. data/lib/elastic_apm/middleware.rb +31 -15
  35. data/lib/elastic_apm/normalizers/action_controller.rb +1 -1
  36. data/lib/elastic_apm/normalizers/action_mailer.rb +1 -1
  37. data/lib/elastic_apm/normalizers/action_view.rb +3 -3
  38. data/lib/elastic_apm/normalizers/active_record.rb +2 -1
  39. data/lib/elastic_apm/railtie.rb +1 -1
  40. data/lib/elastic_apm/span.rb +59 -29
  41. data/lib/elastic_apm/span/context.rb +30 -4
  42. data/lib/elastic_apm/span_helpers.rb +1 -1
  43. data/lib/elastic_apm/spies/delayed_job.rb +7 -7
  44. data/lib/elastic_apm/spies/elasticsearch.rb +4 -4
  45. data/lib/elastic_apm/spies/http.rb +38 -0
  46. data/lib/elastic_apm/spies/mongo.rb +22 -11
  47. data/lib/elastic_apm/spies/net_http.rb +7 -4
  48. data/lib/elastic_apm/spies/rake.rb +5 -6
  49. data/lib/elastic_apm/spies/redis.rb +1 -1
  50. data/lib/elastic_apm/spies/sequel.rb +9 -7
  51. data/lib/elastic_apm/spies/sidekiq.rb +5 -5
  52. data/lib/elastic_apm/spies/tilt.rb +2 -2
  53. data/lib/elastic_apm/sql_summarizer.rb +3 -3
  54. data/lib/elastic_apm/stacktrace_builder.rb +6 -6
  55. data/lib/elastic_apm/subscriber.rb +3 -3
  56. data/lib/elastic_apm/traceparent.rb +62 -0
  57. data/lib/elastic_apm/transaction.rb +62 -93
  58. data/lib/elastic_apm/transport/base.rb +98 -0
  59. data/lib/elastic_apm/transport/connection.rb +175 -0
  60. data/lib/elastic_apm/transport/filters.rb +45 -0
  61. data/lib/elastic_apm/transport/filters/request_body_filter.rb +31 -0
  62. data/lib/elastic_apm/transport/filters/secrets_filter.rb +59 -0
  63. data/lib/elastic_apm/transport/serializers.rb +58 -0
  64. data/lib/elastic_apm/transport/serializers/error_serializer.rb +59 -0
  65. data/lib/elastic_apm/transport/serializers/span_serializer.rb +30 -0
  66. data/lib/elastic_apm/transport/serializers/transaction_serializer.rb +33 -0
  67. data/lib/elastic_apm/transport/worker.rb +73 -0
  68. data/lib/elastic_apm/util.rb +11 -8
  69. data/lib/elastic_apm/version.rb +1 -1
  70. metadata +40 -21
  71. data/.travis.yml +0 -5
  72. data/docs/troubleshooting.asciidoc +0 -28
  73. data/lib/elastic_apm/filters.rb +0 -46
  74. data/lib/elastic_apm/filters/request_body_filter.rb +0 -33
  75. data/lib/elastic_apm/filters/secrets_filter.rb +0 -59
  76. data/lib/elastic_apm/http.rb +0 -139
  77. data/lib/elastic_apm/process_info.rb +0 -24
  78. data/lib/elastic_apm/serializers.rb +0 -28
  79. data/lib/elastic_apm/serializers/errors.rb +0 -61
  80. data/lib/elastic_apm/serializers/transactions.rb +0 -51
  81. data/lib/elastic_apm/service_info.rb +0 -54
  82. data/lib/elastic_apm/system_info.rb +0 -28
  83. data/lib/elastic_apm/util/dig.rb +0 -31
  84. data/lib/elastic_apm/util/inspector.rb +0 -61
  85. data/lib/elastic_apm/worker.rb +0 -106
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7e4d23e9be2ca2a869a03d54424544c63978b38b13799ed46da429812762affb
4
- data.tar.gz: 6952d04574e879c03a9abdad3833978a4c86710db81c188ca3e7891d619d54d6
3
+ metadata.gz: bfb206def6af3e002dc6b946add05afddaa93909016ca654711a6efd4a9353c9
4
+ data.tar.gz: fc4edd5a2209f1babfe9277865024eb71eb24a7713b2f77c8d80a4ed6c12117f
5
5
  SHA512:
6
- metadata.gz: d617dadc865b556eb60a0d6e0004ab762a45463c1acef373407898b69cc8d3a54dc578bca312b33d9f16ee5f2b3a14bfee452ea71143caebc2faf6be456a0cd2
7
- data.tar.gz: f28c617a638546575bfe7bac445fb4ed0aa31df8c5daae83e7c4b1b7c22bc0c3e2d2560643bfa22acde3c4c97601c66f1e55c3e69d3e9b925a30a681f1ee7a46
6
+ metadata.gz: 464029e0c25e3a1b3ab9417f16e3b73ca8c6f5e779f37a4e45d0648c76bd2a58ff417fa95fa55adb97c5da465e637dc270df63e4b86ed2a1584ccc9040d32bbd
7
+ data.tar.gz: ddebff0d47f88aaa983b46764ecafd4e12073c33434d8c7bb275e3f0655466fb237bf72ea2a3ebc8dc6583c97bf97e6903699e49efd39e74143981e3d608b8aa
data/.gitignore CHANGED
@@ -14,3 +14,4 @@ Gemfile.lock
14
14
  /html_docs/
15
15
  spec/elastic_apm.log
16
16
  spec/ruby-agent-junit.xml
17
+ .gem
data/.rspec CHANGED
@@ -1,2 +1,3 @@
1
1
  --color
2
2
  --require spec_helper
3
+ --format documentation
@@ -1,5 +1,5 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.2
2
+ TargetRubyVersion: 2.3
3
3
  Exclude:
4
4
  - 'elastic-apm.gemspec'
5
5
  - 'vendor/**/*'
@@ -59,3 +59,9 @@ Style/EmptyMethod:
59
59
 
60
60
  Rails/Delegate:
61
61
  Enabled: false
62
+
63
+ Style/NumericPredicate:
64
+ Enabled: false
65
+
66
+ Layout/EmptyLineAfterGuardClause:
67
+ Enabled: false
@@ -4,6 +4,51 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## 2.0.0 (2018-11-14)
8
+
9
+ Version adds support for APM Server 6.5 and needs at least that.
10
+
11
+ ### Added
12
+
13
+ - Support for APM Server 6.5 (Intake v2)
14
+ - Support for Distributed Tracing (beta)
15
+ - Support for RUM Agent correlation (Distributed Tracing)
16
+ - Support for [HTTP.rb](https://github.com/httprb/http) (Instrumentation + Distributed Tracing)
17
+
18
+ ### Changed
19
+
20
+ - Custom instrumentation APIs ([#209](https://github.com/elastic/apm-agent-ruby/pull/209))
21
+ - Tag keys will convert disallowed chars to `_`
22
+ - Default log level changed to `info`
23
+ - Laxed version requirement of concurrent-ruby
24
+ - Change `log_level` to only concern agent log
25
+
26
+ ### Deprecated
27
+
28
+ #### APIs:
29
+
30
+ - `ElasticAPM.transaction`
31
+ - `ElasticAPM.span`
32
+
33
+ #### Options:
34
+
35
+ - `compression_level`
36
+ - `compression_minimum_size`
37
+ - `debug_http`
38
+ - `debug_transactions`
39
+ - `flush_interval`
40
+ - `http_open_timeout`
41
+ - `http_read_timeout`
42
+ - `enabled_environments`
43
+ - `disable_environment_warning`
44
+
45
+ Some options that used to take a certain unit for granted now expects explicit units – but will fall back to old default.
46
+
47
+ ### Removed
48
+
49
+ - Support for APM Server versions prior to 6.5.
50
+ - Support for Ruby 2.2 (eol)
51
+
7
52
  ## 1.1.0 (2018-09-07)
8
53
 
9
54
  ### Added
data/Gemfile CHANGED
@@ -6,21 +6,22 @@ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
6
 
7
7
  gemspec
8
8
 
9
- gem 'elasticsearch'
10
- gem 'fakeredis', require: nil
11
- gem 'json-schema'
12
- gem 'mongo'
13
9
  gem 'pry'
14
10
  gem 'rack-test'
15
- gem 'rake'
16
- gem 'redis', require: nil
17
11
  gem 'rspec'
18
- gem 'rubocop'
19
- gem 'sequel'
20
- gem 'sidekiq'
12
+ gem 'rspec-its'
13
+ gem 'rubocop', require: nil
21
14
  gem 'timecop'
22
15
  gem 'webmock'
23
- gem 'yard'
16
+
17
+ gem 'elasticsearch', require: nil
18
+ gem 'fakeredis', require: nil
19
+ gem 'json-schema', require: nil
20
+ gem 'mongo', require: nil
21
+ gem 'rake', require: nil
22
+ gem 'sequel', require: nil
23
+ gem 'sidekiq', require: nil
24
+ gem 'yard', require: nil
24
25
  gem 'yarjuf'
25
26
 
26
27
  if RUBY_PLATFORM == 'java'
@@ -41,7 +42,11 @@ else
41
42
  gem framework
42
43
  end
43
44
 
45
+ unless version == 'master'
46
+ gem 'delayed_job', require: nil
47
+ end
48
+
44
49
  group :bench do
45
- gem 'ruby-prof', platforms: %i[ruby]
46
- gem 'stackprof', platforms: %i[ruby]
50
+ gem 'ruby-prof', require: nil, platforms: %i[ruby]
51
+ gem 'stackprof', require: nil, platforms: %i[ruby]
47
52
  end
@@ -20,11 +20,10 @@ class App
20
20
  @config = ElasticAPM::Config.new(
21
21
  {
22
22
  environment: 'bench',
23
- enabled_environments: ['bench'],
24
23
  disable_send: true
25
24
  }.merge(config)
26
25
  )
27
- @serializer = ElasticAPM::Serializers::Transactions.new(@config)
26
+ # @serializer = ElasticAPM::Serializers::Transactions.new(@config)
28
27
  @mock_env = Rack::MockRequest.env_for('/')
29
28
  end
30
29
 
@@ -23,7 +23,7 @@ def perform(app, count: 1000)
23
23
  end
24
24
  end
25
25
 
26
- app.serializer.build_all(transactions)
26
+ # app.serializer.build_all(transactions)
27
27
 
28
28
  app.stop
29
29
  end
@@ -8,7 +8,7 @@ require 'stackprof'
8
8
  require 'rack/test'
9
9
  require 'elastic-apm'
10
10
 
11
- ElasticAPM.start environment: 'bench', enabled_environments: ['bench']
11
+ ElasticAPM.start environment: 'bench'
12
12
 
13
13
  env = Rack::MockRequest.env_for('/')
14
14
 
@@ -1,8 +1,8 @@
1
1
  [[api]]
2
2
  == Public API
3
3
 
4
- Although most usage is covered automatically, Elastic APM also has a public API that
5
- allows custom usage.
4
+ Although most usage is covered automatically, Elastic APM also has a public
5
+ API that allows custom usage.
6
6
 
7
7
  [float]
8
8
  [[agent-life-cycle]]
@@ -24,7 +24,8 @@ ElasticAPM.start(server_url: 'http://localhost:8200')
24
24
  * `config`: An optional hash or `ElasticAPM::Config` instance with configuration
25
25
  options. See <<configuration,Configuration>>.
26
26
 
27
- If you are using <<getting-started-rails,Ruby on Rails>> this is done automatically for you.
27
+ If you are using <<getting-started-rails,Ruby on Rails>> this is done
28
+ automatically for you.
28
29
  If not see <<getting-started-rack,Getting started with Rack>>.
29
30
 
30
31
  [float]
@@ -56,61 +57,103 @@ Returns the currently running agent or nil.
56
57
  Returns the current `ElasticAPM::Transaction` or nil.
57
58
 
58
59
  [float]
59
- [[api-agent-transaction]]
60
- ==== `ElasticAPM.transaction`
60
+ [[api-agent-start_transaction]]
61
+ ==== `ElasticAPM.start_transaction`
61
62
 
62
- Start a _transaction_ eg. a web request or background job.
63
-
64
- If called without a block you are expected to end the transaction yourself.
65
- If given a block, the code inside will be wrapped in a transaction.
66
-
67
- You need to submit it yourself with `transaction.submit(status)`.
63
+ Start a _transaction_ eg. an incoming web request or a background job.
68
64
 
69
65
  [source,ruby]
70
66
  ----
71
67
  # call with block
72
- transaction = ElasticAPM.transaction('Do things') do
73
- do_work # ...
74
- end # .done is called when block ends
75
-
76
- transaction.submit(200)
77
-
78
- # without block
79
- transaction = ElasticAPM.transaction('Do things')
80
- do_work
81
- transaction.submit(200) # .submit(result) will also .done(result)
68
+ ElasticAPM.start_transaction('Name')
69
+ do_work # ...
70
+ ElasticAPM.end_transaction('result')
82
71
  ----
83
72
 
84
73
  Arguments:
85
74
 
86
75
  * `name`: A name for your transaction. Transactions are grouped by name. **Required**.
87
76
  * `type`: A `type` for your transaction eg. `db.postgresql.sql`.
88
- * `context:`: An optional <<api-context,Context>> used to enrich the transaction with
89
- information about the current request.
90
- * `&block`: An optional block to wrap with the transaction. The block is passed the
91
- transaction as an optional argument.
77
+ * `context:`: An optional <<api-context,Context>> used to enrich the
78
+ transaction with information about the current request.
79
+ * `traceparent:`: An optional `Traceparent` object for Distributed Tracing.
92
80
 
93
81
  Returns the transaction.
94
82
 
95
83
  [float]
96
- [[api-agent-span]]
97
- ==== `ElasticAPM.span`
84
+ [[api-agent-end_transaction]]
85
+ ==== `ElasticAPM.end_transaction`
86
+
87
+ Ends the currently running transaction.
88
+
89
+ Arguments:
98
90
 
99
- Most transactions have nested spans signifying work of a specific sort eg. database
100
- queries or external web requests.
91
+ * `result`: A `String` result of the transaction, eg. `'success'`.
101
92
 
102
- If given a block, wrap the code inside in a span.
103
- If not you are expected to close the span yourself with `span.done(result)`.
93
+ [float]
94
+ [[api-agent-with_transaction]]
95
+ ==== `ElasticAPM.with_transaction`
96
+
97
+ Wrap a block in a Transaction, starting and ending around the block
104
98
 
105
99
  [source,ruby]
106
100
  ----
107
- ElasticAPM.transaction 'Do things' do
108
- ElasticAPM.span 'Do one of the things' do
109
- Database.query # ...
110
- end
101
+ ElasticAPM.transaction 'Do things' do |transaction|
102
+ do_work # ...
103
+
104
+ transaction.result = 'success'
111
105
  end
112
106
  ----
113
107
 
108
+ Arguments:
109
+
110
+ * `name`: A name for your transaction. Transactions are grouped by name. **Required**.
111
+ * `type`: A `type` for your transaction eg. `db.postgresql.sql`.
112
+ * `context:`: An optional <<api-context,Context>> used to enrich the
113
+ transaction with information about the current request.
114
+ * `traceparent:`: An optional `Traceparent` object for Distributed Tracing.
115
+ * `&block`: A block to wrap. Optionally yields the transaction.
116
+
117
+ Returns the return value of the given block.
118
+
119
+ [float]
120
+ [[api-agent-start_span]]
121
+ ==== `ElasticAPM.start_span`
122
+
123
+ Start a new span.
124
+
125
+ [source,ruby]
126
+ ----
127
+ ElasticAPM.with_transaction 'Do things' do
128
+ ElasticAPM.start_span 'Do one of the things'
129
+ Database.query # ...
130
+ ElasticAPM.end_span
131
+ end
132
+ ----
133
+
134
+ Arguments:
135
+
136
+ * `name`: A name for your span. **Required**.
137
+ * `type`: The type of work eg. `db.postgresql.query`.
138
+ * `context`: An instance of `Span::Context`.
139
+ * `include_stacktrace`: Whether or not to collect a Stacktrace.
140
+ * `&block`: An optional block to wrap with the span.
141
+ The block is passed the span as an optional argument.
142
+
143
+ Returns the created span.
144
+
145
+ [float]
146
+ [[api-agent-end_span]]
147
+ ==== `ElasticAPM.end_span`
148
+
149
+ Ends the currently running span.
150
+
151
+ [float]
152
+ [[api-agent-with_span]]
153
+ ==== `ElasticAPM.with_span`
154
+
155
+ Wraps a block in a Span.
156
+
114
157
  Arguments:
115
158
 
116
159
  * `name`: A name for your span. **Required**.
@@ -120,7 +163,7 @@ Arguments:
120
163
  * `&block`: An optional block to wrap with the span.
121
164
  The block is passed the span as an optional argument.
122
165
 
123
- Return the span or the return value of the given block.
166
+ Returns the return value of the given block.
124
167
 
125
168
  [float]
126
169
  [[api-agent-build-context]]
@@ -191,8 +234,8 @@ Returns `[ElasticAPM::Error]`.
191
234
  ==== `ElasticAPM.set_tag`
192
235
 
193
236
  Add a tag to the current transaction.
194
- Tags are basic key-value pairs that are indexed in your Elasticsearch database and
195
- therefore searchable.
237
+ Tags are basic key-value pairs that are indexed in your Elasticsearch database
238
+ and therefore searchable.
196
239
 
197
240
  [source,ruby]
198
241
  ----
@@ -203,7 +246,7 @@ end
203
246
 
204
247
  Arguments:
205
248
 
206
- * `key`: A string key.
249
+ * `key`: A string key. Note that `.`, `*` or `"` will be converted to `_`.
207
250
  * `value`: A string value.
208
251
 
209
252
  Returns the set `value`.
@@ -287,51 +330,48 @@ end
287
330
 
288
331
  - `name`: String
289
332
  - `type`: String
333
+ - `result`: String
334
+ - `trace_id`: String (readonly)
290
335
 
291
336
  [float]
292
- [[api-transaction-release]]
293
- ==== `#release`
294
-
295
- Makes sure the transaction is no longer `ElasticAPM.current_transaction`.
296
-
297
- [float]
298
- [[api-transaction-done]]
299
- ==== `#done(result)`
300
-
301
- *Args:*
302
-
303
- - `result`: String result of transaction, eg. `success`. Default: `nil`.
304
-
305
- Ends the transaction, settings its `duration` to µs since it began and sets its result.
306
-
307
- Returns `self`.
308
-
309
- [float]
310
- [[api-transaction-done_]]
311
- ==== `#done?`
337
+ [[api-transaction-sampled_]]
338
+ ==== #sampled?
312
339
 
313
- Returns whether the transaction is done.
340
+ Whether the transaction is _sampled_ eg. it includes stacktraces for its spans.
314
341
 
315
342
  [float]
316
- [[api-transaction-submit]]
317
- ==== `#submit(result, status:, headers:)`
343
+ [[api-transaction-ensure_parent_id]]
344
+ ==== #ensure_parent_id
318
345
 
319
- *Args:*
346
+ If the transaction does not have a parent-ID yet, calling this method generates
347
+ a new ID, sets it as the parent-ID of this transaction, and returns it as a
348
+ `String`.
320
349
 
321
- - `result`: String result of transaction, eg. `success`. Default: `nil`.
322
- - `status`: HTTP status code (for request transactions). Default: `nil`.
323
- - `headers`: HTTP headers (for request transactions). Default: `{}`.
350
+ This enables the correlation of the spans the JavaScript Real User Monitoring
351
+ (RUM) agent creates for the initial page load with the transaction of the
352
+ backend service.
324
353
 
325
- Ends transaction with done, adds HTTP request information, releases it and submits
326
- it to the queue of transactions waiting to be sent to APM Server.
354
+ If your service generates the HTML page dynamically, initializing the
355
+ JavaScript RUM agent with the value of this method allows analyzing the time
356
+ spent in the browser vs in the backend services.
327
357
 
328
- Returns `self`.
358
+ To enable the JavaScript RUM agent, initilialize the RUM agent with the Ruby
359
+ agent'a current transaction:
329
360
 
330
- [float]
331
- [[api-transaction-sampled_]]
332
- ==== #sampled?
333
-
334
- Whether the transaction is _sampled_ eg. it includes stacktraces for its spans.
361
+ [source,html]
362
+ ----
363
+ <script src="elastic-apm-js-base/dist/bundles/elastic-apm-js-base.umd.min.js"></script>
364
+ <script>
365
+ var elasticApm = initApm({
366
+ serviceName: '',
367
+ serverUrl: 'http://localhost:8200',
368
+ pageLoadTraceId: "<%= ElasticAPM.current_transaction&.trace_id %>",
369
+ pageLoadSpanId: "<%= ElasticAPM.current_transaction&.ensure_parent_id %>",
370
+ pageLoadSampled: <%= ElasticAPM.current_transaction&.sampled? %>
371
+ })
372
+ </script>
373
+ ----
374
+ See the {apm-rum-ref}[JavaScript RUM agent documentation] for more information.
335
375
 
336
376
  [float]
337
377
  [[api-span]]
@@ -347,5 +387,4 @@ Whether the transaction is _sampled_ eg. it includes stacktraces for its spans.
347
387
  [[api-context]]
348
388
  === Context
349
389
 
350
- A `Context` provides more information to transactions. Build one with `ElasticAPM.build_context`.
351
-
390
+ See https://www.elastic.co/guide/en/apm/server/current/transaction-api.html#transaction-context-schema[APM Server API Specs].
@@ -56,7 +56,7 @@ Some options can be set with `ENV` variables and all of them may be set in
56
56
  your source code.
57
57
 
58
58
  When setting values for lists using `ENV` variables, strings are split by comma
59
- eg `ELASTIC_APM_ENBALED_ENVIRONMENTS=development,production`.
59
+ eg `ELASTIC_APM_ENABLED_ENVIRONMENTS=development,production`.
60
60
 
61
61
  [float]
62
62
  [[config-config-file]]
@@ -68,7 +68,7 @@ eg `ELASTIC_APM_ENBALED_ENVIRONMENTS=development,production`.
68
68
  | `ELASTIC_APM_CONFIG_FILE` | `config_file` | `config/elastic_apm.yml`
69
69
  |============
70
70
 
71
- Path to the configuration Yaml-file.
71
+ Path to the configuration YAML-file.
72
72
  Elastic APM will load config options from this if the file exists.
73
73
 
74
74
  [float]
@@ -107,37 +107,103 @@ ruby -r securerandom -e 'print SecureRandom.uuid'
107
107
  WARNING: Secret tokens only provide any real security if your APM server use TLS.
108
108
 
109
109
  [float]
110
- [[config-service-name]]
111
- ==== `service_name`
110
+ [[config-api-buffer-size]]
111
+ ==== `api_buffer_size`
112
+ |============
113
+ | Environment | `Config` key | Default
114
+ | `ELASTIC_APM_API_BUFFER_SIZE` | `api_buffer_size` | `256`
115
+ |============
116
+
117
+ Maximum amount of objects kept in queue, before sending to APM Server.
118
+
119
+ If you hit this limit you either have to increase the agent's
120
+ <<config-pool-size,worker pool size>> or it could mean the agent has trouble
121
+ connecting to APM Server. The <<config-log-path,logs>> should tell you what
122
+ went wrong.
123
+
124
+ [float]
125
+ [[config-api-request-size]]
126
+ ==== `api_request_size`
127
+ |============
128
+ | Environment | `Config` key | Default
129
+ | `ELASTIC_APM_API_REQUEST_SIZE` | `api_request_size` | `"750kb"`
130
+ |============
131
+
132
+ Maximum amount of bytes sent over one request to APM Server. When reached the agent
133
+ will open a new request.
134
+
135
+ It has to be provided in *<<config-format-size, size format>>*.
136
+
137
+ [float]
138
+ [[config-api-request-time]]
139
+ ==== `api_request_time`
140
+ |============
141
+ | Environment | `Config` key | Default
142
+ | `ELASTIC_APM_API_REQUEST_TIME` | `api_request_time` | `"10s"`
143
+ |============
144
+
145
+ Maximum duration of a single streaming request to APM Server before opening
146
+ a new one.
147
+
148
+ APM Server has its own limit of 30 seconds before it will close requests.
112
149
 
150
+ It has to be provided in *<<config-format-duration, duration format>>*.
151
+
152
+ [float]
153
+ [[config-custom-key-filters]]
154
+ ==== `custom_key_filters`
113
155
  [options="header"]
114
156
  |============
115
- | Environment | `Config` key | Default | Example
116
- | `ELASTIC_APM_SERVICE_NAME` | `service_name` | App's name | `MyApp`
157
+ | Environment | `Config` key | Default | Example
158
+ | `ELASTIC_APM_CUSTOM_KEY_FILTERS` | `custom_key_filters` | `[]` | `['MyAuthHeader']`
117
159
  |============
118
160
 
119
- The name of your service.
120
- This is used to keep all the errors and transactions of your service together and is
121
- the primary filter in the Elastic APM user interface.
161
+ Elastic APM strips
162
+ https://github.com/elastic/apm-agent-ruby/blob/1.x/lib/elastic_apm/filters/secrets_filter.rb[
163
+ what looks like confidential information] from the request/response headers.
164
+ Use this option to add your own custom header keys to the list of filtered keys.
122
165
 
123
- If you're using Ruby on Rails this will default to your app's name.
124
- If you're using Sinatra it will default to the name of your app's class.
166
+ When setting this option via `ENV`, use a comma separated string.
167
+ Eg. `ELASTIC_APM_CUSTOM_KEY_FILTERS="a,b" # => [/a/, /b/]`
125
168
 
126
- NOTE: The service name must conform to this regular expression: `^[a-zA-Z0-9 _-]+$`.
127
- In less regexy terms: Your service name must only contain characters from the ASCII
128
- alphabet, numbers, dashes, underscores and spaces.
169
+ [float]
170
+ [[config-default-tags]]
171
+ ==== `default_tags`
172
+
173
+ [options="header"]
174
+ |============
175
+ | Environment | `Config` key | Default | Example
176
+ | `ELASTIC_APM_DEFAULT_TAGS` | `default_tags` | `{}` | `region=us1`
177
+ |============
178
+
179
+ Add default tags to add to every transaction.
180
+
181
+ WARNING: Be aware that tags are indexed in Elasticsearch. Using too many unique keys will result in *https://www.elastic.co/blog/found-crash-elasticsearch#mapping-explosion[Mapping explosion]*.
129
182
 
130
183
  [float]
131
- [[config-service-version]]
132
- ==== `service_version`
184
+ [[config-disable-send]]
185
+ ==== `disable_send`
186
+ |============
187
+ | Environment | `Config` key | Default
188
+ | N/A | `disable_send` | `false`
189
+ |============
190
+
191
+ Disables sending payloads to APM Server.
192
+
193
+ [float]
194
+ [[config-disabled-spies]]
195
+ ==== `disabled_spies`
196
+
133
197
  [options="header"]
134
198
  |============
135
- | Environment | `Config` key | Default | Example
136
- | `ELASTIC_APM_SERVICE_VERSION` | `service_version` | `git` sha | A string indicating the version of the deployed service
199
+ | Environment | `Config` key | Default
200
+ | `ELASTIC_APM_DISABLED_SPIES` | `disabled_spies` | `['json']`
137
201
  |============
138
202
 
139
- Deployed version of your service.
140
- Defaults to `git rev-parse --verify HEAD`.
203
+ Elastic APM automatically instruments select third party libraries.
204
+ Use this option to disable any of these.
205
+
206
+ Get an array of enabled spies with `ElasticAPM.agent.config.enabled_spies`.
141
207
 
142
208
  [float]
143
209
  [[config-environment]]
@@ -154,22 +220,19 @@ e.g. "production" or "staging".
154
220
 
155
221
  Defaults to `ENV['RAILS_ENV'] || ENV['RACK_ENV']`.
156
222
 
157
- [float]
158
- [[config-enabled-environments]]
159
- ==== `enabled-environments`
223
+ NOTE: Kibana will not differentiate between different environments. To avoid
224
+ mixing data from multiple environments, consider appending the environment to
225
+ `service_name`.
160
226
 
161
- [options="header"]
227
+ [float]
228
+ [[config-filter-exception-types]]
229
+ ==== `filter_exception_types`
162
230
  |============
163
- | Environment | `Config` key | Default
164
- | `ELASTIC_APM_ENABLED_ENVIRONMENTS` | `enabled_environments` | `['production']`
231
+ | Environment | `Config` key | Default | Example
232
+ | N/A | `filter_exception_types` | `[]` | `[MyApp::Errors::IgnoredError]`
165
233
  |============
166
234
 
167
- Specify which environments to enable APM in.
168
-
169
- If the current envrironment isn't included, the agent will effectively be a _noop_
170
- and do nothing.
171
- So you can keep in your custom instrumentation code without the agent sending
172
- anything nor complain.
235
+ Use this to filter error tracking for specific error constants.
173
236
 
174
237
  [float]
175
238
  [[config-framework-name]]
@@ -210,20 +273,44 @@ otherwise, the default is `nil`.
210
273
  The host name to use when sending error and transaction data to the APM server.
211
274
 
212
275
  [float]
213
- [[config-log-path]]
214
- ==== `log_path`
276
+ [[config-custom-ignore-url-patterns]]
277
+ ==== `ignore_url_patterns`
278
+ [options="header"]
279
+ |============
280
+ | Environment | `Config` key | Default | Example
281
+ | `ELASTIC_APM_IGNORE_URL_PATTERNS` | `ignore_url_patterns` | `[]` | `['^/ping', %r{^/admin}]`
282
+ |============
283
+
284
+ Use this option to ignore certain URL patterns eg. healthchecks or admin sections.
285
+
286
+ _Ignoring_ in this context means _don't wrap in a <<api-transaction,Transaction>>_.
287
+ Errors will still be reported.
215
288
 
289
+ When setting this option via `ENV`, use a comma separated string.
290
+ Eg. `ELASTIC_APM_IGNORE_URL_PATTERNS="a,b" # => [/a/, /b/]`
291
+
292
+ [float]
293
+ [[config-instrument]]
294
+ ==== `instrument`
216
295
  [options="header"]
217
296
  |============
218
- | Environment | `Config` key | Default | Example
219
- | `ELASTIC_APM_LOG_PATH` | `log_path` | `nil` | `log/elastic_apm.log`
297
+ | Environment | `Config` key | Default | Example
298
+ | `ELASTIC_APM_INSTRUMENT` | `instrument` | `true` | `0`
220
299
  |============
221
300
 
222
- A path to a log file.
301
+ Use this option to ignore certain URL patterns eg. healthchecks or admin sections.
223
302
 
224
- By default Elastic APM logs to `stdout` or uses `Rails.log` when used with Rails.
303
+ [float]
304
+ [[config-instrumented-rake-tasks]]
305
+ ==== `instrumented_rake_tasks`
225
306
 
226
- Should support both absolute and relative paths. Just make sure the directory exists.
307
+ [options="header"]
308
+ |============
309
+ | Environment | `Config` key | Default | Example
310
+ | `ELASTIC_APM_INSTRUMENTED_RAKE_TASKS` | `instrumented_rake_tasks` | `[]` | `['my_task']`
311
+ |============
312
+
313
+ Elastic APM can instrument your Rake tasks but given that they are used for a multitude of sometimes very different and not always relevant things, this is opt in.
227
314
 
228
315
  [float]
229
316
  [[config-log-level]]
@@ -237,6 +324,22 @@ Should support both absolute and relative paths. Just make sure the directory ex
237
324
 
238
325
  By default Elastic APM logs to `stdout` or uses `Rails.log` when used with Rails.
239
326
 
327
+ [float]
328
+ [[config-log-path]]
329
+ ==== `log_path`
330
+
331
+ [options="header"]
332
+ |============
333
+ | Environment | `Config` key | Default | Example
334
+ | `ELASTIC_APM_LOG_PATH` | `log_path` | `nil` | `log/elastic_apm.log`
335
+ |============
336
+
337
+ A path to a log file.
338
+
339
+ By default Elastic APM logs to `stdout` or uses `Rails.log` when used with Rails.
340
+
341
+ Should support both absolute and relative paths. Just make sure the directory exists.
342
+
240
343
  [float]
241
344
  [[config-logger]]
242
345
  ==== `logger`
@@ -251,6 +354,56 @@ By default Elastic APM logs to `stdout` or uses `Rails.log` when used with Rails
251
354
 
252
355
  Use this to provide another logger. Expected to have the same API as Ruby's built-in `Logger`.
253
356
 
357
+ [float]
358
+ [[config-pool-size]]
359
+ ==== `pool_size`
360
+
361
+ [options="header"]
362
+ |============
363
+ | Environment | `Config` key | Default | Example
364
+ | `ELASTIC_APM_POOL_SIZE` | `pool_size` | `1` | `2`
365
+ |============
366
+
367
+ Elastic APM uses a thread pool to send its data to APM Server.
368
+
369
+ This makes sure the agent doesn't block the main thread any more than necessary.
370
+
371
+ If you have high load and get warnings about the buffer being full, increasing
372
+ the worker pool size might help.
373
+
374
+ [float]
375
+ [[config-service-name]]
376
+ ==== `service_name`
377
+
378
+ [options="header"]
379
+ |============
380
+ | Environment | `Config` key | Default | Example
381
+ | `ELASTIC_APM_SERVICE_NAME` | `service_name` | App's name | `MyApp`
382
+ |============
383
+
384
+ The name of your service.
385
+ This is used to keep all the errors and transactions of your service together and is
386
+ the primary filter in the Elastic APM user interface.
387
+
388
+ If you're using Ruby on Rails this will default to your app's name.
389
+ If you're using Sinatra it will default to the name of your app's class.
390
+
391
+ NOTE: The service name must conform to this regular expression: `^[a-zA-Z0-9 _-]+$`.
392
+ In layman's terms: Your service name must only contain characters from the ASCII
393
+ alphabet, numbers, dashes, underscores and spaces.
394
+
395
+ [float]
396
+ [[config-service-version]]
397
+ ==== `service_version`
398
+ [options="header"]
399
+ |============
400
+ | Environment | `Config` key | Default | Example
401
+ | `ELASTIC_APM_SERVICE_VERSION` | `service_version` | `git` sha | A string indicating the version of the deployed service
402
+ |============
403
+
404
+ Deployed version of your service.
405
+ Defaults to `git rev-parse --verify HEAD`.
406
+
254
407
  [float]
255
408
  [[config-source-lines-error-app-frames]]
256
409
  ==== `source_lines_error_app_frames`
@@ -286,51 +439,33 @@ storage use in your Elasticsearch cluster.
286
439
 
287
440
  |============
288
441
  | Environment | `Config` key | Default
289
- | `ELASTIC_APM_SPAN_FRAMES_MIN_DURATION` | `span_frames_min_duration` | `5`
442
+ | `ELASTIC_APM_SPAN_FRAMES_MIN_DURATION` | `span_frames_min_duration` | `"5ms"`
290
443
  |============
291
444
 
292
- Use this to disable stacktrace collection for spans with a duration shorter than or equal to the given amount of milleseconds.
293
-
294
- The default is 5ms.
295
-
296
- Set it to `-1` to disable the feature and collect stack traces for all spans.
297
- Setting it to a positive value, e.g. `5`, will limit stack trace collection to spans
298
- with durations equal or longer than the given value in milliseconds, e.g. 5 milliseconds.
299
-
300
- To disable stack trace collection for spans completely, set the value to `0`.
301
-
302
- [float]
303
- [[config-max-queue-size]]
304
- ==== `max_queue_size`
445
+ Use this to disable stacktrace frame collection for spans with a duration shorter
446
+ than or equal to the given amount of milleseconds.
305
447
 
306
- |============
307
- | Environment | `Config` key | Default
308
- | `ELASTIC_APM_MAX_QUEUE_SIZE` | `max_queue_size` | `500`
309
- |============
448
+ The default is `"5ms"`.
310
449
 
311
- Maximum queue length of transactions before sending transactions to the APM server.
312
- A lower value will increase the load on your APM server,
313
- while a higher value can increase the memory pressure of your app.
314
- A higher value also impacts the time until transactions are indexed and searchable
315
- in Elasticsearch.
450
+ Set it to `-1` to collect stack traces for all spans.
451
+ Set it to `0` to disable stack trace collection for all spans.
316
452
 
317
- This setting is useful to limit memory consumption if you experience a sudden spike
318
- of traffic.
453
+ It has to be provided in *<<config-format-duration, duration format>>*.
319
454
 
320
455
  [float]
321
- [[config-flush-interval]]
322
- ==== `flush_interval`
456
+ [[config-transaction-max-spans]]
457
+ ==== `transaction_max_spans`
323
458
 
324
459
  |============
325
- | Environment | `Config` key | Default
326
- | `ELASTIC_APM_FLUSH_INTERVAL` | `flush_interval` | `10`
460
+ | Environment | `Config` key | Default
461
+ | `ELASTIC_APM_TRANSACTION_MAX_SPANS` | `transaction_max_spans` | `500`
327
462
  |============
328
463
 
329
- Interval with which transactions should be sent to the APM server, in seconds.
330
- A lower value will increase the load on your APM server,
331
- while a higher value can increase the memory pressure on your app.
332
- A higher value also impacts the time until transactions are indexed and searchable
333
- in Elasticsearch.
464
+ Limits the amount of spans that are recorded per transaction.
465
+ This is helpful in cases where a transaction creates a very high amount of spans
466
+ (e.g. thousands of SQL queries).
467
+ Setting an upper limit will prevent overloading the agent and the APM server with
468
+ too much work for such edge cases.
334
469
 
335
470
  [float]
336
471
  [[config-transaction-sample-rate]]
@@ -347,21 +482,6 @@ between `0.0` and `1.0`.
347
482
  We still record overall time and the result for unsampled transactions, but no
348
483
  context information, tags, or spans.
349
484
 
350
- [float]
351
- [[config-transaction-max-spans]]
352
- ==== `transaction_max_spans`
353
-
354
- |============
355
- | Environment | `Config` key | Default
356
- | `ELASTIC_APM_TRANSACTION_MAX_SPANS` | `transaction_max_spans` | `500`
357
- |============
358
-
359
- Limits the amount of spans that are recorded per transaction.
360
- This is helpful in cases where a transaction creates a very high amount of spans
361
- (e.g. thousands of SQL queries).
362
- Setting an upper limit will prevent overloading the agent and the APM server with
363
- too much work for such edge cases.
364
-
365
485
  [float]
366
486
  [[config-verify-server-cert]]
367
487
  ==== `verify_server_cert`
@@ -375,97 +495,42 @@ the APM server.
375
495
  Verification can be disabled by changing this setting to `false`.
376
496
 
377
497
  [float]
378
- [[config-disabled-spies]]
379
- ==== `disabled_spies`
498
+ [[config-formats]]
499
+ === Configuration formats
380
500
 
381
- [options="header"]
382
- |============
383
- | Environment | `Config` key | Default
384
- | `ELASTIC_APM_DISABLED_SPIES` | `disabled_spies` | `['json']`
385
- |============
386
-
387
- Elastic APM automatically instruments select third party libraries.
388
- Use this option to disable any of these.
389
-
390
- Get an array of enabled spies with `ElasticAPM.agent.config.enabled_spies`.
501
+ Some options require a unit, either duration or size.
502
+ These need to be provided in a specific format.
391
503
 
392
504
  [float]
393
- [[config-instrumented-rake-tasks]]
394
- ==== `instrumented_rake_tasks`
395
-
396
- [options="header"]
397
- |============
398
- | Environment | `Config` key | Default | Example
399
- | `ELASTIC_APM_INSTRUMENTED_RAKE_TASKS` | `instrumented_rake_tasks` | `[]` | `['my_task']`
400
- |============
505
+ [[config-format-duration]]
506
+ ==== Duration format
401
507
 
402
- Elastic APM can instrument your Rake tasks but given that they are used for a multitude of sometimes very different and not always relevant things, this is opt in.
403
-
404
- [float]
405
- [[config-default-tags]]
406
- ==== `default_tags`
508
+ The _duration_ format is used for options like timeouts.
509
+ The unit is provided as suffix directly after the number, without any separation by whitespace.
407
510
 
408
- [options="header"]
409
- |============
410
- | Environment | `Config` key | Default | Example
411
- | `ELASTIC_APM_DEFAULT_TAGS` | `default_tags` | `{}` | `region=us1`
412
- |============
511
+ *Example*: `"5ms"`
413
512
 
414
- Add default tags to add to every transaction.
513
+ *Supported units*
415
514
 
416
- WARNING: Be aware that tags are indexed in Elasticsearch. Using too many unique keys will result in *https://www.elastic.co/blog/found-crash-elasticsearch#mapping-explosion[Mapping explosion]*.
515
+ * `ms` (milliseconds)
516
+ * `s` (seconds)
517
+ * `m` (minutes)
417
518
 
418
519
  [float]
419
- [[config-custom-key-filters]]
420
- ==== `custom_key_filters`
421
- [options="header"]
422
- |============
423
- | Environment | `Config` key | Default | Example
424
- | `ELASTIC_APM_CUSTOM_KEY_FILTERS` | `custom_key_filters` | `[]` | `['MyAuthHeader']`
425
- |============
520
+ [[config-format-size]]
521
+ ==== Size format
426
522
 
427
- Elastic APM strips
428
- https://github.com/elastic/apm-agent-ruby/blob/1.x/lib/elastic_apm/filters/secrets_filter.rb[
429
- what looks like confidential information] from the request/response headers.
430
- Use this option to add your own custom header keys to the list of filtered keys.
523
+ The _size_ format is used for options like maximum buffer sizes.
524
+ The unit is provided as suffix directly after the number, without any separation by whitespace.
431
525
 
432
- When setting this option via `ENV`, use a comma separated string.
433
- Eg. `ELASTIC_APM_CUSTOM_KEY_FILTERS="a,b" # => [/a/, /b/]`
434
-
435
- [float]
436
- [[config-custom-ignore-url-patterns]]
437
- ==== `ignore_url_patterns`
438
- [options="header"]
439
- |============
440
- | Environment | `Config` key | Default | Example
441
- | `ELASTIC_APM_IGNORE_URL_PATTERNS` | `ignore_url_patterns` | `[]` | `['^/ping', %r{^/admin}]`
442
- |============
443
526
 
444
- Use this option to ignroe certain URL patterns eg. healthchecks or admin sections.
527
+ *Example*: `10kb`
445
528
 
446
- _Ignoring_ in this context means _don't wrap in a <<api-transaction,Transaction>>_.
447
- Errors will still be reported.
529
+ *Supported units*:
448
530
 
449
- When setting this option via `ENV`, use a comma separated string.
450
- Eg. `ELASTIC_APM_IGNORE_URL_PATTERNS="a,b" # => [/a/, /b/]`
451
-
452
- [float]
453
- [[config-filter-exception-types]]
454
- ==== `filter_exception_types`
455
- |============
456
- | Environment | `Config` key | Default | Example
457
- | N/A | `filter_exception_types` | `[]` | `[MyApp::Errors::IgnoredError]`
458
- |============
459
-
460
- Use this to filter error tracking for specific error constants.
461
-
462
- [float]
463
- [[config-disable-send]]
464
- ==== `disable_send`
465
- |============
466
- | Environment | `Config` key | Default
467
- | N/A | `disable_send` | `false`
468
- |============
469
-
470
- Disables sending payloads to APM Server.
531
+ * `b` (bytes)
532
+ * `kb` (kilobytes)
533
+ * `mb` (megabytes)
534
+ * `gb` (gigabytes)
471
535
 
536
+ NOTE: we use the power-of-two sizing convention, e.g. `1 kilobyte == 1024 bytes`