logstash-output-logservice 0.14.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: 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.