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 +4 -4
- data/lib/logstash/outputs/logservice.rb +54 -16
- data/logstash-output-logservice.gemspec +2 -2
- metadata +3 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8bef3eb05efe5d795d632577235795820512cc68
|
4
|
+
data.tar.gz: 28c0713b27c7cf0088a0125be5311625b08a44cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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, :
|
25
|
+
config :topic, :validate=> :string, :required=> false, :default=> ""
|
25
26
|
# if source is null, will set ip default
|
26
|
-
config :source, :
|
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=>
|
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,
|
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
|
-
@
|
107
|
-
@
|
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
|
-
|
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
|
-
|
124
|
-
if @
|
125
|
-
|
126
|
-
@
|
127
|
-
|
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
|
-
|
134
|
-
|
135
|
-
|
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.
|
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"
|
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.
|
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:
|
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.
|
126
|
+
rubygems_version: 2.5.2
|
133
127
|
signing_key:
|
134
128
|
specification_version: 4
|
135
129
|
summary: put data into logservice.
|