class Datadog::Diagnostics::EnvironmentCollector
Collects environment information for diagnostic logging
Public Instance Methods
Error
returned by Datadog
agent during a tracer flush attempt @return [String] concatenated list of transport errors
# File lib/ddtrace/diagnostics/environment_logger.rb, line 117 def agent_error(transport_responses) error_responses = transport_responses.reject(&:ok?) return nil if error_responses.empty? error_responses.map(&:inspect).join(','.freeze) end
@return [String] target agent URL for trace flushing
# File lib/ddtrace/diagnostics/environment_logger.rb, line 108 def agent_url # Retrieve the effect agent URL, regardless of how it was configured transport = Datadog.tracer.writer.transport adapter = transport.client.api.adapter adapter.url end
@return [Boolean, nil] analytics enabled in configuration
# File lib/ddtrace/diagnostics/environment_logger.rb, line 131 def analytics_enabled !!Datadog.configuration.analytics.enabled end
@return [Hash] environment information available at call time
# File lib/ddtrace/diagnostics/environment_logger.rb, line 227 def collect!(transport_responses) { date: date, os_name: os_name, version: version, lang: lang, lang_version: lang_version, env: env, enabled: enabled, service: service, dd_version: dd_version, agent_url: agent_url, agent_error: agent_error(transport_responses), debug: debug, analytics_enabled: analytics_enabled, sample_rate: sample_rate, sampling_rules: sampling_rules, tags: tags, runtime_metrics_enabled: runtime_metrics_enabled, integrations_loaded: integrations_loaded, vm: vm, partial_flushing_enabled: partial_flushing_enabled, priority_sampling_enabled: priority_sampling_enabled, health_metrics_enabled: health_metrics_enabled, **instrumented_integrations_settings } end
@return [String] current time in ISO8601 format
# File lib/ddtrace/diagnostics/environment_logger.rb, line 60 def date DateTime.now.iso8601 end
@return [String] configured application version
# File lib/ddtrace/diagnostics/environment_logger.rb, line 103 def dd_version Datadog.configuration.version end
@return [Boolean, nil] debug mode enabled in configuration
# File lib/ddtrace/diagnostics/environment_logger.rb, line 126 def debug !!Datadog.configuration.diagnostics.debug end
@return [Boolean, nil]
# File lib/ddtrace/diagnostics/environment_logger.rb, line 93 def enabled Datadog.configuration.tracer.enabled end
@return [String] configured application environment
# File lib/ddtrace/diagnostics/environment_logger.rb, line 88 def env Datadog.configuration.env end
@return [Boolean, nil] health metrics enabled in configuration
# File lib/ddtrace/diagnostics/environment_logger.rb, line 214 def health_metrics_enabled !!Datadog.configuration.diagnostics.health_metrics.enabled end
Concatenated list of integrations activated, with their gem version. Example: “rails@6.0.3,rack@2.2.3”
@return [String, nil]
# File lib/ddtrace/diagnostics/environment_logger.rb, line 182 def integrations_loaded integrations = instrumented_integrations return if integrations.empty? integrations.map { |name, integration| "#{name}@#{integration.class.version}" }.join(','.freeze) end
@return [String] “ruby”
# File lib/ddtrace/diagnostics/environment_logger.rb, line 76 def lang Core::Environment::Ext::LANG end
Supported Ruby language version. Will be distinct from VM version for non-MRI environments. @return [String]
# File lib/ddtrace/diagnostics/environment_logger.rb, line 83 def lang_version Core::Environment::Ext::LANG_VERSION end
Best portable guess of OS information. @return [String] platform string
# File lib/ddtrace/diagnostics/environment_logger.rb, line 66 def os_name RbConfig::CONFIG['host'.freeze] end
@return [Boolean, nil] partial flushing enabled in configuration
# File lib/ddtrace/diagnostics/environment_logger.rb, line 204 def partial_flushing_enabled !!Datadog.configuration.tracer.partial_flush.enabled end
@return [Boolean, nil] priority sampling enabled in configuration
# File lib/ddtrace/diagnostics/environment_logger.rb, line 209 def priority_sampling_enabled !!Datadog.configuration.tracer.priority_sampling end
@return [Boolean, nil] runtime metrics enabled in configuration
# File lib/ddtrace/diagnostics/environment_logger.rb, line 174 def runtime_metrics_enabled Datadog.configuration.runtime_metrics.enabled end
@return [Numeric, nil] tracer sample rate configured
# File lib/ddtrace/diagnostics/environment_logger.rb, line 136 def sample_rate sampler = Datadog.configuration.tracer.sampler return nil unless sampler sampler.sample_rate(nil) rescue nil end
DEV: We currently only support SimpleRule instances. DEV: These are the most commonly used rules. DEV: We should expand support for other rules in the future, DEV: although it is tricky to serialize arbitrary rules.
@return [Hash, nil] sample rules configured
# File lib/ddtrace/diagnostics/environment_logger.rb, line 149 def sampling_rules sampler = Datadog.configuration.tracer.sampler return nil unless sampler.is_a?(Datadog::PrioritySampler) && sampler.priority_sampler.is_a?(Datadog::Sampling::RuleSampler) sampler.priority_sampler.rules.map do |rule| next unless rule.is_a?(Datadog::Sampling::SimpleRule) { name: rule.matcher.name, service: rule.matcher.service, sample_rate: rule.sampler.sample_rate(nil) } end.compact end
@return [String] configured application service name
# File lib/ddtrace/diagnostics/environment_logger.rb, line 98 def service Datadog.configuration.service end
@return [String] ddtrace version
# File lib/ddtrace/diagnostics/environment_logger.rb, line 71 def version VERSION::STRING end
Ruby VM name and version. Examples: “ruby-2.7.1”, “jruby-9.2.11.1”, “truffleruby-20.1.0” @return [String, nil]
# File lib/ddtrace/diagnostics/environment_logger.rb, line 192 def vm # RUBY_ENGINE_VERSION returns the VM version, which # will differ from RUBY_VERSION for non-mri VMs. if defined?(RUBY_ENGINE_VERSION) "#{RUBY_ENGINE}-#{RUBY_ENGINE_VERSION}" else # Ruby < 2.3 doesn't support RUBY_ENGINE_VERSION "#{RUBY_ENGINE}-#{RUBY_VERSION}" end end
Private Instance Methods
Outputs “k1:v1,k2:v2,…”
# File lib/ddtrace/diagnostics/environment_logger.rb, line 275 def hash_serializer(h) h.map { |k, v| "#{k}:#{v}" }.join(','.freeze) end
# File lib/ddtrace/diagnostics/environment_logger.rb, line 257 def instrumented_integrations Datadog.configuration.instrumented_integrations end
Capture all active integration settings into “integrationName_settingName: value” entries.
# File lib/ddtrace/diagnostics/environment_logger.rb, line 262 def instrumented_integrations_settings instrumented_integrations.flat_map do |name, integration| integration.configuration.to_h.flat_map do |setting, value| next [] if setting == :tracer # Skip internal Ruby objects # Convert value to a string to avoid custom #to_json # handlers possibly causing errors. [[:"integration_#{name}_#{setting}", value.to_s]] end end.to_h end