class Monitoring::OpenCensusMonitoringRegistry
OpenCensus implementation of the monitoring registry.
Public Class Methods
name()
click to toggle source
# File lib/fluent/plugin/monitoring.rb, line 91 def self.name 'opencensus' end
new(project_id, monitored_resource, gcm_service_address)
click to toggle source
Calls superclass method
Monitoring::BaseMonitoringRegistry::new
# File lib/fluent/plugin/monitoring.rb, line 95 def initialize(project_id, monitored_resource, gcm_service_address) super require 'opencensus' require 'opencensus-stackdriver' @log = $log # rubocop:disable Style/GlobalVars @project_id = project_id @metrics_monitored_resource = monitored_resource @gcm_service_address = gcm_service_address @recorders = {} @exporters = {} @log.info( 'monitoring module: Successfully initialized Open Census monitoring ' \ 'registry.') end
Public Instance Methods
counter(name, labels, docstring, prefix, aggregation)
click to toggle source
# File lib/fluent/plugin/monitoring.rb, line 110 def counter(name, labels, docstring, prefix, aggregation) translator = MetricTranslator.new(name, labels) measure = OpenCensus::Stats::MeasureRegistry.get(translator.name) if measure.nil? @log.info( 'monitoring module: Registering a new measure registry for ' \ "#{translator.name}") measure = OpenCensus::Stats.create_measure_int( name: translator.name, unit: OpenCensus::Stats::Measure::UNIT_NONE, description: docstring ) end unless @exporters.keys.include?(prefix) @log.info( 'monitoring module: Registering a new exporter for ' \ "#{prefix}") @recorders[prefix] = OpenCensus::Stats::Recorder.new @exporters[prefix] = \ OpenCensus::Stats::Exporters::Stackdriver.new( project_id: @project_id, metric_prefix: prefix, resource_type: @metrics_monitored_resource.type, resource_labels: @metrics_monitored_resource.labels, gcm_service_address: @gcm_service_address ) @log.info( 'monitoring module: Registered recorders and exporters for ' \ "#{prefix}.\n#{@exporters[prefix]}") end if aggregation == 'GAUGE' stats_aggregation = OpenCensus::Stats.create_last_value_aggregation else stats_aggregation = OpenCensus::Stats.create_sum_aggregation end @recorders[prefix].register_view( OpenCensus::Stats::View.new( name: translator.name, measure: measure, aggregation: stats_aggregation, description: docstring, columns: translator.view_labels.map(&:to_s) ) ) counter = OpenCensusCounter.new(@recorders[prefix], measure, translator) @log.info( 'monitoring module: Successfully initialized Open Census counter for ' \ "#{prefix}/#{name}.") counter rescue StandardError => e @log.warn "Failed to count metrics for #{name}.", error: e raise e end
export()
click to toggle source
# File lib/fluent/plugin/monitoring.rb, line 164 def export @log.debug( "monitoring module: Exporting metrics for #{@exporters.keys}.") @exporters.keys.each do |prefix| @log.debug( "monitoring module: Exporting metrics for #{prefix}. " \ "#{@recorders[prefix].views_data}") @exporters[prefix].export @recorders[prefix].views_data end rescue StandardError => e # TODO(lingshi): Fix the error handling here. Seems like the export is # done asynchronously. So any failure happens silently. More details at # https://github.com/census-ecosystem/opencensus-ruby-exporter-stackdriver/blob/f8de506204972548ca535eff6010d15f328df6c3/lib/opencensus/stats/exporters/stackdriver.rb#L156 @log.warn 'Failed to export some metrics.', error: e raise e end