logstash-input-azure_blob_storage 0.11.1 → 0.11.2

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: 5fb68f13f46e7a0455fe4ffd3f6c9e04b136611e01504310bd739bbc6813c6f6
4
- data.tar.gz: 3f818813b0b45acac96edb34a4948d01c234946fb2580eefe5ece8e43240c0c1
3
+ metadata.gz: b721a6aa74f4e9df285f62f47efa42112e540d9836391b31e74daf6544e1087d
4
+ data.tar.gz: 5d22a077d53698807a51dde75ac6c7deb273f0fe68d7ea05a46651b5e0c9e577
5
5
  SHA512:
6
- metadata.gz: b596bbfc6a1e3400c33e54bbfa4adb753ea1c6593ae647da221368a089b25cd650856d4abb78c5f39ae39df67387b3de938962d63a90e06d2b54164599ced0a9
7
- data.tar.gz: 6c0eb3959fa0f393f63c0697f26d49b01280604e2443b8c0a17342d768f4c1a9402e4c8f658462cdd1d76cc11fa7a654bb36052ff05fdbec775050ad33539a1c
6
+ metadata.gz: fb35924d7f18579977fa8257a722aa136ca3d9d6a48cb1aecc3aa9f768a4d4b682d5a86c455b634b19d40c6dad9359a54d5b4906ef6952fff8ebc7166c90a808
7
+ data.tar.gz: abddf838e31d981dc2da2b84bf825cb7981c610da1331a7aba1cf13f2de6e9ce7c644649f586ad6ef9c2630888900f3f8620fec7b47cddbc6b91c927e44c9b72
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 0.11.1
2
+ - copied changes from irnc fork (danke!)
3
+ - Fixed trying to load the registry, three time is the charm
4
+ - logs are less chatty, changed info to debug
5
+
1
6
  ## 0.11.0
2
7
  - Implemented start_fresh to skip all previous logs and start monitoring new entries
3
8
  - Fixed the timer, now properly sleep the interval and check again
@@ -55,6 +55,9 @@ config :registry_create_policy, :validate => ['resume','start_over','start_fresh
55
55
  # Z00000000000000000000000000000000 2 ]}
56
56
  config :interval, :validate => :number, :default => 60
57
57
 
58
+ # debug_until will for a maximum amount of processed messages shows 3 types of log printouts including processed filenames. This is a lightweight alternative to switching the loglevel from info to debug or even trace
59
+ config :debug_until, :validate => :number, :default => 0, :required => false
60
+
58
61
  # WAD IIS Grok Pattern
59
62
  #config :grokpattern, :validate => :string, :required => false, :default => '%{TIMESTAMP_ISO8601:log_timestamp} %{NOTSPACE:instanceId} %{NOTSPACE:instanceId2} %{IPORHOST:ServerIP} %{WORD:httpMethod} %{URIPATH:requestUri} %{NOTSPACE:requestQuery} %{NUMBER:port} %{NOTSPACE:username} %{IPORHOST:clientIP} %{NOTSPACE:httpVersion} %{NOTSPACE:userAgent} %{NOTSPACE:cookie} %{NOTSPACE:referer} %{NOTSPACE:host} %{NUMBER:httpStatus} %{NUMBER:subresponse} %{NUMBER:win32response} %{NUMBER:sentBytes:int} %{NUMBER:receivedBytes:int} %{NUMBER:timeTaken:int}'
60
63
 
@@ -76,6 +79,12 @@ config :file_tail, :validate => :string, :required => false, :default => ']}'
76
79
  # For NSGFLOWLOGS a path starts with "resourceId=/", but this would only be needed to exclude other files that may be written in the same container.
77
80
  config :prefix, :validate => :string, :required => false
78
81
 
82
+ config :path_filters, :validate => :array, :default => ['**/*'], :required => false
83
+
84
+ # TODO: Other feature requests
85
+ # show file path in logger
86
+ # add filepath as part of log message
87
+ # option to keep registry on local disk
79
88
 
80
89
 
81
90
  public
@@ -119,14 +128,14 @@ def register
119
128
  @registry = Hash.new
120
129
  if registry_create_policy == "resume"
121
130
  @logger.info(@pipe_id+" resuming from registry")
122
- for counter in 0..3
131
+ for counter in 1..3
123
132
  begin
124
133
  @registry = Marshal.load(@blob_client.get_blob(container, registry_path)[1])
125
134
  #[0] headers [1] responsebody
126
135
  rescue Exception => e
127
136
  @logger.error(@pipe_id+" caught: #{e.message}")
128
137
  @registry.clear
129
- @logger.error(@pipe_id+" loading registry failed, starting over")
138
+ @logger.error(@pipe_id+" loading registry failed for attempt #{counter} of 3")
130
139
  end
131
140
  end
132
141
  end
@@ -182,6 +191,7 @@ def run(queue)
182
191
  off = 0
183
192
  end
184
193
  newreg.store(name, { :offset => off, :length => file[:length] })
194
+ if (@debug_until > @processed) then @logger.info("2: adding offsets: #{name} #{off} #{file[:length]}") end
185
195
  end
186
196
 
187
197
  # Worklist is the subset of files where the already read offset is smaller than the file size
@@ -190,14 +200,14 @@ def run(queue)
190
200
  # This would be ideal for threading since it's IO intensive, would be nice with a ruby native ThreadPool
191
201
  worklist.each do |name, file|
192
202
  #res = resource(name)
193
- @logger.debug(@pipe_id+" processing #{name} from #{file[:offset]} to #{file[:length]}")
203
+ if (@debug_until > @processed) then @logger.info("3: processing #{name} from #{file[:offset]} to #{file[:length]}") end
194
204
  size = 0
195
205
  if file[:offset] == 0
196
206
  chunk = full_read(name)
197
207
  size=chunk.size
198
208
  else
199
209
  chunk = partial_read_json(name, file[:offset], file[:length])
200
- @logger.debug(@pipe_id+" partial file #{name} from #{file[:offset]} to #{file[:length]}")
210
+ @logger.info(@pipe_id+" partial file #{name} from #{file[:offset]} to #{file[:length]}")
201
211
  end
202
212
  if logtype == "nsgflowlog" && @is_json
203
213
  res = resource(name)
@@ -325,28 +335,28 @@ end
325
335
  def list_blobs(fill)
326
336
  files = Hash.new
327
337
  nextMarker = nil
328
- counter = 0
329
- loop do
338
+ for counter in 1..3
330
339
  begin
331
- if (counter > 10)
332
- @logger.error(@pipe_id+" lets try again for the 10th time, why don't faraday and azure storage accounts not play nice together? it has something to do with follow_redirect and a missing authorization header?")
333
- end
334
340
  blobs = @blob_client.list_blobs(container, { marker: nextMarker, prefix: @prefix})
335
341
  blobs.each do |blob|
336
- # exclude the registry itself
337
- unless blob.name == registry_path
342
+ # FNM_PATHNAME is required so that "**/test" can match "test" at the root folder
343
+ # FNM_EXTGLOB allows you to use "test{a,b,c}" to match either "testa", "testb" or "testc" (closer to shell behavior)
344
+ unless blob.name == registry_path
345
+ if @path_filters.any? {|path| File.fnmatch?(path, blob.name, File::FNM_PATHNAME | File::FNM_EXTGLOB)}
338
346
  length = blob.properties[:content_length].to_i
339
- offset = 0
347
+ offset = 0
340
348
  if fill
341
349
  offset = length
342
- end
350
+ end
343
351
  files.store(blob.name, { :offset => offset, :length => length })
352
+ if (@debug_until > @processed) then @logger.info("1: list_blobs #{blob.name} #{offset} #{length}") end
344
353
  end
354
+ end
345
355
  end
346
356
  nextMarker = blobs.continuation_token
347
357
  break unless nextMarker && !nextMarker.empty?
348
358
  rescue Exception => e
349
- @logger.error(@pipe_id+" caught: #{e.message}")
359
+ @logger.error(@pipe_id+" caught: #{e.message} for attempt #{counter} of 3")
350
360
  counter += 1
351
361
  end
352
362
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-input-azure_blob_storage'
3
- s.version = '0.11.1'
3
+ s.version = '0.11.2'
4
4
  s.licenses = ['Apache-2.0']
5
5
  s.summary = 'This logstash plugin reads and parses data from Azure Storage Blobs.'
6
6
  s.description = <<-EOF
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-input-azure_blob_storage
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.1
4
+ version: 0.11.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Geertsma
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-11-18 00:00:00.000000000 Z
11
+ date: 2019-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -112,7 +112,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
112
112
  - !ruby/object:Gem::Version
113
113
  version: '0'
114
114
  requirements: []
115
- rubygems_version: 3.0.6
115
+ rubyforge_project:
116
+ rubygems_version: 2.7.9
116
117
  signing_key:
117
118
  specification_version: 4
118
119
  summary: This logstash plugin reads and parses data from Azure Storage Blobs.