logstash-output-logservice 0.13.0 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d82b0069ceae60b839411887a4a827ee74e5761579925521a2077ced422587d4
4
- data.tar.gz: ed0c8ee4b4dfa3bd13ac053a35b584e642517ad4d14ad76cfa7df045518fc906
3
+ metadata.gz: b0bb3e1fa2c186f90e1abb53d263621a7f9a59c8af69acb288133bd5c9f92d4a
4
+ data.tar.gz: 8d1f51eb419826ea7f3e32979d5635fedbf3cd02ab9815d07e536e086d4972e3
5
5
  SHA512:
6
- metadata.gz: d01bda9a15ed0a74468994e3e5f06bfd3e7707f9b3a9917faad98755f5a9093e6ea09a9a3200b0b1d76bf01bdd25f1a31922f164a1e0972d5471b606e5bb2900
7
- data.tar.gz: 3204c833a39524ce18eefaf209f37c36f1484c8fc9ff46264b4ab3087bca3d46795bff7c65ebfaeba23beea6b37699618ce6fadb8ea30ced78d2e35e1c027a11
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,129 +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 @to_json
132
- @value_str = value.to_json
133
- else
134
- @value_str = value.to_s
135
- end
136
- @byte_size += @key_str.length + @value_str.length
137
- @logitem.PushBack(@key_str, @value_str)
138
- end
139
- @loggroup.add(@logitem)
140
- if @byte_size > @max_buffer_bytes
141
- send_to_log_service(@loggroup)
142
- @loggroup = ArrayList.new
143
- @byte_size = 0
86
+ if value.instance_of? Hash
87
+ @value_str = value.to_json
88
+ else
89
+ @value_str = value.to_s
144
90
  end
91
+ @logitem.PushBack(@key_str, @value_str)
92
+ end
93
+ @producer.send(@project, @logstore, @topic, @source, @logitem)
145
94
  rescue => e
146
- @logger.warn("deserialize log data from json to LogGroup(protobuf) fail", :exception => e)
95
+ @logger.warn("send log data fail", :exception => e)
147
96
  end
148
- }
149
- if @byte_size > 0
150
- send_to_log_service(@loggroup)
151
- end
97
+ end # def event
98
+
99
+ def flush(events, close=false)
152
100
  end
153
101
 
154
102
  public
155
103
  def close
156
- buffer_flush(:final => true)
104
+ @producer.close();
157
105
  end # def close
158
106
 
159
- 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.13.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.13.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-04 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.