uptrace 1.5.0 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 432153daa6ce8e616380e83439ba917f8ef10cffd3588b445edb2c096fdfc1af
4
- data.tar.gz: 0af81b4be764b76793acba0fc8a439f8402669b9a177be030d1042206d2913bc
3
+ metadata.gz: 136e2ee49600cd4a46886e29ff523d8ae51ab6e13a821613e6e2b49fa6d2aad1
4
+ data.tar.gz: 5460a5c99eeea8be633e763ec6a842e7b9f7806c279b9aff2e68bce5ad5308a8
5
5
  SHA512:
6
- metadata.gz: 7cf423378a43884bbd7319ab4335c1a6d4deceacfd157b6129cc98e0b66d5bc595d68ffc723c1dc85ecfdcb38055e08a3e0c2987217788936fddcd7c4d1efa1c
7
- data.tar.gz: fa5437b433c4d25a61051e6b39070a44a09b09b15a23d65d759b2afcb297e30ee10e4b81f3ca86ea29c02f08500fe91a6c2aa2ef9f006795f43450927dd0c0ff
6
+ metadata.gz: a07eb5fb3e35f581672d5ea10a5b1d79c24cd731e17bceed2a22959a1efdc033be4543c005dea8c3de682e5724b2db685e0bff088ddb5f3ee74b554f5c800148
7
+ data.tar.gz: 9203d15f70e209accc41845d2e16462bc248d5a7d736f7e0cbe2f3b91f682f33e89ff03cc32dc71b264d3aeff43e095902e74966be2c7f3790fdefe0a021453b
data/README.md CHANGED
@@ -1,17 +1,20 @@
1
- # Uptrace Ruby exporter for OpenTelemetry
1
+ # OpenTelemetry Ruby distro for Uptrace
2
2
 
3
3
  ![build workflow](https://github.com/uptrace/uptrace-ruby/actions/workflows/build.yml/badge.svg)
4
- [![Documentation](https://img.shields.io/badge/uptrace-documentation-informational)](https://uptrace.dev/get/opentelemetry-ruby.html)
4
+ [![Documentation](https://img.shields.io/badge/uptrace-documentation-informational)](https://uptrace.dev/get/opentelemetry-ruby)
5
5
  [![Chat](https://img.shields.io/badge/-telegram-red?color=white&logo=telegram&logoColor=black)](https://t.me/uptrace)
6
6
 
7
- <a href="https://uptrace.dev/get/opentelemetry-ruby.html">
8
- <img src="https://uptrace.dev/get/devicon/ruby-original.svg" height="200px" />
7
+ <a href="https://uptrace.dev/get/opentelemetry-ruby">
8
+ <img src="https://uptrace.dev/devicon/ruby-original.svg" height="200px" />
9
9
  </a>
10
10
 
11
11
  ## Introduction
12
12
 
13
- uptrace-ruby is an OpenTelemery distribution configured to export
14
- [traces](https://uptrace.dev/opentelemetry/distributed-tracing.html) to Uptrace.
13
+ `uptrace-ruby` is a preconfigured [OpenTelemetry](https://opentelemetry.io)
14
+ distribution for Ruby that exports **traces, logs, and metrics** to
15
+ [Uptrace](https://uptrace.dev). It builds on top of
16
+ [opentelemetry-ruby](https://github.com/open-telemetry/opentelemetry-ruby) and
17
+ makes connecting your application to Uptrace fast and easy.
15
18
 
16
19
  ## Quickstart
17
20
 
@@ -21,7 +24,8 @@ Install uptrace-ruby:
21
24
  gem install uptrace
22
25
  ```
23
26
 
24
- Run the [basic example](example/basic) below using the DSN from the Uptrace project settings page.
27
+ Run the [traces example](example/traces) below using the DSN from the Uptrace
28
+ project settings page.
25
29
 
26
30
  ```ruby
27
31
  #!/usr/bin/env ruby
@@ -32,46 +36,55 @@ require 'bundler/setup'
32
36
  require 'uptrace'
33
37
 
34
38
  # Configure OpenTelemetry with sensible defaults.
35
- # Copy your project DSN here or use UPTRACE_DSN env var.
39
+ # DSN can be set via UPTRACE_DSN environment variable.
40
+ # Example: export UPTRACE_DSN="https://<project_secret>@uptrace.dev?grpc=4317"
36
41
  Uptrace.configure_opentelemetry(dsn: '') do |c|
37
- # c is OpenTelemetry::SDK::Configurator
42
+ # c is an instance of OpenTelemetry::SDK::Configurator
43
+
44
+ # Configure service metadata (helps identify this service in Uptrace).
38
45
  c.service_name = 'myservice'
39
46
  c.service_version = '1.0.0'
40
47
 
48
+ # Add environment information
41
49
  c.resource = OpenTelemetry::SDK::Resources::Resource.create(
42
- 'deployment.environment' => 'production'
50
+ 'deployment.environment.name' => ENV.fetch('RACK_ENV', 'development')
43
51
  )
44
52
  end
45
53
 
46
- # Create a tracer. Usually, tracer is a global variable.
47
- tracer = OpenTelemetry.tracer_provider.tracer('my_app_or_gem', '0.1.0')
48
-
49
- # Create a root span (a trace) to measure some operation.
50
- tracer.in_span('main-operation', kind: :client) do |main|
51
- tracer.in_span('GET /posts/:id') do |child1|
52
- child1.set_attribute('http.method', 'GET')
53
- child1.set_attribute('http.route', '/posts/:id')
54
- child1.set_attribute('http.url', 'http://localhost:8080/posts/123')
55
- child1.set_attribute('http.status_code', 200)
56
- child1.record_exception(ArgumentError.new('error1'))
54
+ # Ensure spans are flushed even if the program exits unexpectedly.
55
+ at_exit { OpenTelemetry.tracer_provider.shutdown }
56
+
57
+ # Register a tracer (usually stored globally).
58
+ TRACER = OpenTelemetry.tracer_provider.tracer('my_app', '0.1.0')
59
+
60
+ # Example trace with nested spans.
61
+ TRACER.in_span('main-operation', kind: :server) do |main_span|
62
+ # Simulate an HTTP request span.
63
+ TRACER.in_span('GET /posts/:id', kind: :client) do |http_span|
64
+ http_span.set_attribute('http.method', 'GET')
65
+ http_span.set_attribute('http.route', '/posts/:id')
66
+ http_span.set_attribute('http.url', 'http://localhost:8080/posts/123')
67
+ http_span.set_attribute('http.status_code', 200)
68
+ http_span.record_exception(ArgumentError.new('Invalid parameter'))
57
69
  end
58
70
 
59
- tracer.in_span('SELECT') do |child2|
60
- child2.set_attribute('db.system', 'mysql')
61
- child2.set_attribute('db.statement', 'SELECT * FROM posts LIMIT 100')
71
+ # Simulate a database query span.
72
+ TRACER.in_span('SELECT posts', kind: :client) do |db_span|
73
+ db_span.set_attribute('db.system', 'mysql')
74
+ db_span.set_attribute('db.statement', 'SELECT * FROM posts LIMIT 100')
62
75
  end
63
76
 
64
- puts("trace URL: #{Uptrace.trace_url(main)}")
77
+ # Print the trace URL (clickable in console).
78
+ puts "Trace URL: #{Uptrace.trace_url(main_span)}"
65
79
  end
66
-
67
- # Send buffered spans and free resources.
68
- OpenTelemetry.tracer_provider.shutdown
69
80
  ```
70
81
 
82
+ Additional examples are available for [logs](example/logs) and
83
+ [metrics](example/metrics).
84
+
71
85
  ## Links
72
86
 
73
87
  - [Examples](example)
74
- - [Documentation](https://uptrace.dev/get/opentelemetry-ruby.html)
75
- - [OpenTelemetry Instrumentations](https://uptrace.dev/opentelemetry/instrumentations/?lang=ruby)
76
- - [OpenTelemetry Rails](https://uptrace.dev/opentelemetry/instrumentations/ruby-rails.html)
77
- - [OpenTelemetry Sinatra](https://uptrace.dev/opentelemetry/instrumentations/ruby-sinatra.html)
88
+ - [Documentation](https://uptrace.dev/get/opentelemetry-ruby)
89
+ - [OpenTelemetry Rails](https://uptrace.dev/guides/opentelemetry-rails)
90
+ - [OpenTelemetry Sinatra](https://uptrace.dev/guides/opentelemetry-sinatra)
data/RELEASING.md ADDED
@@ -0,0 +1,70 @@
1
+ # Releasing
2
+
3
+ This guide explains how to release a new version of the uptrace-ruby gem to
4
+ RubyGems.
5
+
6
+ ## Managing Dependencies
7
+
8
+ ### Checking for outdated dependencies
9
+
10
+ To view outdated dependencies:
11
+
12
+ ```shell
13
+ bundle outdated
14
+ ```
15
+
16
+ ### Updating dependencies
17
+
18
+ Edit the `Gemfile` to update dependency versions, then update the
19
+ `Gemfile.lock`:
20
+
21
+ ```shell
22
+ bundle update
23
+ ```
24
+
25
+ ### Installing dependencies
26
+
27
+ To install all dependencies:
28
+
29
+ ```shell
30
+ bundle install
31
+ ```
32
+
33
+ ## Running Tests
34
+
35
+ Before releasing, ensure all tests pass:
36
+
37
+ ```shell
38
+ rake test
39
+ ```
40
+
41
+ ## Running linter
42
+
43
+ To run linter:
44
+
45
+ ```shell
46
+ bundle exec rake
47
+ ```
48
+
49
+ To auto-correct issues:
50
+
51
+ ```shell
52
+ bundle exec rubocop -A
53
+ ```
54
+
55
+ ## Publishing a Release
56
+
57
+ 1. **Update the version**: Bump the version number in `lib/uptrace/version.rb`
58
+
59
+ 2. **Build and publish the gem**:
60
+
61
+ ```shell
62
+ gem build uptrace.gemspec
63
+ bundle install
64
+ gem push uptrace-X.Y.Z.gem
65
+ ```
66
+
67
+ Replace `X.Y.Z` with the actual version number you specified in step 1.
68
+
69
+ **Note**: Make sure you have the necessary permissions to push to the uptrace
70
+ gem on RubyGems before attempting to publish.
@@ -9,7 +9,7 @@ module Uptrace
9
9
 
10
10
  # @param [string] dsn
11
11
  def initialize(dsn: '')
12
- dsn = ENV.fetch('UPTRACE_DSN', '') if dsn.empty?
12
+ dsn = ENV.fetch('UPTRACE_DSN', '') if dsn.empty? || dsn == '<FIXME>'
13
13
 
14
14
  begin
15
15
  @dsn = DSN.new(dsn)
@@ -17,7 +17,7 @@ module Uptrace
17
17
  Uptrace.logger.error("Uptrace is disabled: #{e.message}")
18
18
  @disabled = true
19
19
 
20
- @dsn = DSN.new('https://TOKEN@uptrace.dev')
20
+ @dsn = DSN.new('https://project_secret@api.uptrace.dev?grpc=4317')
21
21
  end
22
22
  end
23
23
 
data/lib/uptrace/dsn.rb CHANGED
@@ -40,7 +40,7 @@ module Uptrace
40
40
  end
41
41
 
42
42
  def otlp_http_endpoint
43
- return 'https://otlp.uptrace.dev' if @host == 'uptrace.dev'
43
+ return 'https://api.uptrace.dev' if @host == 'uptrace.dev'
44
44
  return "#{@scheme}://#{@host}:#{@http_port}" if @http_port != 443
45
45
 
46
46
  "#{@scheme}://#{@host}"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Uptrace
4
- VERSION = '1.5.0'
4
+ VERSION = '1.8.1'
5
5
  end
data/lib/uptrace.rb CHANGED
@@ -2,22 +2,23 @@
2
2
 
3
3
  require 'logger'
4
4
 
5
+ require 'opentelemetry/sdk'
5
6
  require 'opentelemetry/exporter/otlp'
6
7
 
8
+ require 'opentelemetry-metrics-sdk'
9
+ require 'opentelemetry-exporter-otlp-metrics'
10
+
11
+ require 'opentelemetry-logs-sdk'
12
+ require 'opentelemetry/exporter/otlp_logs'
13
+
7
14
  # Uptrace provides Uptrace exporters for OpenTelemetry.
8
15
  module Uptrace
9
16
  extend self
10
17
 
11
18
  attr_accessor :logger
12
- attr_writer :client
13
19
 
14
20
  self.logger = Logger.new($stdout)
15
21
 
16
- # @return [Object, Client] registered client or a default no-op implementation of the client.
17
- def client
18
- @client ||= Client.new
19
- end
20
-
21
22
  # @param [optional OpenTelemetry::Trace::Span] span
22
23
  # @return [String]
23
24
  def trace_url(span = nil)
@@ -31,13 +32,32 @@ module Uptrace
31
32
  # @yieldparam [OpenTelemetry::SDK::Configurator] c Yields a configurator to the
32
33
  # provided block
33
34
  def configure_opentelemetry(dsn: '')
35
+ @client = Client.new(dsn: dsn)
36
+ return if @client.disabled?
37
+
34
38
  OpenTelemetry::SDK.configure do |c|
35
- @client = Client.new(dsn: dsn) unless dsn.empty?
36
- c.add_span_processor(span_processor(@client.dsn)) unless client.disabled?
39
+ # Set default IdGenerator and let users override
37
40
  c.id_generator = Uptrace::IdGenerator
41
+ c.add_span_processor(span_processor(@client.dsn))
38
42
 
39
43
  yield c if block_given?
44
+
45
+ # Merge resource
46
+ current_resource = c.instance_variable_get(:@resource)
47
+ current_resource ||= OpenTelemetry::SDK::Resources::Resource.create
48
+
49
+ host_resource = OpenTelemetry::SDK::Resources::Resource.create(
50
+ 'host.name' => Socket.gethostname
51
+ )
52
+ c.resource = current_resource.merge(host_resource)
40
53
  end
54
+
55
+ me = metric_exporter(@client.dsn)
56
+ OpenTelemetry.meter_provider.add_metric_reader(me)
57
+
58
+ le = log_exporter(@client.dsn)
59
+ processor = OpenTelemetry::SDK::Logs::Export::BatchLogRecordProcessor.new(le)
60
+ OpenTelemetry.logger_provider.add_log_record_processor(processor)
41
61
  end
42
62
 
43
63
  private
@@ -45,7 +65,6 @@ module Uptrace
45
65
  def span_processor(dsn)
46
66
  exporter = OpenTelemetry::Exporter::OTLP::Exporter.new(
47
67
  endpoint: "#{dsn.otlp_http_endpoint}/v1/traces",
48
- # Set the Uptrace DSN here or use UPTRACE_DSN env var.
49
68
  headers: { 'uptrace-dsn': dsn.to_s },
50
69
  compression: 'gzip'
51
70
  )
@@ -56,6 +75,22 @@ module Uptrace
56
75
  schedule_delay: 5_000
57
76
  )
58
77
  end
78
+
79
+ def metric_exporter(dsn)
80
+ OpenTelemetry::Exporter::OTLP::Metrics::MetricsExporter.new(
81
+ endpoint: "#{dsn.otlp_http_endpoint}/v1/metrics",
82
+ headers: { 'uptrace-dsn': dsn.to_s },
83
+ compression: 'gzip'
84
+ )
85
+ end
86
+
87
+ def log_exporter(dsn)
88
+ OpenTelemetry::Exporter::OTLP::Logs::LogsExporter.new(
89
+ endpoint: "#{dsn.otlp_http_endpoint}/v1/logs",
90
+ headers: { 'uptrace-dsn': dsn.to_s },
91
+ compression: 'gzip'
92
+ )
93
+ end
59
94
  end
60
95
 
61
96
  require 'uptrace/version'
metadata CHANGED
@@ -1,43 +1,112 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uptrace
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Uptrace Authors
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-07-25 00:00:00.000000000 Z
10
+ date: 2025-07-23 00:00:00.000000000 Z
12
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: logger
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: 1.7.0
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: 1.7.0
13
26
  - !ruby/object:Gem::Dependency
14
27
  name: opentelemetry-exporter-otlp
15
28
  requirement: !ruby/object:Gem::Requirement
16
29
  requirements:
17
30
  - - "~>"
18
31
  - !ruby/object:Gem::Version
19
- version: 0.28.1
32
+ version: 0.30.0
20
33
  type: :runtime
21
34
  prerelease: false
22
35
  version_requirements: !ruby/object:Gem::Requirement
23
36
  requirements:
24
37
  - - "~>"
25
38
  - !ruby/object:Gem::Version
26
- version: 0.28.1
39
+ version: 0.30.0
27
40
  - !ruby/object:Gem::Dependency
28
41
  name: opentelemetry-sdk
29
42
  requirement: !ruby/object:Gem::Requirement
30
43
  requirements:
31
44
  - - "~>"
32
45
  - !ruby/object:Gem::Version
33
- version: 1.5.0
46
+ version: 1.8.0
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: 1.8.0
54
+ - !ruby/object:Gem::Dependency
55
+ name: opentelemetry-exporter-otlp-metrics
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: 0.5.0
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: 0.5.0
68
+ - !ruby/object:Gem::Dependency
69
+ name: opentelemetry-metrics-sdk
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: 0.7.3
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: 0.7.3
82
+ - !ruby/object:Gem::Dependency
83
+ name: opentelemetry-exporter-otlp-logs
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: 0.2.0
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: 0.2.0
96
+ - !ruby/object:Gem::Dependency
97
+ name: opentelemetry-logs-sdk
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: 0.2.0
34
103
  type: :runtime
35
104
  prerelease: false
36
105
  version_requirements: !ruby/object:Gem::Requirement
37
106
  requirements:
38
107
  - - "~>"
39
108
  - !ruby/object:Gem::Version
40
- version: 1.5.0
109
+ version: 0.2.0
41
110
  - !ruby/object:Gem::Dependency
42
111
  name: bundler
43
112
  requirement: !ruby/object:Gem::Requirement
@@ -150,7 +219,7 @@ dependencies:
150
219
  - - "~>"
151
220
  - !ruby/object:Gem::Version
152
221
  version: 0.1.6
153
- description: Uptrace Ruby exporter for OpenTelemetry
222
+ description: Configures OpenTelemetry Ruby to export data to Uptrace
154
223
  email:
155
224
  - support@uptrace.dev
156
225
  executables: []
@@ -160,7 +229,7 @@ files:
160
229
  - ".yardopts"
161
230
  - LICENSE
162
231
  - README.md
163
- - RELEASE.md
232
+ - RELEASING.md
164
233
  - TODO.md
165
234
  - lib/uptrace.rb
166
235
  - lib/uptrace/client.rb
@@ -172,7 +241,6 @@ licenses:
172
241
  - BSD-2-Clause
173
242
  metadata:
174
243
  rubygems_mfa_required: 'true'
175
- post_install_message:
176
244
  rdoc_options: []
177
245
  require_paths:
178
246
  - lib
@@ -187,8 +255,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
187
255
  - !ruby/object:Gem::Version
188
256
  version: '0'
189
257
  requirements: []
190
- rubygems_version: 3.4.10
191
- signing_key:
258
+ rubygems_version: 3.6.2
192
259
  specification_version: 4
193
- summary: Uptrace Ruby exporter for OpenTelemetry
260
+ summary: Uptrace wrapper for OpenTelemetry Ruby
194
261
  test_files: []
data/RELEASE.md DELETED
@@ -1,13 +0,0 @@
1
- Update dependencies:
2
-
3
- ```
4
- bundle update
5
- ```
6
-
7
- Bump version in `lib/uptrace/version.rb` and then run:
8
-
9
- ```shell
10
- gem build uptrace.gemspec
11
- bundle install
12
- gem push uptrace-0.2.0.gem
13
- ```