uptrace 1.8.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 +39 -25
- data/RELEASING.md +70 -0
- data/lib/uptrace/client.rb +2 -2
- data/lib/uptrace/version.rb +1 -1
- data/lib/uptrace.rb +33 -9
- metadata +51 -9
- 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,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# OpenTelemetry Ruby distro for Uptrace
|
2
2
|
|
3
3
|

|
4
4
|
[](https://uptrace.dev/get/opentelemetry-ruby)
|
@@ -10,8 +10,11 @@
|
|
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,42 +36,52 @@ 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)
|
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/version.rb
CHANGED
data/lib/uptrace.rb
CHANGED
@@ -2,24 +2,23 @@
|
|
2
2
|
|
3
3
|
require 'logger'
|
4
4
|
|
5
|
+
require 'opentelemetry/sdk'
|
5
6
|
require 'opentelemetry/exporter/otlp'
|
7
|
+
|
6
8
|
require 'opentelemetry-metrics-sdk'
|
7
9
|
require 'opentelemetry-exporter-otlp-metrics'
|
8
10
|
|
11
|
+
require 'opentelemetry-logs-sdk'
|
12
|
+
require 'opentelemetry/exporter/otlp_logs'
|
13
|
+
|
9
14
|
# Uptrace provides Uptrace exporters for OpenTelemetry.
|
10
15
|
module Uptrace
|
11
16
|
extend self
|
12
17
|
|
13
18
|
attr_accessor :logger
|
14
|
-
attr_writer :client
|
15
19
|
|
16
20
|
self.logger = Logger.new($stdout)
|
17
21
|
|
18
|
-
# @return [Object, Client] registered client or a default no-op implementation of the client.
|
19
|
-
def client
|
20
|
-
@client ||= Client.new
|
21
|
-
end
|
22
|
-
|
23
22
|
# @param [optional OpenTelemetry::Trace::Span] span
|
24
23
|
# @return [String]
|
25
24
|
def trace_url(span = nil)
|
@@ -33,15 +32,32 @@ module Uptrace
|
|
33
32
|
# @yieldparam [OpenTelemetry::SDK::Configurator] c Yields a configurator to the
|
34
33
|
# provided block
|
35
34
|
def configure_opentelemetry(dsn: '')
|
35
|
+
@client = Client.new(dsn: dsn)
|
36
|
+
return if @client.disabled?
|
37
|
+
|
36
38
|
OpenTelemetry::SDK.configure do |c|
|
37
|
-
|
38
|
-
c.add_span_processor(span_processor(@client.dsn)) unless client.disabled?
|
39
|
+
# Set default IdGenerator and let users override
|
39
40
|
c.id_generator = Uptrace::IdGenerator
|
41
|
+
c.add_span_processor(span_processor(@client.dsn))
|
40
42
|
|
41
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)
|
42
53
|
end
|
43
54
|
|
44
|
-
|
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)
|
45
61
|
end
|
46
62
|
|
47
63
|
private
|
@@ -67,6 +83,14 @@ module Uptrace
|
|
67
83
|
compression: 'gzip'
|
68
84
|
)
|
69
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
|
70
94
|
end
|
71
95
|
|
72
96
|
require 'uptrace/version'
|
metadata
CHANGED
@@ -1,14 +1,28 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: uptrace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.8.
|
4
|
+
version: 1.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Uptrace Authors
|
8
8
|
bindir: bin
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-
|
10
|
+
date: 2025-07-23 00:00:00.000000000 Z
|
11
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
|
12
26
|
- !ruby/object:Gem::Dependency
|
13
27
|
name: opentelemetry-exporter-otlp
|
14
28
|
requirement: !ruby/object:Gem::Requirement
|
@@ -43,28 +57,56 @@ dependencies:
|
|
43
57
|
requirements:
|
44
58
|
- - "~>"
|
45
59
|
- !ruby/object:Gem::Version
|
46
|
-
version: 0.
|
60
|
+
version: 0.5.0
|
47
61
|
type: :runtime
|
48
62
|
prerelease: false
|
49
63
|
version_requirements: !ruby/object:Gem::Requirement
|
50
64
|
requirements:
|
51
65
|
- - "~>"
|
52
66
|
- !ruby/object:Gem::Version
|
53
|
-
version: 0.
|
67
|
+
version: 0.5.0
|
54
68
|
- !ruby/object:Gem::Dependency
|
55
69
|
name: opentelemetry-metrics-sdk
|
56
70
|
requirement: !ruby/object:Gem::Requirement
|
57
71
|
requirements:
|
58
72
|
- - "~>"
|
59
73
|
- !ruby/object:Gem::Version
|
60
|
-
version: 0.
|
74
|
+
version: 0.7.3
|
61
75
|
type: :runtime
|
62
76
|
prerelease: false
|
63
77
|
version_requirements: !ruby/object:Gem::Requirement
|
64
78
|
requirements:
|
65
79
|
- - "~>"
|
66
80
|
- !ruby/object:Gem::Version
|
67
|
-
version: 0.
|
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
|
103
|
+
type: :runtime
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 0.2.0
|
68
110
|
- !ruby/object:Gem::Dependency
|
69
111
|
name: bundler
|
70
112
|
requirement: !ruby/object:Gem::Requirement
|
@@ -177,7 +219,7 @@ dependencies:
|
|
177
219
|
- - "~>"
|
178
220
|
- !ruby/object:Gem::Version
|
179
221
|
version: 0.1.6
|
180
|
-
description:
|
222
|
+
description: Configures OpenTelemetry Ruby to export data to Uptrace
|
181
223
|
email:
|
182
224
|
- support@uptrace.dev
|
183
225
|
executables: []
|
@@ -187,7 +229,7 @@ files:
|
|
187
229
|
- ".yardopts"
|
188
230
|
- LICENSE
|
189
231
|
- README.md
|
190
|
-
-
|
232
|
+
- RELEASING.md
|
191
233
|
- TODO.md
|
192
234
|
- lib/uptrace.rb
|
193
235
|
- lib/uptrace/client.rb
|
@@ -215,5 +257,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
215
257
|
requirements: []
|
216
258
|
rubygems_version: 3.6.2
|
217
259
|
specification_version: 4
|
218
|
-
summary: Uptrace
|
260
|
+
summary: Uptrace wrapper for OpenTelemetry Ruby
|
219
261
|
test_files: []
|