logstash-output-logservice 0.2.0 → 0.3.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
  SHA1:
3
- metadata.gz: 5ceec20c00719163e5c5973e3ec5adb32f656ac5
4
- data.tar.gz: ca1fe9f695e8fb80f4ec5919ea0c4d4294b4f55a
3
+ metadata.gz: 8bef3eb05efe5d795d632577235795820512cc68
4
+ data.tar.gz: 28c0713b27c7cf0088a0125be5311625b08a44cb
5
5
  SHA512:
6
- metadata.gz: 6dee2854d218ab0cd9b53477c967a40096488500862292c31ee41a22ad181678769b5656a71324c46908d9a52e96c37ba8db287b1c6c6d22a2d2a4c01c8ec738
7
- data.tar.gz: 3f0caa777fcec257ee21d0f8b8100617678f2c7027a241ae95c9ceb253f8d99b217d8d0b0032c1abad6bc6e93af32d20403ef8c05ce95c8b8821897477555a35
6
+ metadata.gz: 5ba0d1d3d05beabe056af97f88fc98b7cb7b217611d0e63ad5d18b61f971c32a383b4b90526d0a9160004041753410b06196cc8d63ebcd954e1126c1d7f6801c
7
+ data.tar.gz: 1d1b435298e30f8879a732f1caaff9d8a605dcc3554efa936d45589cf687d690a257264d04ca62ebe25e9445f7d9c9765899c8b212a60d19c2f506fa0fcaa9b6
@@ -7,6 +7,7 @@ require 'socket'
7
7
  require "java"
8
8
 
9
9
  import "java.util.ArrayList"
10
+ import "java.util.HashMap"
10
11
 
11
12
  root_dir = File.expand_path(File.join(File.dirname(__FILE__), ".."))
12
13
 
@@ -21,16 +22,16 @@ class LogStash::Outputs::LogService < LogStash::Outputs::Base
21
22
  config :endpoint, :validate => :string, :required => true
22
23
  config :project, :validate=> :string, :required=> true
23
24
  config :logstore, :validate=> :string, :required=> true
24
- config :topic, :validate=> :string, :requried=> false, :default=> ""
25
+ config :topic, :validate=> :string, :required=> false, :default=> ""
25
26
  # if source is null, will set ip default
26
- config :source, :validete=> :string, :required=> true
27
+ config :source, :validate=> :string, :required=> true
27
28
 
28
29
  # access_key_id/access_key_secret created by account of aliyun.com
29
30
  config :access_key_id, :validate=> :string, :required=> true
30
31
  config :access_key_secret, :validate=> :string, :required=> true
31
32
 
32
33
  # default 1000 logs in a logGroup for batch send
33
- config :max_buffer_items, :validate=> :number, :required=> false, :default=> 1000
34
+ config :max_buffer_items, :validate=> :number, :required=> false, :default=> 4000
34
35
  # default 2*1024*1024 Bytes in a logGroup for batch send
35
36
  config :max_buffer_bytes, :validate=> :number, :required=> false, :default=> 2097152
36
37
  # for batch send, logGroup will emit in default 3 seconds
@@ -57,6 +58,16 @@ class LogStash::Outputs::LogService < LogStash::Outputs::Base
57
58
  @source = Socket.ip_address_list.detect{|intf| intf.ipv4_private?}
58
59
  end
59
60
  @send_retry_interval_seconds = @send_retry_interval / 1000.0
61
+ @topic_regex = nil
62
+ if ( @topic =~ /.*\(.*\).*/ )
63
+ begin
64
+ @topic_regex = Regexp.new(@topic)
65
+ rescue
66
+ @logger.error("topic is not valid regex", :topic => @topic)
67
+ @topic_regex = nil
68
+ end
69
+ end
70
+
60
71
  @logger.info("init logstash-output-logservice plugin", :endpoint => @endpoint, :project => @project, :logstore => @logstore, :topic => @topic, :source => @source, :max_buffer_bytes => @max_buffer_bytes)
61
72
  end # def register
62
73
 
@@ -70,11 +81,11 @@ class LogStash::Outputs::LogService < LogStash::Outputs::Base
70
81
  end
71
82
  end # def event
72
83
 
73
- def send_to_log_service(loggroup)
84
+ def send_to_log_service(loggroup, loggroup_topic)
74
85
  @retry = 0
75
86
  begin
76
87
  @retry += 1
77
- @logclient.PutLogs(@project, @logstore, @topic, loggroup, @source)
88
+ @logclient.PutLogs(@project, @logstore, loggroup_topic, loggroup, @source)
78
89
  @logger.info("send logs to logservice success", :logcount => loggroup.size().to_s)
79
90
  rescue LogException => e
80
91
  @error_code = e.GetErrorCode()
@@ -103,36 +114,63 @@ class LogStash::Outputs::LogService < LogStash::Outputs::Base
103
114
  return
104
115
  end
105
116
 
106
- @loggroup = ArrayList.new
107
- @byte_size = 0
117
+ @topic_map = HashMap.new()
118
+ @topic_size_map = HashMap.new()
108
119
  events.each { |x|
109
120
  begin
110
121
  @event_map = x.to_hash
111
122
  if @event_map.size < 1
112
123
  next
113
124
  end
114
- @logitem = LogCommon.LogItem.new
125
+
126
+ @loggroup_topic = @topic
127
+ if @topic_regex != nil and @event_map.has_key?('path')
128
+ @topic_match = @topic_regex.match(@event_map['path'].to_s)
129
+ if @topic_match != nil and @topic_match.length > 1
130
+ @loggroup_topic = @topic_match[1]
131
+ else
132
+ @loggroup_topic = ""
133
+ end
134
+ end
135
+
136
+ @logitem = LogCommon.LogItem.new()
115
137
  #@timestamp like 2016-02-18T03:23:11.053Z
116
138
  @logitem.SetTime(Time.parse(@event_map['@timestamp'].to_s).to_i)
139
+ @byte_size = 0
117
140
  @event_map.each do | key, value |
118
141
  @key_str = key.to_s
119
142
  @value_str = value.to_s
120
143
  @byte_size += @key_str.length + @value_str.length
121
144
  @logitem.PushBack(@key_str, @value_str)
122
145
  end
123
- @loggroup.add(@logitem)
124
- if @byte_size > @max_buffer_bytes
125
- send_to_log_service(@loggroup)
126
- @loggroup = ArrayList.new
127
- @byte_size = 0
146
+
147
+ if (@topic_map.containsKey(@loggroup_topic))
148
+ @topic_map[@loggroup_topic].add(@logitem)
149
+ @topic_size_map[@loggroup_topic] += @byte_size
150
+ else
151
+ @loggroup = ArrayList.new()
152
+ @loggroup.add(@logitem)
153
+ @topic_map[@loggroup_topic] = @loggroup
154
+ @topic_size_map[@loggroup_topic] = @byte_size
155
+ end
156
+
157
+ if @topic_size_map[@loggroup_topic] >= @max_buffer_bytes
158
+ @logger.debug("flush loggroup", :loggroup_topic => @loggroup_topic, :bytes => @topic_size_map[@loggroup_topic], :logs => @topic_map[@loggroup_topic].size())
159
+ send_to_log_service(@topic_map[@loggroup_topic], @loggroup_topic)
160
+ @topic_map.remove(@loggroup_topic)
161
+ @topic_size_map.remove(@loggroup_topic)
128
162
  end
129
163
  rescue => e
130
164
  @logger.warn("decode log data to LogGroup fail", :exception => e)
131
165
  end
132
166
  }
133
- if @byte_size > 0
134
- send_to_log_service(@loggroup)
135
- end
167
+
168
+ @topic_map.keySet().each { | key |
169
+ if @topic_size_map[key] > 0
170
+ @logger.debug("flush loggroup", :key => key, :bytes => @topic_size_map[key], :logs => @topic_map[key].size())
171
+ send_to_log_service(@topic_map[key], key)
172
+ end
173
+ }
136
174
  end
137
175
 
138
176
  public
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-output-logservice'
3
- s.version = "0.2.0"
3
+ s.version = "0.3.0"
4
4
  s.licenses = ['Apache License (2.0)']
5
5
  s.summary = "put 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"
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
18
18
  s.metadata = { "logstash_plugin" => "true", "logstash_group" => "output" }
19
19
 
20
20
  # Gem dependencies
21
- s.add_runtime_dependency "logstash-core", ">= 2.0.0", "< 3.0.0"
21
+ s.add_runtime_dependency "logstash-core", ">= 2.0.0"
22
22
  s.add_runtime_dependency "logstash-codec-plain"
23
23
  s.add_runtime_dependency "stud"
24
24
  s.add_development_dependency "logstash-devutils"
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.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - tangkai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-29 00:00:00.000000000 Z
11
+ date: 2017-10-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logstash-core
@@ -17,9 +17,6 @@ dependencies:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 2.0.0
20
- - - "<"
21
- - !ruby/object:Gem::Version
22
- version: 3.0.0
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
@@ -27,9 +24,6 @@ dependencies:
27
24
  - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: 2.0.0
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: 3.0.0
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: logstash-codec-plain
35
29
  requirement: !ruby/object:Gem::Requirement
@@ -129,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
129
123
  version: '0'
130
124
  requirements: []
131
125
  rubyforge_project:
132
- rubygems_version: 2.5.1
126
+ rubygems_version: 2.5.2
133
127
  signing_key:
134
128
  specification_version: 4
135
129
  summary: put data into logservice.