Class: OpenCensus::Trace::Exporters::JaegerExporter
- Inherits:
-
Object
- Object
- OpenCensus::Trace::Exporters::JaegerExporter
- Includes:
- Logging
- Defined in:
- lib/opencensus/trace/exporters/jaeger_exporter.rb
Constant Summary collapse
- JAEGER_OPENCENSUS_EXPORTER_VERSION_TAG_KEY =
'opencensus.exporter.jaeger.version'- TRACER_HOSTNAME_TAG_KEY =
'opencensus.exporter.jaeger.hostname'- PROCESS_IP =
'ip'- DEFAULT_MAX_LENGTH =
Jaeger agent only accepts up to 65_000
65_000
Instance Attribute Summary collapse
-
#client ⇒ Object
readonly
Returns the value of attribute client.
-
#span_batches ⇒ Object
readonly
Returns the value of attribute span_batches.
Instance Method Summary collapse
- #encode_batch(encoded_spans) ⇒ Object
- #encode_within_limit(spans) ⇒ Object
- #export(spans) ⇒ Object
- #export_as_batch(spans) ⇒ Object
-
#initialize(logger: default_logger, service_name: 'UNCONFIGURED_SERVICE_NAME', host: 'localhost', port: 6831, tags: {}, max_packet_length: DEFAULT_MAX_LENGTH, protocol_class: ::Thrift::CompactProtocol) ⇒ JaegerExporter
constructor
A new instance of JaegerExporter.
Methods included from Logging
#default_logger, included, logger
Constructor Details
#initialize(logger: default_logger, service_name: 'UNCONFIGURED_SERVICE_NAME', host: 'localhost', port: 6831, tags: {}, max_packet_length: DEFAULT_MAX_LENGTH, protocol_class: ::Thrift::CompactProtocol) ⇒ JaegerExporter
Returns a new instance of JaegerExporter.
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/opencensus/trace/exporters/jaeger_exporter.rb', line 17 def initialize( logger: default_logger, service_name: 'UNCONFIGURED_SERVICE_NAME', host: 'localhost', port: 6831, tags: {}, max_packet_length: DEFAULT_MAX_LENGTH, protocol_class: ::Thrift::CompactProtocol ) @logger = logger @service_name = service_name @host = host @port = port = {} [JAEGER_OPENCENSUS_EXPORTER_VERSION_TAG_KEY] = \ "opencensus-exporter-jaeger-#{OpenCensus::Jaeger::VERSION}" [TRACER_HOSTNAME_TAG_KEY] = Socket.gethostname [PROCESS_IP] = JaegerDriver.ip_v4 @tags = .merge() @client = JaegerDriver::UDPSender.new(host, port, logger, protocol_class) @process = ::Jaeger::Thrift::Process.new( 'serviceName': @service_name, 'tags': JaegerDriver.(@tags) ) @protocol_class = protocol_class @max_span_size = max_packet_length - process_size - 8 - 20 # 8 is UDP header , 20 is IP header end |
Instance Attribute Details
#client ⇒ Object (readonly)
Returns the value of attribute client.
15 16 17 |
# File 'lib/opencensus/trace/exporters/jaeger_exporter.rb', line 15 def client @client end |
#span_batches ⇒ Object (readonly)
Returns the value of attribute span_batches.
15 16 17 |
# File 'lib/opencensus/trace/exporters/jaeger_exporter.rb', line 15 def span_batches @span_batches end |
Instance Method Details
#encode_batch(encoded_spans) ⇒ Object
79 80 81 82 83 84 |
# File 'lib/opencensus/trace/exporters/jaeger_exporter.rb', line 79 def encode_batch(encoded_spans) ::Jaeger::Thrift::Batch.new( 'process' => @process, 'spans' => encoded_spans ) end |
#encode_within_limit(spans) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/opencensus/trace/exporters/jaeger_exporter.rb', line 60 def encode_within_limit(spans) batches = [] current_batch = [] transport.flush spans.each do |span| encoded_span = JaegerDriver.encode_span(span) if aggregated_span_size(encoded_span) >= @max_span_size && !current_batch.empty? batches << encode_batch(current_batch) current_batch = [] transport.flush end current_batch << encoded_span end batches << encode_batch(current_batch) unless current_batch.empty? batches end |
#export(spans) ⇒ Object
46 47 48 49 50 51 |
# File 'lib/opencensus/trace/exporters/jaeger_exporter.rb', line 46 def export(spans) return nil if spans.nil? || spans.empty? export_as_batch(spans) rescue StandardError => e @logger.error("Fail to export spans due to #{e.}") end |
#export_as_batch(spans) ⇒ Object
53 54 55 56 57 58 |
# File 'lib/opencensus/trace/exporters/jaeger_exporter.rb', line 53 def export_as_batch(spans) @span_batches = encode_within_limit(spans) @span_batches.each do |span_batch| @client.send_spans(span_batch) end end |