logstash-output-lmlogs 1.0.1 → 1.2.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/README.md +1 -0
- data/lib/logstash/outputs/lmlogs.rb +33 -12
- data/logstash-output-lmlogs.gemspec +3 -3
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6420014cba38216a8de9dea6094e645b80e56a0751a954db2ce76fc6e57e5b72
|
4
|
+
data.tar.gz: 06113b6ebb5cc2ca01017a7a801c48ac990e57c15dad4d6ad45aef811c8bf962
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b2ed08cbd38d9fa41b715372384fde2872e9a98552352b4494b13185e62c5fd1df1de26a13a7b4c81951ae8c91d6fb2cad1677c152e17c260a73ca1fbd5ef2c
|
7
|
+
data.tar.gz: d42834b440dd45429b4cd0705487c6ed23c68176b560b3af1b74d315bff204ac4608080e452e7404437a636578f58a0b4984bf5124e0e1758d2368aca0456ab9
|
data/README.md
CHANGED
@@ -33,6 +33,7 @@ output {
|
|
33
33
|
| keep_timestamp | If false, LM Logs will use the ingestion timestamp as the event timestamp | true |
|
34
34
|
| timestamp_is_key | If true, LM Logs will use a specified key as the event timestamp | false |
|
35
35
|
| timestamp_key | If timestamp_is_key is set, LM Logs will use this key in the event as the timestamp | "logtimestamp" |
|
36
|
+
| include_metadata | If false, the metadata fields will not be sent to LM Logs | true |
|
36
37
|
|
37
38
|
See the [source code](lib/logstash/outputs/lmlogs.rb) for the full list of options
|
38
39
|
|
@@ -93,17 +93,25 @@ class LogStash::Outputs::LMLogs < LogStash::Outputs::Base
|
|
93
93
|
# Username to use for HTTP auth.
|
94
94
|
config :access_id, :validate => :string, :required => true
|
95
95
|
|
96
|
+
# Include/Exclude metadata from sending to LM Logs
|
97
|
+
config :include_metadata, :validate => :boolean, :default => true
|
98
|
+
|
96
99
|
# Password to use for HTTP auth
|
97
100
|
config :access_key, :validate => :password, :required => true
|
98
101
|
|
99
102
|
@@MAX_PAYLOAD_SIZE = 8*1024*1024
|
100
103
|
|
104
|
+
# For developer debugging.
|
105
|
+
@@CONSOLE_LOGS = false
|
106
|
+
|
101
107
|
public
|
102
108
|
def register
|
103
109
|
@total = 0
|
104
110
|
@total_failed = 0
|
105
111
|
logger.info("Initialized LogicMonitor output plugin with configuration",
|
106
112
|
:host => @host)
|
113
|
+
logger.info("Max Payload Size: ",
|
114
|
+
:size => @@MAX_PAYLOAD_SIZE)
|
107
115
|
|
108
116
|
end # def register
|
109
117
|
|
@@ -141,7 +149,7 @@ class LogStash::Outputs::LMLogs < LogStash::Outputs::Base
|
|
141
149
|
# :eager => true
|
142
150
|
# }
|
143
151
|
end
|
144
|
-
|
152
|
+
log_debug("manticore client config: ", :client => c)
|
145
153
|
return c
|
146
154
|
end
|
147
155
|
|
@@ -174,6 +182,8 @@ class LogStash::Outputs::LMLogs < LogStash::Outputs::Base
|
|
174
182
|
end
|
175
183
|
|
176
184
|
def send_batch(events)
|
185
|
+
log_debug("Started sending logs to LM: ",
|
186
|
+
:time => Time::now.utc)
|
177
187
|
url = "https://" + @portal_name + ".logicmonitor.com/rest/log/ingest"
|
178
188
|
body = events.to_json
|
179
189
|
auth_string = generate_auth_string(body)
|
@@ -189,7 +199,7 @@ class LogStash::Outputs::LMLogs < LogStash::Outputs::Base
|
|
189
199
|
request.on_success do |response|
|
190
200
|
if response.code == 202
|
191
201
|
@total += events.length
|
192
|
-
|
202
|
+
log_debug("Successfully sent ",
|
193
203
|
:response_code => response.code,
|
194
204
|
:batch_size => events.length,
|
195
205
|
:total_sent => @total,
|
@@ -214,10 +224,9 @@ class LogStash::Outputs::LMLogs < LogStash::Outputs::Base
|
|
214
224
|
|
215
225
|
request.on_failure do |exception|
|
216
226
|
@total_failed += 1
|
217
|
-
log_failure("
|
227
|
+
log_failure("The request failed. ",
|
218
228
|
:url => url,
|
219
229
|
:method => @http_method,
|
220
|
-
:body => body,
|
221
230
|
:message => exception.message,
|
222
231
|
:class => exception.class.name,
|
223
232
|
:backtrace => exception.backtrace,
|
@@ -225,7 +234,7 @@ class LogStash::Outputs::LMLogs < LogStash::Outputs::Base
|
|
225
234
|
)
|
226
235
|
end
|
227
236
|
|
228
|
-
|
237
|
+
log_debug("Completed sending logs to LM",
|
229
238
|
:total => @total,
|
230
239
|
:time => Time::now.utc)
|
231
240
|
request.call
|
@@ -234,21 +243,33 @@ class LogStash::Outputs::LMLogs < LogStash::Outputs::Base
|
|
234
243
|
@logger.error("[Exception=] #{e.message} #{e.backtrace}")
|
235
244
|
end
|
236
245
|
|
246
|
+
def log_debug(message, *opts)
|
247
|
+
if @@CONSOLE_LOGS
|
248
|
+
puts "[#{DateTime::now}] [logstash.outputs.lmlogs] [DEBUG] #{message} #{opts.to_s}"
|
249
|
+
elsif debug
|
250
|
+
@logger.debug(message, *opts)
|
251
|
+
end
|
252
|
+
end
|
237
253
|
|
238
254
|
public
|
239
255
|
def multi_receive(events)
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
end
|
256
|
+
if events.length() > 0
|
257
|
+
log_debug(events.to_json)
|
258
|
+
end
|
244
259
|
|
245
260
|
events.each_slice(@batch_size) do |chunk|
|
246
261
|
documents = []
|
247
262
|
chunk.each do |event|
|
248
|
-
|
249
|
-
|
250
|
-
|
263
|
+
event_json = JSON.parse(event.to_json)
|
264
|
+
lmlogs_event = {}
|
265
|
+
|
266
|
+
if @include_metadata
|
267
|
+
lmlogs_event = event_json
|
268
|
+
lmlogs_event.delete("@timestamp") # remove redundant timestamp field
|
269
|
+
lmlogs_event["event"].delete("original") # remove redundant log field
|
270
|
+
end
|
251
271
|
|
272
|
+
lmlogs_event["message"] = event.get(@message_key).to_s
|
252
273
|
lmlogs_event["_lm.resourceId"] = {}
|
253
274
|
lmlogs_event["_lm.resourceId"]["#{@lm_property}"] = event.get(@property_key.to_s)
|
254
275
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-output-lmlogs'
|
3
|
-
s.version = '1.0
|
4
|
-
s.licenses = ['Apache
|
3
|
+
s.version = '1.2.0'
|
4
|
+
s.licenses = ['Apache-2.0']
|
5
5
|
s.summary = "Logstash output plugin for LM Logs"
|
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/logstash-plugin install gemname. This gem is not a stand-alone program"
|
7
7
|
s.authors = ["LogicMonitor"]
|
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
16
16
|
|
17
17
|
# Special flag to let us know this is actually a logstash plugin
|
18
|
-
s.metadata = { "logstash_plugin" => "true", "logstash_group" => "output" }
|
18
|
+
s.metadata = { "logstash_plugin" => "true", "logstash_group" => "output" , "rubygems_mfa_required" => "false"}
|
19
19
|
|
20
20
|
# Gem dependencies
|
21
21
|
#
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-output-lmlogs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- LogicMonitor
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-12-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,10 +94,11 @@ files:
|
|
94
94
|
- spec/outputs/lmlogs_spec.rb
|
95
95
|
homepage: https://www.logicmonitor.com
|
96
96
|
licenses:
|
97
|
-
- Apache
|
97
|
+
- Apache-2.0
|
98
98
|
metadata:
|
99
99
|
logstash_plugin: 'true'
|
100
100
|
logstash_group: output
|
101
|
+
rubygems_mfa_required: 'false'
|
101
102
|
post_install_message:
|
102
103
|
rdoc_options: []
|
103
104
|
require_paths:
|
@@ -113,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
113
114
|
- !ruby/object:Gem::Version
|
114
115
|
version: '0'
|
115
116
|
requirements: []
|
116
|
-
rubygems_version: 3.
|
117
|
+
rubygems_version: 3.3.25
|
117
118
|
signing_key:
|
118
119
|
specification_version: 4
|
119
120
|
summary: Logstash output plugin for LM Logs
|