Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 31 additions & 46 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
PATH
remote: .
specs:
jcw (0.5.2)
jcw (0.6.0)
activesupport (>= 5.0)
httprb-opentracing (~> 0.4.0)
jaeger-client (~> 1.3.0)
opentelemetry-exporter-jaeger (>= 0.21.0)
opentelemetry-sdk (~> 1.2)
thrift

GEM
remote: https://rubygems.org/
Expand All @@ -27,8 +28,6 @@ GEM
i18n (>= 1.6, < 2)
minitest (>= 5.1)
tzinfo (~> 2.0)
addressable (2.8.0)
public_suffix (>= 2.0.2, < 5.0)
ast (2.4.2)
builder (3.2.4)
bundler-audit (0.9.1)
Expand All @@ -39,17 +38,11 @@ GEM
crass (1.0.6)
diff-lcs (1.5.0)
docile (1.4.0)
domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0)
e2mmap (0.1.0)
erubi (1.10.0)
ffi (1.15.5)
ffi-compiler (1.0.1)
ffi (>= 1.0.0)
rake
google-protobuf (3.21.4)
google-protobuf (3.21.4-x86_64-darwin)
google-protobuf (3.21.4-x86_64-linux)
google-protobuf (3.21.9)
google-protobuf (3.21.9-x86_64-darwin)
google-protobuf (3.21.9-x86_64-linux)
googleapis-common-protos-types (1.3.2)
google-protobuf (~> 3.14)
grpc (1.48.0)
Expand All @@ -72,50 +65,47 @@ GEM
slop (>= 4.6)
thwait (>= 0.1)
zeitwerk (>= 2)
http (5.1.0)
addressable (~> 2.8)
http-cookie (~> 1.0)
http-form_data (~> 2.2)
llhttp-ffi (~> 0.4.0)
http-cookie (1.0.5)
domain_name (~> 0.5)
http-form_data (2.3.0)
http-parser (1.2.3)
ffi-compiler (>= 1.0, < 2.0)
httprb-opentracing (0.4.0)
opentracing (~> 0.5.0)
i18n (1.12.0)
concurrent-ruby (~> 1.0)
jaeger-client (1.3.0)
opentracing (~> 0.3)
thrift
json (2.6.2)
llhttp-ffi (0.4.0)
ffi-compiler (~> 1.0)
rake (~> 13.0)
loofah (2.18.0)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
method_source (1.0.0)
mini_portile2 (2.8.0)
minitest (5.16.2)
nokogiri (1.13.8)
nokogiri (1.13.9)
mini_portile2 (~> 2.8.0)
racc (~> 1.4)
nokogiri (1.13.8-x86_64-darwin)
nokogiri (1.13.9-x86_64-darwin)
racc (~> 1.4)
nokogiri (1.13.8-x86_64-linux)
nokogiri (1.13.9-x86_64-linux)
racc (~> 1.4)
opentracing (0.5.0)
opentracing_test_tracer (0.1.1)
opentracing
opentelemetry-api (1.1.0)
opentelemetry-common (0.19.6)
opentelemetry-api (~> 1.0)
opentelemetry-exporter-jaeger (0.22.0)
opentelemetry-api (~> 1.1)
opentelemetry-common (~> 0.19.6)
opentelemetry-sdk (~> 1.2)
opentelemetry-semantic_conventions
thrift
opentelemetry-registry (0.2.0)
opentelemetry-api (~> 1.1)
opentelemetry-sdk (1.2.0)
opentelemetry-api (~> 1.1)
opentelemetry-common (~> 0.19.3)
opentelemetry-registry (~> 0.2)
opentelemetry-semantic_conventions
opentelemetry-semantic_conventions (1.8.0)
opentelemetry-api (~> 1.0)
opentelemetry-test-helpers (0.3.0)
parallel (1.22.1)
parser (3.1.2.0)
ast (~> 2.4.1)
pry (0.14.1)
coderay (~> 1.1)
method_source (~> 1.0)
public_suffix (4.0.7)
racc (1.6.0)
rack (2.2.4)
rack-test (2.0.2)
Expand Down Expand Up @@ -190,14 +180,11 @@ GEM
simplecov_json_formatter (0.1.4)
slop (4.9.2)
thor (1.2.1)
thrift (0.16.0)
thrift (0.17.0)
thwait (0.2.0)
e2mmap
tzinfo (2.0.5)
concurrent-ruby (~> 1.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.8.2)
unicode-display_width (2.2.0)
zeitwerk (2.6.0)

Expand All @@ -210,10 +197,8 @@ DEPENDENCIES
bundler
bundler-audit
gruf
http
http-parser
jcw!
opentracing_test_tracer
opentelemetry-test-helpers
pry
railties
rake
Expand Down
134 changes: 74 additions & 60 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# JCW &middot; <a target="_blank" href="https://github.com/Cado-Labs"><img src="https://github.com/Cado-Labs/cado-labs-logos/raw/main/cado_labs_badge.svg" alt="Supported by Cado Labs" style="max-width: 100%; height: 20px"></a> &middot; [![Coverage Status](https://coveralls.io/repos/github/Cado-Labs/jcw/badge.svg?branch=gem-without-zeitwerk)](https://coveralls.io/github/Cado-Labs/jcw?branch=gem-without-zeitwerk) &middot; [![Gem Version](https://badge.fury.io/rb/jcw.svg)](https://badge.fury.io/rb/jcw)

Simple wrapper for the gem "jaeger-client" with simpler customization.
Helper for the gem "opentelemetry-ruby".

---

Expand Down Expand Up @@ -30,65 +30,10 @@ require 'jcw'

## Usage

Create new initializer for your rails app:

UDP Sender(default):
```ruby
::JCW::Wrapper.configure do |config|
config.service_name = "Service name"
config.connection = { protocol: :udp, host: "127.0.0.1", port: 6831 }
config.enabled = true
config.tags = {
hostname: "custom-hostname",
custom_tag: "custom-tag-value",
}
config.rack_ignore_path_patterns = ["/api/test", %r{/sidekiq}]
config.logger = Logger.new($stdout)
end

# Set middleware for wrapping all requests
Rails.application.middleware.use(JCW::Rack::Tracer)
```

TCP Sender:
```ruby
::JCW::Wrapper.configure do |config|
config.service_name = "Service name"
config.enabled = true
config.subscribe_to = %w[process_action.action_controller start_processing.action_controller] # set ActiveSupport::Notifications namespaces
config.connection = { protocol: :tcp, url: "http://localhost:14268/api/traces", headers: { key: "value" } }
config.tags = {
hostname: "custom-hostname",
custom_tag: "custom-tag-value",
}
config.rack_ignore_path_patterns = ["/api/test", %r{/sidekiq}]
config.logger = Logger.new($stdout)
end

# Set middleware for wrapping all requests
Rails.application.middleware.use(JCW::Rack::Tracer)

# If you need send all logs with spans set on_finish_span and extend JaegerLoggerExtension
# Not recommended for UDP sender, because default max packet size is 65,000 bytes.
Rails.application.config.tap do |config|
config.middleware.use(
JCW::Rack::Tracer,
on_finish_span: lambda do |span|
JCW::Logger.current.logs.each { |log| span.log_kv(**log) }
JCW::Logger.current.clear # Do not forget to avoid memory leaks
end,
)

config.logger.extend(JCW::LoggerExtension)
end
```
- `config.subscribe_to` - not recommended for UDP sender, because default max packet size is 65,000 bytes.

#### GRPC Integration

Client side

```ruby
```
# Add JCW::Interceptors::Gruf::Client Interceptor to Gruf Client Initializer
options = {}
client_options = { timeout: 10, interceptors: [JCW::Interceptors::Gruf::Client.new] }
Expand All @@ -113,14 +58,83 @@ end

# Configure
::JCW::Wrapper.configure do |config|
config.service_name = "Service Name"
config.connection = { protocol: :udp, host: "127.0.0.1", port: 6831 }
config.enabled = true
config.subscribe_to = [/.*/]
config.grpc_ignore_methods = %w[grpc.ignore.method]
end
```

#### Example settings Opentelemetry

Add your base gem for Opentelemetry to a Gemfile:

```ruby
gem "opentelemetry-exporter-jaeger"
gem "opentelemetry-sdk"
```

Add specific gems for instrumentations, example:
```ruby
ggem "opentelemetry-instrumentation-pg"
gem "opentelemetry-instrumentation-http"
gem "opentelemetry-instrumentation-rack"
gem "opentelemetry-instrumentation-redis"
gem "opentelemetry-instrumentation-sidekiq"
```

Add to initializer and configure OpenTelemetry::SDK

```ruby
require "opentelemetry/sdk"
require "opentelemetry/exporter/jaeger"
require "opentelemetry/instrumentation/rack"
require "opentelemetry/instrumentation/sidekiq"
require "opentelemetry/instrumentation/redis"
require "opentelemetry/instrumentation/pg"

OpenTelemetry::SDK.configure do |c|
c.service_name = "PROJECT"
c.use("OpenTelemetry::Instrumentation::HTTP")
c.use("OpenTelemetry::Instrumentation::Rack", {
url_quantization: -> (path, _env) { path.to_s },
untraced_endpoints: %w[/cable],
})
c.use("OpenTelemetry::Instrumentation::Sidekiq", {
span_naming: :job_class,
peer_service: "Sidekiq",
})
c.use("OpenTelemetry::Instrumentation::Redis", {
peer_service: "REDIS",
# The obfuscation of arguments in the db.statement attribute is enabled by default.
# To include the full query, set db_statement to :include.
# To obfuscate, set db_statement to :obfuscate.
# To omit the attribute, set db_statement to :omit.
db_statement: :include,
trace_root_spans: false,
})
c.use("OpenTelemetry::Instrumentation::PG", {
# You may optionally set a value for 'peer.service', which
# will be included on all spans from this instrumentation:
peer_service: "Postgres",

# By default, this instrumentation includes the executed SQL as the `db.statement`
# semantic attribute. Optionally, you may disable the inclusion of this attribute entirely by
# setting this option to :omit or sanitize the attribute by setting to :obfuscate
db_statement: :include,
})
c.add_span_processor(
OpenTelemetry::SDK::Trace::Export::SimpleSpanProcessor.new(
OpenTelemetry::Exporter::Jaeger::AgentExporter.new(
host: "localhost",
port: "6831",
),
),
)
end
```

For more information on <a href="https://github.com/open-telemetry/opentelemetry-ruby">
OpenTelemetry</a>, visit: https://opentelemetry.io/

### Contributing

- Fork it ( https://github.com/Cado-Labs/jcw )
Expand Down
13 changes: 6 additions & 7 deletions jcw.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
spec.authors = ["Alexander Starovojtov"]
spec.email = ["starovojtov.alexander@gmail.com"]

spec.summary = "Wrapper for jaeger-client"
spec.description = "Wrapper for the gem 'jaeger-client' with simpler customization."
spec.summary = "Helper for opentelemetry-ruby"
spec.description = "Helper for the 'opentelemetry-ruby'."
spec.homepage = "https://github.com/Cado-Labs/jcw"
spec.license = "MIT"
spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
Expand All @@ -23,15 +23,14 @@ Gem::Specification.new do |spec|
spec.require_paths = ["lib"]

spec.add_dependency "activesupport", ">= 5.0"
spec.add_dependency "httprb-opentracing", "~> 0.4.0"
spec.add_dependency "jaeger-client", "~> 1.3.0"
spec.add_dependency "opentelemetry-exporter-jaeger", ">= 0.21.0"
spec.add_dependency "opentelemetry-sdk", "~> 1.2"
spec.add_dependency "thrift"

spec.add_development_dependency "bundler"
spec.add_development_dependency "bundler-audit"
spec.add_development_dependency "gruf"
spec.add_development_dependency "http"
spec.add_development_dependency "http-parser"
spec.add_development_dependency "opentracing_test_tracer"
spec.add_development_dependency "opentelemetry-test-helpers"
spec.add_development_dependency "pry"
spec.add_development_dependency "railties"
spec.add_development_dependency "rake"
Expand Down
3 changes: 0 additions & 3 deletions lib/jcw.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
# frozen_string_literal: true

require "opentracing"
require "jaeger/client"
require "active_support"
require "httprb-opentracing"
require_relative "jcw/wrapper"
Loading