logstash-output-logservice 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|