Skip to content

Commit c012d61

Browse files
committed
feat: redis metrics [wip]
1 parent d70dcc0 commit c012d61

File tree

5 files changed

+39
-2
lines changed

5 files changed

+39
-2
lines changed

instrumentation/base/lib/opentelemetry/instrumentation/metrics.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def instrument_configs
7777
# No-op instance methods for metrics instruments.
7878
module NoopExtensions
7979
METER_TYPES.each do |kind|
80-
define_method(kind) {} # rubocop: disable Lint/EmptyBlock
80+
define_method(kind) { |*, **| } # rubocop: disable Lint/EmptyBlock
8181
end
8282

8383
def with_meter; end

instrumentation/redis/Appraisals

+18
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,23 @@
11
# frozen_string_literal: true
22

3+
appraise 'redis-4.x-metrics-sdk' do
4+
gem 'redis-client', '~> 0.22'
5+
gem 'redis', '~> 4.8'
6+
gem 'opentelemetry-metrics-sdk', github: "zvkemp/opentelemetry-ruby", glob: 'metrics_sdk/*.gemspec', ref: "metrics-kwargs"
7+
gem 'opentelemetry-metrics-api', github: "zvkemp/opentelemetry-ruby", glob: 'metrics_api/*.gemspec', ref: "metrics-kwargs"
8+
end
9+
10+
appraise 'redis-5.x-metrics-sdk' do
11+
gem 'redis', '~> 5.0'
12+
gem 'opentelemetry-metrics-sdk', github: "zvkemp/opentelemetry-ruby", glob: 'metrics_sdk/*.gemspec', ref: "metrics-kwargs"
13+
gem 'opentelemetry-metrics-api', github: "zvkemp/opentelemetry-ruby", glob: 'metrics_api/*.gemspec', ref: "metrics-kwargs"
14+
end
15+
16+
appraise 'redis-5.x-metrics-api' do
17+
gem 'redis', '~> 5.0'
18+
gem 'opentelemetry-metrics-api', github: "zvkemp/opentelemetry-ruby", glob: 'metrics_api/*.gemspec', ref: "metrics-kwargs"
19+
end
20+
321
appraise 'redis-4.x' do
422
gem 'redis-client', '~> 0.22'
523
gem 'redis', '~> 4.8'

instrumentation/redis/Gemfile

+2
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,5 @@ gemspec
1111
group :test do
1212
gem 'opentelemetry-instrumentation-base', path: '../base'
1313
end
14+
15+
gem 'pry-byebug'

instrumentation/redis/lib/opentelemetry/instrumentation/redis/instrumentation.rb

+17-1
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,32 @@ class Instrumentation < OpenTelemetry::Instrumentation::Base
2222
option :peer_service, default: nil, validate: :string
2323
option :trace_root_spans, default: true, validate: :boolean
2424
option :db_statement, default: :obfuscate, validate: %I[omit include obfuscate]
25+
option :metrics, default: false, validate: :boolean
26+
27+
# https://opentelemetry.io/docs/specs/semconv/database/database-metrics/#metric-dbclientoperationduration
28+
histogram 'db.client.operation.duration',
29+
attributes: { 'db.system.name' => 'redis' },
30+
unit: 's',
31+
boundaries: [0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1, 5, 10]
32+
33+
def client_operation_duration_histogram
34+
histogram('db.client.operation.duration')
35+
end
2536

2637
private
2738

2839
def require_dependencies
2940
require_relative 'patches/redis_v4_client' if defined?(::Redis) && ::Redis::VERSION < '5'
30-
require_relative 'middlewares/redis_client' if defined?(::RedisClient)
41+
42+
return unless defined?(::RedisClient)
43+
44+
require_relative 'middlewares/redis_client'
45+
require_relative 'middlewares/redis_client_metrics'
3146
end
3247

3348
def patch_client
3449
::RedisClient.register(Middlewares::RedisClientInstrumentation) if defined?(::RedisClient)
50+
::RedisClient.register(Middlewares::RedisClientMetrics) if defined?(::RedisClient)
3551
::Redis::Client.prepend(Patches::RedisV4Client) if defined?(::Redis) && ::Redis::VERSION < '5'
3652
end
3753
end

instrumentation/redis/lib/opentelemetry/instrumentation/redis/middlewares/redis_client.rb

+1
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ def span_attributes(redis_config)
4949

5050
attributes['db.redis.database_index'] = redis_config.db unless redis_config.db.zero?
5151
attributes['peer.service'] = instrumentation.config[:peer_service] if instrumentation.config[:peer_service]
52+
5253
attributes.merge!(OpenTelemetry::Instrumentation::Redis.attributes)
5354
attributes
5455
end

0 commit comments

Comments
 (0)