logstash-output-logservice 0.14.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5448b1cff9f51df78207689cdbe6e9f8f9588c58d839fcbde73cfafffa291010
4
- data.tar.gz: 4c38fd10f368e89a8c258923b8054c4e16a978ac63fa88732640b921f9498b34
3
+ metadata.gz: b0bb3e1fa2c186f90e1abb53d263621a7f9a59c8af69acb288133bd5c9f92d4a
4
+ data.tar.gz: 8d1f51eb419826ea7f3e32979d5635fedbf3cd02ab9815d07e536e086d4972e3
5
5
  SHA512:
6
- metadata.gz: deed2ea214b113fa452ddb89b9ae8a1124f1bd5e1711c4d79e95e76f3d3780655fc4b7f6c3550d8792f99cf9b7358782fe1eaa20b6a6c6b9d78db2f49d7331e3
7
- data.tar.gz: 530e5cdc3ccb5f80b438db7994fe51a00ac3decfc365dd27ce6765d662cdce9370c116b264213be5df05aa1f9f86b960bb97546e23c8a653df646f9a72c615ae
6
+ metadata.gz: 30fc3c1789a4995761958cd82f402533e92e51716b71a8a8da06ccfba720eb6a15055de295f97f44d988755d2b585b599a2a199fe1cee865da1c6de7eb31f14a
7
+ data.tar.gz: c35a79edaf9733f5164739be49bf682bb80bab26b5736e276b5a9cc781712198d890c242f32301ed56c1005c68a88dec94f96e60f525e033a05f644cf246e1e2
@@ -7,10 +7,7 @@ require 'socket'
7
7
  require "java"
8
8
  require 'json'
9
9
 
10
- import "java.util.ArrayList"
11
-
12
10
  root_dir = File.expand_path(File.join(File.dirname(__FILE__), ".."))
13
-
14
11
  LogStash::Environment.load_runtime_jars! File.join(root_dir, "vendor")
15
12
 
16
13
  class LogStash::Outputs::LogService < LogStash::Outputs::Base
@@ -31,134 +28,80 @@ class LogStash::Outputs::LogService < LogStash::Outputs::Base
31
28
  config :access_key_secret, :validate=> :string, :required=> true
32
29
 
33
30
  # default 4000 logs in a logGroup for batch send
34
- config :max_buffer_items, :validate=> :number, :required=> false, :default=> 4000
31
+ config :max_buffer_items, :validate=> :number, :required=> false, :default=> 4096
35
32
  # default 2*1024*1024 Bytes in a logGroup for batch send
36
33
  config :max_buffer_bytes, :validate=> :number, :required=> false, :default=> 2097152
37
34
  # for batch send, logGroup will emit in default 3 seconds
38
- config :max_buffer_seconds, :validate=> :number, :required=> false, :default=> 3
35
+ config :max_buffer_seconds, :validate=> :number, :required=> false, :default=> 2
36
+ # the maximum log size that a single producer instance can cache is 100MB by default.
37
+ config :total_size_in_bytes, :validate=> :number, :required=> false, :default=> 104857600
39
38
 
40
39
  # logGroup will retry send to log service when error happened, and will be discard when retry times exceed limit
41
- config :max_send_retry, :validate=> :number, :required=> true, :default=> 10
40
+ config :max_send_retry, :validate=> :number, :required=> true, :default=> 10
42
41
  # sleep default 200 milliseconds before retry next send
43
42
  config :send_retry_interval, :validate=> :number, :required=> false, :default=> 200
44
43
 
45
44
  config :to_json, :validate=> :boolean, :required=> false, :default=> true
46
45
  config :time_key, :validate=> :string, :required=> false, :default=> "@timestamp"
47
46
 
48
- Log = com.aliyun.openservices.log
49
- LogException = com.aliyun.openservices.log.exception.LogException
50
- LogCommon = com.aliyun.openservices.log.common
47
+ LP = com.aliyun.openservices.aliyun.log.producer
48
+ LogCommon = com.shade.aliyun.openservices.log.common
49
+
51
50
 
52
51
  public
53
52
  def register
54
- buffer_initialize(
55
- :max_items => @max_buffer_items,
56
- :max_interval => @max_buffer_seconds,
57
- :logger => @logger
58
- )
59
- @logclient = Log.Client::new(@endpoint, @access_key_id, @access_key_secret)
60
- # if @source == ''
61
- # @source = Socket.ip_address_list.detect{|intf| intf.ipv4_private?}.ip_address
62
- # end
63
- @send_retry_interval_seconds = @send_retry_interval / 1000.0
53
+ @producerConfig = LP.ProducerConfig::new();
54
+ @producerConfig.setBatchCountThreshold(@max_buffer_items);
55
+ @producerConfig.setBatchSizeThresholdInBytes(@max_buffer_bytes);
56
+ @producerConfig.setLingerMs(@max_buffer_seconds*1000);
57
+ @producerConfig.setRetries(@max_send_retry);
58
+ @producerConfig.setBaseRetryBackoffMs(@send_retry_interval);
59
+ @producerConfig.setTotalSizeInBytes(@total_size_in_bytes);
60
+ @producer = LP.LogProducer::new(@producerConfig);
61
+ @producer.putProjectConfig(LP.ProjectConfig::new(@project, @endpoint, @access_key_id, @access_key_secret));
62
+
64
63
  @logger.info("init logstash-output-logservice plugin", :endpoint => @endpoint, :project => @project, :logstore => @logstore, :topic => @topic, :source => @source, :max_buffer_bytes => @max_buffer_bytes)
65
64
  end # def register
66
65
 
67
66
  public
68
67
  def receive(event)
69
- return unless output?(event)
70
68
  begin
71
- buffer_receive(event)
72
- rescue => e
73
- @logger.warn("error encoding event for logstash-output-logservice", :exception => e, :event => event)
74
- end
75
- end # def event
76
-
77
- def send_to_log_service(loggroup)
78
- @retry = 0
79
- begin
80
- @retry += 1
81
- @logclient.PutLogs(@project, @logstore, @topic, loggroup, @source.to_s)
82
- @logger.info("send logs to logservice success", :logcount => loggroup.size().to_s)
83
- rescue LogException => e
84
- @error_code = e.GetErrorCode()
85
- @error_message = e.GetErrorMessage()
86
- if @retry < @max_send_retry
87
- @logger.warn("send logs to logservice fail, will retry later", :exception => e, :error_code => @error_code, :error_message => @error_message, :retry => @retry)
88
- sleep(@send_retry_interval_seconds)
89
- retry
90
- else
91
- @logger.error("send logs to logservice fail, discard data", :exception => e, :error_code => @error_code, :error_message => @error_message, :retry => @retry)
69
+ @event_map = event.to_hash
70
+ if @event_map.size < 1
71
+ return
92
72
  end
93
- rescue => e
94
- if @retry < @max_send_retry
95
- @logger.warn("send logs to logservice fail, retry later", :exception => e, :retry => @retry)
96
- sleep(@send_retry_interval_seconds)
97
- retry
98
- else
99
- @logger.error("send logs to logservice fail, discard data", :exception => e, :retry => @retry)
73
+ @logitem = LogCommon.LogItem.new
74
+ #@timestamp like 2016-02-18T03:23:11.053Z
75
+ time_value = @event_map[@time_key]
76
+ if time_value.nil?
77
+ time_value = @event_map['@timestamp']
78
+ @logger.warn("The time_key is nil, use @timestamp")
100
79
  end
101
- end
102
- end
103
-
104
- # called from Stud::Buffer#buffer_flush when there are events to flush
105
- def flush(events, close=false)
106
- if events.size < 1
107
- return
108
- end
109
-
110
- @loggroup = ArrayList.new
111
- @byte_size = 0
112
- events.each { |x|
113
- begin
114
- @event_map = x.to_hash
115
- if @event_map.size < 1
80
+ @logitem.SetTime(Time.parse(time_value.to_s).to_i)
81
+ @event_map.each do | key, value |
82
+ @key_str = key.to_s
83
+ if @key_str == '__time__'
116
84
  next
117
85
  end
118
- @logitem = LogCommon.LogItem.new
119
- #@timestamp like 2016-02-18T03:23:11.053Z
120
- time_value = @event_map[@time_key]
121
- if time_value.nil?
122
- time_value = @event_map['@timestamp']
123
- @logger.warn("The time_key is nil, use @timestamp")
124
- end
125
- @logitem.SetTime(Time.parse(time_value.to_s).to_i)
126
- @event_map.each do | key, value |
127
- @key_str = key.to_s
128
- if @key_str == '__time__'
129
- next
130
- end
131
- if value.instance_of? Hash
132
- @value_str = value.to_json
133
- else
134
- @value_str = value.to_s
135
- end
136
- # if @to_json
137
- # @value_str = value.to_json
138
- # else
139
- # @value_str = value.to_s
140
- # end
141
- @byte_size += @key_str.length + @value_str.length
142
- @logitem.PushBack(@key_str, @value_str)
143
- end
144
- @loggroup.add(@logitem)
145
- if @byte_size > @max_buffer_bytes
146
- send_to_log_service(@loggroup)
147
- @loggroup = ArrayList.new
148
- @byte_size = 0
86
+ if value.instance_of? Hash
87
+ @value_str = value.to_json
88
+ else
89
+ @value_str = value.to_s
149
90
  end
91
+ @logitem.PushBack(@key_str, @value_str)
92
+ end
93
+ @producer.send(@project, @logstore, @topic, @source, @logitem)
150
94
  rescue => e
151
- @logger.warn("deserialize log data from json to LogGroup(protobuf) fail", :exception => e)
95
+ @logger.warn("send log data fail", :exception => e)
152
96
  end
153
- }
154
- if @byte_size > 0
155
- send_to_log_service(@loggroup)
156
- end
97
+ end # def event
98
+
99
+ def flush(events, close=false)
157
100
  end
158
101
 
159
102
  public
160
103
  def close
161
- buffer_flush(:final => true)
104
+ @producer.close();
162
105
  end # def close
163
106
 
164
- end # class LogStash::Outputs::LogService
107
+ end # class LogStash::Outputs::LogService
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-output-logservice'
3
- s.version = "0.14.0"
3
+ s.version = "0.15.0"
4
4
  s.licenses = ['Apache-2.0']
5
5
  s.summary = "post data into logservice."
6
6
  s.description = "This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-logservice
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.0
4
+ version: 0.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - tangkai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-22 00:00:00.000000000 Z
11
+ date: 2023-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logstash-core-plugin-api
@@ -84,14 +84,7 @@ files:
84
84
  - LICENSE
85
85
  - README.md
86
86
  - lib/logstash/outputs/logservice.rb
87
- - lib/logstash/vendor/jar-dependencies/runtime-jars/aliyun-log-private-cloud-0.6.73.jar
88
- - lib/logstash/vendor/jar-dependencies/runtime-jars/commons-codec-1.9.jar
89
- - lib/logstash/vendor/jar-dependencies/runtime-jars/commons-logging-1.2.jar
90
- - lib/logstash/vendor/jar-dependencies/runtime-jars/gson-2.9.0.jar
91
- - lib/logstash/vendor/jar-dependencies/runtime-jars/httpclient-4.5.1.jar
92
- - lib/logstash/vendor/jar-dependencies/runtime-jars/httpcore-4.4.3.jar
93
- - lib/logstash/vendor/jar-dependencies/runtime-jars/lz4-1.3.0.jar
94
- - lib/logstash/vendor/jar-dependencies/runtime-jars/protobuf-java-2.5.0.jar
87
+ - lib/logstash/vendor/jar-dependencies/runtime-jars/aliyun-log-producer-0.3.17-jar-with-dependencies.jar
95
88
  - logstash-output-logservice.gemspec
96
89
  - spec/outputs/logservice_spec.rb
97
90
  homepage: https://www.aliyun.com/product/sls
@@ -115,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
108
  - !ruby/object:Gem::Version
116
109
  version: '0'
117
110
  requirements: []
118
- rubygems_version: 3.0.3
111
+ rubygems_version: 3.0.3.1
119
112
  signing_key:
120
113
  specification_version: 4
121
114
  summary: post data into logservice.