class LogStash::Outputs::LogService

Constants

Log
LogCommon
LogException

Public Instance Methods

close() click to toggle source
# File lib/logstash/outputs/logservice.rb, line 146
def close
  buffer_flush(:final => true)
end
flush(events, close=false) click to toggle source

called from Stud::Buffer#buffer_flush when there are events to flush

# File lib/logstash/outputs/logservice.rb, line 104
def flush(events, close=false)
  if events.size < 1
    return
  end

  @loggroup = ArrayList.new
  @byte_size = 0
  events.each { |x|
    begin
      @event_map = x.to_hash
      if @event_map.size < 1
        next
      end
      @logitem = LogCommon.LogItem.new
      #@timestamp like 2016-02-18T03:23:11.053Z
      @logitem.SetTime(Time.parse(@event_map['@timestamp'].to_s).to_i)
      @event_map.each do | key, value |
        @key_str = key.to_s
        if @to_json
          @value_str = value.to_json
        else
          @value_str = value.to_s
        end
        @byte_size += @key_str.length + @value_str.length
        @logitem.PushBack(@key_str, @value_str)
      end
      @loggroup.add(@logitem)
      if @byte_size > @max_buffer_bytes
        send_to_log_service(@loggroup)
        @loggroup = ArrayList.new
        @byte_size = 0
      end
    rescue => e
      @logger.warn("deserialize log data from json to LogGroup(protobuf) fail", :exception => e)
    end
  }
  if @byte_size > 0
    send_to_log_service(@loggroup)
  end
end
receive(event) click to toggle source
# File lib/logstash/outputs/logservice.rb, line 67
def receive(event)
  return unless output?(event)
  begin
    buffer_receive(event)
  rescue => e
    @logger.warn("error encoding event for logstash-output-logservice", :exception => e, :event => event)
  end
end
register() click to toggle source
# File lib/logstash/outputs/logservice.rb, line 52
def register
  buffer_initialize(
      :max_items => @max_buffer_items,
      :max_interval => @max_buffer_seconds,
      :logger => @logger
  )
  @logclient = Log.Client::new(@endpoint, @access_key_id, @access_key_secret)
  if @source == ''
      @source = Socket.ip_address_list.detect{|intf| intf.ipv4_private?}.ip_address
  end
  @send_retry_interval_seconds = @send_retry_interval / 1000.0
  @logger.info("init logstash-output-logservice plugin", :endpoint => @endpoint, :project => @project, :logstore => @logstore, :topic => @topic, :source => @source, :max_buffer_bytes => @max_buffer_bytes)
end
send_to_log_service(loggroup) click to toggle source
# File lib/logstash/outputs/logservice.rb, line 76
def send_to_log_service(loggroup)
  @retry = 0
  begin
    @retry += 1
    @logclient.PutLogs(@project, @logstore, @topic, loggroup, @source.to_s)
    @logger.info("send logs to logservice success", :logcount => loggroup.size().to_s)
  rescue LogException => e
    @error_code = e.GetErrorCode()
    @error_message = e.GetErrorMessage()
    if @retry < @max_send_retry
      @logger.warn("send logs to logservice fail, will retry later", :exception => e, :error_code => @error_code, :error_message => @error_message, :retry => @retry)
      sleep(@send_retry_interval_seconds)
      retry
    else
      @logger.error("send logs to logservice fail, discard data", :exception => e, :error_code => @error_code, :error_message => @error_message, :retry => @retry)
    end
  rescue => e
    if @retry < @max_send_retry
      @logger.warn("send logs to logservice fail, retry later", :exception => e, :retry => @retry)
      sleep(@send_retry_interval_seconds)
      retry
    else
      @logger.error("send logs to logservice fail, discard data", :exception => e, :retry => @retry)
    end
  end
end