class Fluent::CloudWatchYaOutput
Constants
- METRIC_DATA_MAX_NUM
Public Instance Methods
configure(conf)
click to toggle source
Calls superclass method
# File lib/fluent/plugin/out_cloudwatch_ya.rb, line 14 def configure(conf) super instance_id = Net::HTTP.get('169.254.169.254', '/1.0/meta-data/instance-id') @metric_list = [] conf.elements.select {|element| element.name == 'metric' }.each do |metric| dimensions_list = [] if not metric['outcast_no_dimension_metric'] == 'yes' then dimensions_list << [] end metric.elements.select {|element| element.name == 'dimensions' }.each do |dimensions| dimension_list = [] dimensions.each do |dimension, value| if dimension.start_with?("dimension") then name_and_value = value.split("=") dimension_list << { 'name' => name_and_value[0], 'value' => name_and_value[1] } elsif dimension == 'instance_id' and value == 'yes' then dimension_list << { 'name' => 'InstanceId', 'value' => instance_id } elsif dimension == 'fluent_tag' and value == 'yes' then dimension_list << { 'name' => 'FluentTag', 'value' => nil } end end dimensions_list << dimension_list end @metric_list << { 'metric_name' => metric['metric_name'], 'value_key' => metric['value_key'], 'unit' => metric['unit'], 'dimensions_list' => dimensions_list } end $log.debug(@metric_list.inspect) end
format(tag, time, record)
click to toggle source
# File lib/fluent/plugin/out_cloudwatch_ya.rb, line 51 def format(tag, time, record) record["tag"] = tag record["timestamp"] = Time.at(time).iso8601 record.to_msgpack end
write(chunk)
click to toggle source
# File lib/fluent/plugin/out_cloudwatch_ya.rb, line 57 def write(chunk) metric_data = [] chunk.msgpack_each do |record| @metric_list.each do |metric| value = JsonPath.new(metric['value_key']).first(record) if not value.nil? then metric['dimensions_list'].each do |dimensions| dimensions.each do |dimension_list| if dimension_list['name'] == 'FluentTag' then dimension_list['value'] = record['tag']; end end metric_data << { :metric_name => metric['metric_name'], :timestamp => record['timestamp'], :value => value, :unit => metric['unit'], :dimensions => dimensions } end end end end AWS.config( :access_key_id => @aws_key_id, :secret_access_key => @aws_sec_key, :cloud_watch_endpoint => @cloud_watch_endpoint ) cloud_watch = AWS::CloudWatch.new until metric_data.length <= 0 do $log.debug(metric_data.slice(0, METRIC_DATA_MAX_NUM).inspect) cloud_watch.put_metric_data( :namespace => @namespace, :metric_data => metric_data.slice!(0, METRIC_DATA_MAX_NUM) ) end end