minato-trace 0.2.0 → 1.0.0
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/lib/minato/trace/configuration.rb +102 -0
- data/lib/minato/trace/instrumentation/minato_logger/middleware.rb +43 -0
- data/lib/minato/trace/instrumentation/minato_logger.rb +31 -0
- data/lib/minato/trace/railtie.rb +53 -3
- data/lib/minato/trace/version.rb +1 -1
- data/lib/minato/trace.rb +16 -26
- data/lib/tasks/minato/trace_tasks.rake +1 -0
- metadata +182 -13
- data/lib/minato/trace/middleware/distributed_trace_context.rb +0 -40
- data/lib/minato/trace/middleware/integrate_with_cloud_logging.rb +0 -35
- data/lib/minato/trace/middleware.rb +0 -11
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: abaab6f1d94d35a7bb32bd461e843bb82cbb7e9920992b92cee8c3c1349e1f5c
|
|
4
|
+
data.tar.gz: '012468667f02897aa987032acb3ef00cd8306a7dce33ab5be8fba48302ed6fea'
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 85a8112afede40d0f3272d19938966d515f6d14d505e01afdccdbca0cd5aa7cbfaab94e6116963c587f4db9e8346e75986a31c2961201c13455c87fa2f75902a
|
|
7
|
+
data.tar.gz: 20b9d7c2b5332bca6aee82e81d85381191d5c455efba0586a24b382966f052b75b698dbfb2389c288e9f67b307754ab065296bdfcc729b7dfd7d422885d28a21
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "opentelemetry/sdk"
|
|
4
|
+
require "opentelemetry/exporter/otlp"
|
|
5
|
+
|
|
6
|
+
module Minato
|
|
7
|
+
module Trace
|
|
8
|
+
class Configuration
|
|
9
|
+
# Indicates whether the trace functionality is enabled.
|
|
10
|
+
# This can be controlled via the `MINATO_TRACE_DISABLED` environment variable.
|
|
11
|
+
# If set to "true", tracing will be disabled.
|
|
12
|
+
# Default is true, meaning tracing is enabled unless explicitly disabled.
|
|
13
|
+
# Example: `ENV["MINATO_TRACE_DISABLED"] = "true"` will disable tracing
|
|
14
|
+
attr_accessor :enabled
|
|
15
|
+
|
|
16
|
+
# The name of the service to be used in Google Cloud Trace.
|
|
17
|
+
# This is used to identify the service in the Google Cloud Console.
|
|
18
|
+
# It should be a unique name that represents your application.
|
|
19
|
+
# Example: "my-rails-app"
|
|
20
|
+
attr_accessor :service_name
|
|
21
|
+
|
|
22
|
+
# This is the endpoint where traces will be sent.
|
|
23
|
+
# Default is google's Cloud Trace endpoint.
|
|
24
|
+
# You can modify this endpoint if you are using a different trace service.
|
|
25
|
+
# Example: "https://cloudtrace.googleapis.com/v1/projects/my-gcp-project-id/traces"
|
|
26
|
+
attr_accessor :otlp_endpoint
|
|
27
|
+
|
|
28
|
+
# A list of routes that should be excluded from tracing.
|
|
29
|
+
# These routes will not be traced, which is useful for health check endpoints
|
|
30
|
+
# or other endpoints that do not require tracing.
|
|
31
|
+
# Default is ["/health/alive", "/health/ready"].
|
|
32
|
+
# You can modify this list to include any other routes you want to exclude.
|
|
33
|
+
attr_reader :excluded_routes
|
|
34
|
+
|
|
35
|
+
# The runtime environment in which the application is running.
|
|
36
|
+
# It can be used to differentiate between environments for logging or tracing purposes.
|
|
37
|
+
# Default is the value of the `RUNTIME_ENV` environment variable or Rails environment.
|
|
38
|
+
# If `RUNTIME_ENV` is not set, it will default to `Rails.env
|
|
39
|
+
# Example: "production"
|
|
40
|
+
attr_reader :runtime_environment
|
|
41
|
+
|
|
42
|
+
# The ID of the project on Google Cloud
|
|
43
|
+
# It's used to generate official links betewwn the Cloud Trace and the Cloud Logging
|
|
44
|
+
# Example: "meu-gcp-project-id"
|
|
45
|
+
attr_accessor :project_id
|
|
46
|
+
|
|
47
|
+
def initialize
|
|
48
|
+
@enabled = ENV["MINATO_TRACE_DISABLED"] != "true"
|
|
49
|
+
@service_name = nil
|
|
50
|
+
@otlp_endpoint = ENV["OTEL_EXPORTER_OTLP_ENDPOINT"] || nil
|
|
51
|
+
@excluded_routes = ["/health/alive", "/health/ready"]
|
|
52
|
+
@runtime_environment = ENV["RUNTIME_ENV"] || ENV["RAILS_ENV"] || nil
|
|
53
|
+
@project_id = ENV["GOOGLE_CLOUD_PROJECT"] || ENV["GCP_PROJECT"] || nil
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def excluded_routes=(routes)
|
|
57
|
+
@excluded_routes = Array(routes).map(&:to_s).uniq
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def enabled?
|
|
61
|
+
@enabled
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def disable!
|
|
65
|
+
@enabled = false
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def enable!
|
|
69
|
+
@enabled = true
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def otlp_exporter
|
|
73
|
+
OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
|
|
74
|
+
OpenTelemetry::Exporter::OTLP::Exporter.new(
|
|
75
|
+
endpoint: otlp_endpoint
|
|
76
|
+
),
|
|
77
|
+
max_queue_size: 1000,
|
|
78
|
+
schedule_delay: 1000,
|
|
79
|
+
max_export_batch_size: 100
|
|
80
|
+
)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def console_exporter
|
|
84
|
+
OpenTelemetry::SDK::Trace::Export::SimpleSpanProcessor.new(
|
|
85
|
+
OpenTelemetry::SDK::Trace::Export::ConsoleSpanExporter.new
|
|
86
|
+
)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def exporter
|
|
90
|
+
otlp_endpoint.nil? ? console_exporter : otlp_exporter
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def ot_resources
|
|
94
|
+
resources = {
|
|
95
|
+
OpenTelemetry::SemanticConventions::Resource::SERVICE_NAME => service_name,
|
|
96
|
+
OpenTelemetry::SemanticConventions::Resource::DEPLOYMENT_ENVIRONMENT => runtime_environment
|
|
97
|
+
}
|
|
98
|
+
OpenTelemetry::SDK::Resources::Resource.create(resources)
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Minato
|
|
4
|
+
module Trace
|
|
5
|
+
module Instrumentation
|
|
6
|
+
class MinatoLogger < OpenTelemetry::Instrumentation::Base
|
|
7
|
+
class Middleware
|
|
8
|
+
def call(log)
|
|
9
|
+
span = OpenTelemetry::Trace.current_span
|
|
10
|
+
|
|
11
|
+
return log unless span.context.valid?
|
|
12
|
+
|
|
13
|
+
data = trace_data(span)
|
|
14
|
+
log.merge(data)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
def trace_data(span)
|
|
20
|
+
data = {
|
|
21
|
+
"trace_id" => span.context.hex_trace_id,
|
|
22
|
+
"span_id" => span.context.hex_span_id
|
|
23
|
+
}
|
|
24
|
+
trace_data = otel_data(data, span)
|
|
25
|
+
|
|
26
|
+
data.merge(trace_data)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def otel_data(data, span)
|
|
30
|
+
project_id = Minato::Trace.config.project_id
|
|
31
|
+
return {} if project_id.blank?
|
|
32
|
+
|
|
33
|
+
{
|
|
34
|
+
"logging.googleapis.com/trace" => "projects/#{project_id}/traces/#{data["trace_id"]}",
|
|
35
|
+
"logging.googleapis.com/spanId" => data["span_id"],
|
|
36
|
+
"logging.googleapis.com/trace_sampled" => span.context.trace_flags.sampled?
|
|
37
|
+
}
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "opentelemetry/instrumentation/base"
|
|
4
|
+
require_relative "minato_logger/middleware"
|
|
5
|
+
|
|
6
|
+
module Minato
|
|
7
|
+
module Trace
|
|
8
|
+
module Instrumentation
|
|
9
|
+
class MinatoLogger < OpenTelemetry::Instrumentation::Base
|
|
10
|
+
instrumentation_name "Minato::Trace::Instrumentation::MinatoLogger"
|
|
11
|
+
instrumentation_version Minato::Trace::VERSION
|
|
12
|
+
|
|
13
|
+
present do
|
|
14
|
+
defined?(::MinatoLogger::Formatters::FluentBit)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
install do |_config|
|
|
18
|
+
require_relative "minato_logger/middleware"
|
|
19
|
+
|
|
20
|
+
Rails.application.config.after_initialize do
|
|
21
|
+
if Rails.application.config.respond_to?(:minato_logger)
|
|
22
|
+
Rails.application.config.minato_logger.middleware.use(
|
|
23
|
+
Minato::Trace::Instrumentation::MinatoLogger::Middleware
|
|
24
|
+
)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
data/lib/minato/trace/railtie.rb
CHANGED
|
@@ -1,11 +1,61 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "opentelemetry/sdk"
|
|
4
|
+
require "opentelemetry/exporter/otlp"
|
|
5
|
+
require "opentelemetry/resource/detector"
|
|
6
|
+
|
|
7
|
+
require "opentelemetry/instrumentation/rack"
|
|
8
|
+
require "opentelemetry/instrumentation/action_pack"
|
|
9
|
+
require "opentelemetry/instrumentation/active_record"
|
|
10
|
+
require "opentelemetry/instrumentation/active_job"
|
|
11
|
+
require "opentelemetry/instrumentation/net/http"
|
|
12
|
+
require "opentelemetry/instrumentation/faraday"
|
|
13
|
+
require "opentelemetry/instrumentation/http"
|
|
14
|
+
require "opentelemetry/instrumentation/active_model_serializers"
|
|
15
|
+
require "opentelemetry/instrumentation/concurrent_ruby"
|
|
16
|
+
require "opentelemetry/instrumentation/redis"
|
|
17
|
+
|
|
18
|
+
require "minato/trace/instrumentation/minato_logger"
|
|
19
|
+
require "rails"
|
|
20
|
+
|
|
3
21
|
module Minato
|
|
4
22
|
module Trace
|
|
5
23
|
class Railtie < ::Rails::Railtie
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
24
|
+
config.minato_trace = ActiveSupport::OrderedOptions.new
|
|
25
|
+
|
|
26
|
+
initializer "minato_trace.configure", after: :load_config_initializers do |_app|
|
|
27
|
+
next unless Minato::Trace.config.enabled?
|
|
28
|
+
|
|
29
|
+
unless Minato::Trace.config.service_name
|
|
30
|
+
raise Minato::Trace::Error, "Minato Trace service_name configuration is missing."
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
OpenTelemetry::SDK.configure do |c|
|
|
34
|
+
c.service_name = Minato::Trace.config.service_name
|
|
35
|
+
app_resource = Minato::Trace.config.ot_resources
|
|
36
|
+
gcp_resource = OpenTelemetry::Resource::Detector::GoogleCloudPlatform.detect
|
|
37
|
+
c.resource = gcp_resource.merge(app_resource)
|
|
38
|
+
|
|
39
|
+
c.use "OpenTelemetry::Instrumentation::Rack", {
|
|
40
|
+
enabled: true,
|
|
41
|
+
untraced_endpoints: Minato::Trace.config.excluded_routes
|
|
42
|
+
}
|
|
43
|
+
c.use "OpenTelemetry::Instrumentation::ActionPack"
|
|
44
|
+
|
|
45
|
+
c.use "OpenTelemetry::Instrumentation::ActiveRecord"
|
|
46
|
+
c.use "OpenTelemetry::Instrumentation::ActiveJob"
|
|
47
|
+
c.use "OpenTelemetry::Instrumentation::Redis"
|
|
48
|
+
|
|
49
|
+
c.use "OpenTelemetry::Instrumentation::Net::HTTP"
|
|
50
|
+
c.use "OpenTelemetry::Instrumentation::Faraday"
|
|
51
|
+
c.use "OpenTelemetry::Instrumentation::HTTP"
|
|
52
|
+
|
|
53
|
+
c.use "OpenTelemetry::Instrumentation::ActiveModelSerializers"
|
|
54
|
+
c.use "OpenTelemetry::Instrumentation::ConcurrentRuby"
|
|
55
|
+
c.use "Minato::Trace::Instrumentation::MinatoLogger", { enabled: true }
|
|
56
|
+
|
|
57
|
+
c.add_span_processor(Minato::Trace.config.exporter)
|
|
58
|
+
end
|
|
9
59
|
end
|
|
10
60
|
end
|
|
11
61
|
end
|
data/lib/minato/trace/version.rb
CHANGED
data/lib/minato/trace.rb
CHANGED
|
@@ -1,45 +1,35 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "minato/trace/version"
|
|
4
|
-
require "minato/trace/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
require "
|
|
8
|
-
|
|
4
|
+
require "minato/trace/configuration"
|
|
5
|
+
require "opentelemetry-sdk"
|
|
6
|
+
begin
|
|
7
|
+
require "rails/railtie"
|
|
8
|
+
rescue LoadError => e
|
|
9
|
+
Rails.logger.debug e
|
|
9
10
|
end
|
|
11
|
+
require "minato/trace/railtie" if defined?(Rails::Railtie)
|
|
10
12
|
|
|
11
13
|
module Minato
|
|
12
14
|
module Trace
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
def self.init(app)
|
|
16
|
-
if Minato::Trace.enabled?
|
|
17
|
-
Minato::Trace.configure_loggging
|
|
18
|
-
Minato::Trace.configure_trace
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
app
|
|
22
|
-
end
|
|
15
|
+
class Error < StandardError; end
|
|
23
16
|
|
|
24
17
|
def self.enabled?
|
|
25
18
|
ENV["MINATO_TRACE_DISABLED"] != "true"
|
|
26
19
|
end
|
|
27
20
|
|
|
28
|
-
def self.
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
end
|
|
21
|
+
def self.configure
|
|
22
|
+
@config ||= Configuration.new
|
|
23
|
+
yield(@config) if block_given?
|
|
24
|
+
@config
|
|
33
25
|
end
|
|
34
26
|
|
|
35
|
-
def self.
|
|
36
|
-
|
|
37
|
-
config.use_logging = false
|
|
38
|
-
end
|
|
27
|
+
def self.config
|
|
28
|
+
@config || configure
|
|
39
29
|
end
|
|
40
30
|
|
|
41
|
-
def self.
|
|
42
|
-
|
|
31
|
+
def self.tracer
|
|
32
|
+
@tracer ||= OpenTelemetry.tracer_provider.tracer("minato_trace", Minato::Trace::VERSION)
|
|
43
33
|
end
|
|
44
34
|
end
|
|
45
35
|
end
|
metadata
CHANGED
|
@@ -1,44 +1,213 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: minato-trace
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 1.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ferreri
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-03-06 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
14
|
+
name: opentelemetry-sdk
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version:
|
|
19
|
+
version: '1.5'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version:
|
|
26
|
+
version: '1.5'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: rails
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
31
|
- - ">="
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: 7.0.
|
|
33
|
+
version: 7.0.8
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
38
|
- - ">="
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: 7.0.
|
|
41
|
-
|
|
40
|
+
version: 7.0.8
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: opentelemetry-exporter-otlp
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0.28'
|
|
48
|
+
type: :runtime
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0.28'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: opentelemetry-resource-detector-google_cloud_platform
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - "~>"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0.2'
|
|
62
|
+
type: :runtime
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - "~>"
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0.2'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: opentelemetry-instrumentation-action_pack
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - ">="
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '0'
|
|
76
|
+
type: :runtime
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - ">="
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '0'
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: opentelemetry-instrumentation-active_job
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - ">="
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '0'
|
|
90
|
+
type: :runtime
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - ">="
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '0'
|
|
97
|
+
- !ruby/object:Gem::Dependency
|
|
98
|
+
name: opentelemetry-instrumentation-active_model_serializers
|
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - ">="
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: '0'
|
|
104
|
+
type: :runtime
|
|
105
|
+
prerelease: false
|
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - ">="
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '0'
|
|
111
|
+
- !ruby/object:Gem::Dependency
|
|
112
|
+
name: opentelemetry-instrumentation-active_record
|
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
|
114
|
+
requirements:
|
|
115
|
+
- - ">="
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: '0'
|
|
118
|
+
type: :runtime
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
requirements:
|
|
122
|
+
- - ">="
|
|
123
|
+
- !ruby/object:Gem::Version
|
|
124
|
+
version: '0'
|
|
125
|
+
- !ruby/object:Gem::Dependency
|
|
126
|
+
name: opentelemetry-instrumentation-concurrent_ruby
|
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
|
128
|
+
requirements:
|
|
129
|
+
- - ">="
|
|
130
|
+
- !ruby/object:Gem::Version
|
|
131
|
+
version: '0'
|
|
132
|
+
type: :runtime
|
|
133
|
+
prerelease: false
|
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
+
requirements:
|
|
136
|
+
- - ">="
|
|
137
|
+
- !ruby/object:Gem::Version
|
|
138
|
+
version: '0'
|
|
139
|
+
- !ruby/object:Gem::Dependency
|
|
140
|
+
name: opentelemetry-instrumentation-faraday
|
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
|
142
|
+
requirements:
|
|
143
|
+
- - ">="
|
|
144
|
+
- !ruby/object:Gem::Version
|
|
145
|
+
version: '0'
|
|
146
|
+
type: :runtime
|
|
147
|
+
prerelease: false
|
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
+
requirements:
|
|
150
|
+
- - ">="
|
|
151
|
+
- !ruby/object:Gem::Version
|
|
152
|
+
version: '0'
|
|
153
|
+
- !ruby/object:Gem::Dependency
|
|
154
|
+
name: opentelemetry-instrumentation-http
|
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
|
156
|
+
requirements:
|
|
157
|
+
- - ">="
|
|
158
|
+
- !ruby/object:Gem::Version
|
|
159
|
+
version: '0'
|
|
160
|
+
type: :runtime
|
|
161
|
+
prerelease: false
|
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
163
|
+
requirements:
|
|
164
|
+
- - ">="
|
|
165
|
+
- !ruby/object:Gem::Version
|
|
166
|
+
version: '0'
|
|
167
|
+
- !ruby/object:Gem::Dependency
|
|
168
|
+
name: opentelemetry-instrumentation-net_http
|
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
|
170
|
+
requirements:
|
|
171
|
+
- - ">="
|
|
172
|
+
- !ruby/object:Gem::Version
|
|
173
|
+
version: '0'
|
|
174
|
+
type: :runtime
|
|
175
|
+
prerelease: false
|
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
177
|
+
requirements:
|
|
178
|
+
- - ">="
|
|
179
|
+
- !ruby/object:Gem::Version
|
|
180
|
+
version: '0'
|
|
181
|
+
- !ruby/object:Gem::Dependency
|
|
182
|
+
name: opentelemetry-instrumentation-rack
|
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
|
184
|
+
requirements:
|
|
185
|
+
- - ">="
|
|
186
|
+
- !ruby/object:Gem::Version
|
|
187
|
+
version: '0'
|
|
188
|
+
type: :runtime
|
|
189
|
+
prerelease: false
|
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
191
|
+
requirements:
|
|
192
|
+
- - ">="
|
|
193
|
+
- !ruby/object:Gem::Version
|
|
194
|
+
version: '0'
|
|
195
|
+
- !ruby/object:Gem::Dependency
|
|
196
|
+
name: opentelemetry-instrumentation-redis
|
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
|
198
|
+
requirements:
|
|
199
|
+
- - ">="
|
|
200
|
+
- !ruby/object:Gem::Version
|
|
201
|
+
version: '0'
|
|
202
|
+
type: :runtime
|
|
203
|
+
prerelease: false
|
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
205
|
+
requirements:
|
|
206
|
+
- - ">="
|
|
207
|
+
- !ruby/object:Gem::Version
|
|
208
|
+
version: '0'
|
|
209
|
+
description: Add OpenTelemetry instrumentation to your Minato Rails applications, enabling
|
|
210
|
+
tracing with Google Cloud Trace integration or any other trace service.
|
|
42
211
|
email:
|
|
43
212
|
- contato@ferreri.co
|
|
44
213
|
executables: []
|
|
@@ -49,9 +218,9 @@ files:
|
|
|
49
218
|
- README.md
|
|
50
219
|
- Rakefile
|
|
51
220
|
- lib/minato/trace.rb
|
|
52
|
-
- lib/minato/trace/
|
|
53
|
-
- lib/minato/trace/
|
|
54
|
-
- lib/minato/trace/middleware
|
|
221
|
+
- lib/minato/trace/configuration.rb
|
|
222
|
+
- lib/minato/trace/instrumentation/minato_logger.rb
|
|
223
|
+
- lib/minato/trace/instrumentation/minato_logger/middleware.rb
|
|
55
224
|
- lib/minato/trace/railtie.rb
|
|
56
225
|
- lib/minato/trace/version.rb
|
|
57
226
|
- lib/tasks/minato/trace_tasks.rake
|
|
@@ -71,7 +240,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
71
240
|
requirements:
|
|
72
241
|
- - ">="
|
|
73
242
|
- !ruby/object:Gem::Version
|
|
74
|
-
version: 2
|
|
243
|
+
version: '3.2'
|
|
75
244
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
76
245
|
requirements:
|
|
77
246
|
- - ">="
|
|
@@ -81,5 +250,5 @@ requirements: []
|
|
|
81
250
|
rubygems_version: 3.4.1
|
|
82
251
|
signing_key:
|
|
83
252
|
specification_version: 4
|
|
84
|
-
summary:
|
|
253
|
+
summary: Configure OpenTelementry instrumentation for Minato Rails applications
|
|
85
254
|
test_files: []
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Minato
|
|
4
|
-
module Trace
|
|
5
|
-
module Middleware
|
|
6
|
-
class DistributedTraceContext
|
|
7
|
-
TRACE_HEADER_KEY = "X-Cloud-Trace-Context"
|
|
8
|
-
|
|
9
|
-
def initialize(app)
|
|
10
|
-
@app = app
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def call(env)
|
|
14
|
-
add_trace_context_header(env)
|
|
15
|
-
|
|
16
|
-
@app.call(env)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
private
|
|
20
|
-
|
|
21
|
-
def add_trace_context_header(env)
|
|
22
|
-
return unless ::Rails.env.production? && Minato::Trace.enabled?
|
|
23
|
-
|
|
24
|
-
return if current_cloud_trace.nil?
|
|
25
|
-
|
|
26
|
-
env.request_headers.merge!({ "#{TRACE_HEADER_KEY}": "#{current_cloud_trace.trace.trace_id};o=1" })
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def current_cloud_trace
|
|
30
|
-
@current_cloud_trace ||= current_trace_from_google_cloud
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def current_trace_from_google_cloud
|
|
34
|
-
_trace_client = Google::Cloud::Trace.new
|
|
35
|
-
Google::Cloud::Trace.get
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Minato
|
|
4
|
-
module Trace
|
|
5
|
-
module Middleware
|
|
6
|
-
class IntegrateWithCloudLogging
|
|
7
|
-
def call(log)
|
|
8
|
-
return log unless ::Rails.env.production? && Minato::Trace.enabled?
|
|
9
|
-
|
|
10
|
-
add_trace_to_logs(log)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
private
|
|
14
|
-
|
|
15
|
-
def add_trace_to_logs(log)
|
|
16
|
-
return log if current_cloud_trace.nil?
|
|
17
|
-
|
|
18
|
-
trace_log = "projects/#{current_cloud_trace.trace.project_id}/traces/#{current_cloud_trace.trace.trace_id}"
|
|
19
|
-
|
|
20
|
-
log.merge({ "logging.googleapis.com/trace": trace_log,
|
|
21
|
-
"logging.googleapis.com/spanId": current_cloud_trace.span_id.to_s })
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def current_cloud_trace
|
|
25
|
-
@current_cloud_trace ||= current_cloud_trace_from_google_cloud
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def current_cloud_trace_from_google_cloud
|
|
29
|
-
_trace_client = Google::Cloud::Trace.new
|
|
30
|
-
Google::Cloud::Trace.get
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|