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 +4 -4
- data/README.md +45 -32
- data/RELEASING.md +70 -0
- data/lib/uptrace/client.rb +2 -2
- data/lib/uptrace/dsn.rb +1 -1
- data/lib/uptrace/version.rb +1 -1
- data/lib/uptrace.rb +44 -9
- metadata +80 -13
- data/RELEASE.md +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 136e2ee49600cd4a46886e29ff523d8ae51ab6e13a821613e6e2b49fa6d2aad1
|
4
|
+
data.tar.gz: 5460a5c99eeea8be633e763ec6a842e7b9f7806c279b9aff2e68bce5ad5308a8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a07eb5fb3e35f581672d5ea10a5b1d79c24cd731e17bceed2a22959a1efdc033be4543c005dea8c3de682e5724b2db685e0bff088ddb5f3ee74b554f5c800148
|
7
|
+
data.tar.gz: 9203d15f70e209accc41845d2e16462bc248d5a7d736f7e0cbe2f3b91f682f33e89ff03cc32dc71b264d3aeff43e095902e74966be2c7f3790fdefe0a021453b
|
data/README.md
CHANGED
@@ -1,17 +1,20 @@
|
|
1
|
-
#
|
1
|
+
# OpenTelemetry Ruby distro for Uptrace
|
2
2
|
|
3
3
|

|
4
|
-
[](https://uptrace.dev/get/opentelemetry-ruby
|
4
|
+
[](https://uptrace.dev/get/opentelemetry-ruby)
|
5
5
|
[](https://t.me/uptrace)
|
6
6
|
|
7
|
-
<a href="https://uptrace.dev/get/opentelemetry-ruby
|
8
|
-
<img src="https://uptrace.dev/
|
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
|
14
|
-
|
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 [
|
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
|
-
#
|
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' => '
|
50
|
+
'deployment.environment.name' => ENV.fetch('RACK_ENV', 'development')
|
43
51
|
)
|
44
52
|
end
|
45
53
|
|
46
|
-
#
|
47
|
-
|
48
|
-
|
49
|
-
#
|
50
|
-
tracer
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
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
|
-
|
60
|
-
|
61
|
-
|
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
|
-
|
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
|
75
|
-
- [OpenTelemetry
|
76
|
-
- [OpenTelemetry
|
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.
|
data/lib/uptrace/client.rb
CHANGED
@@ -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://
|
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://
|
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}"
|
data/lib/uptrace/version.rb
CHANGED
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
|
-
|
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.
|
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:
|
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.
|
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.
|
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.
|
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:
|
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:
|
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
|
-
-
|
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.
|
191
|
-
signing_key:
|
258
|
+
rubygems_version: 3.6.2
|
192
259
|
specification_version: 4
|
193
|
-
summary: Uptrace
|
260
|
+
summary: Uptrace wrapper for OpenTelemetry Ruby
|
194
261
|
test_files: []
|