fluent-plugin-oci-logging-analytics 2.0.4 → 2.0.6
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 +5 -5
- data/lib/fluent/metrics/metricsLabels.rb +2 -1
- data/lib/fluent/metrics/prometheusMetrics.rb +8 -11
- data/lib/fluent/plugin/out_oci-logging-analytics.rb +133 -101
- metadata +25 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: da1ab666ee3e8c8dd828f2c929290f652a9c6d8a2bda423970eb809c700639da
|
|
4
|
+
data.tar.gz: 14b8caa8d04efb8f3b38043b061dc82c28a4ace4f91661417d9c16a8ced51b37
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d07374a5e2556eaba00f47dd68b967a06b8c1449eb38496dc76e1fc87bf63e400078494f5559b4e52d628344bf730659c3cbdd621d58c88fa74c92a742753992
|
|
7
|
+
data.tar.gz: 47ba0f5b4d056c20c4ddc0c8938e3cbc718e65e108235ee41ec6d8d31b24f9d48db6da059840f18ecb01f309c62c2b4929c48002d70e6cd04cafb83d8107cfac
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
class MetricsLabels
|
|
2
|
-
attr_accessor :tag, :logGroupId, :logSourceName, :logSet, :invalid_reason, :records_valid, :records_per_tag, :latency
|
|
2
|
+
attr_accessor :worker_id, :tag, :logGroupId, :logSourceName, :logSet, :invalid_reason, :records_valid, :records_per_tag, :latency
|
|
3
3
|
def initialize
|
|
4
|
+
@worker_id = nil
|
|
4
5
|
@tag = nil
|
|
5
6
|
@logGroupId = nil
|
|
6
7
|
@logSourceName = nil
|
|
@@ -14,16 +14,15 @@ class PrometheusMetrics
|
|
|
14
14
|
end
|
|
15
15
|
def createMetrics
|
|
16
16
|
gauge = Prometheus::Client::Gauge
|
|
17
|
-
@records_received = gauge.new(:oci_la_fluentd_output_plugin_records_received, docstring: 'Number of records received by the OCI Logging Analytics Fluentd output plugin.', labels: [:tag,:oci_la_log_group_id,:oci_la_log_source_name,:oci_la_log_set])
|
|
18
|
-
@records_valid = gauge.new(:oci_la_fluentd_output_plugin_records_valid, docstring: 'Number of valid records received by the OCI Logging Analytics Fluentd output plugin.', labels: [:tag,:oci_la_log_group_id,:oci_la_log_source_name,:oci_la_log_set])
|
|
19
|
-
@records_invalid = gauge.new(:oci_la_fluentd_output_plugin_records_invalid, docstring: 'Number of invalid records received by the OCI Logging Analytics Fluentd output plugin.', labels: [:tag,:oci_la_log_group_id,:oci_la_log_source_name,:oci_la_log_set,:reason])
|
|
20
|
-
@records_error = gauge.new(:oci_la_fluentd_output_plugin_records_post_error, docstring: 'Number of records failed posting to OCI Logging Analytics by the Fluentd output plugin.', labels: [:tag,:oci_la_log_group_id,:oci_la_log_source_name,:oci_la_log_set,:error_code, :reason])
|
|
21
|
-
@records_posted = gauge.new(:oci_la_fluentd_output_plugin_records_post_success, docstring: 'Number of records posted by the OCI Logging Analytics Fluentd output plugin.', labels: [:tag,:oci_la_log_group_id,:oci_la_log_source_name,:oci_la_log_set])
|
|
22
|
-
|
|
23
|
-
#@bytes_posted = gauge.new(:oci_la_bytes_posted, docstring: '...', labels: [:oci_la_log_group_id])
|
|
17
|
+
@records_received = gauge.new(:oci_la_fluentd_output_plugin_records_received, docstring: 'Number of records received by the OCI Logging Analytics Fluentd output plugin.', labels: [:worker_id,:tag,:oci_la_log_group_id,:oci_la_log_source_name,:oci_la_log_set])
|
|
18
|
+
@records_valid = gauge.new(:oci_la_fluentd_output_plugin_records_valid, docstring: 'Number of valid records received by the OCI Logging Analytics Fluentd output plugin.', labels: [:worker_id,:tag,:oci_la_log_group_id,:oci_la_log_source_name,:oci_la_log_set])
|
|
19
|
+
@records_invalid = gauge.new(:oci_la_fluentd_output_plugin_records_invalid, docstring: 'Number of invalid records received by the OCI Logging Analytics Fluentd output plugin.', labels: [:worker_id,:tag,:oci_la_log_group_id,:oci_la_log_source_name,:oci_la_log_set,:reason])
|
|
20
|
+
@records_error = gauge.new(:oci_la_fluentd_output_plugin_records_post_error, docstring: 'Number of records failed posting to OCI Logging Analytics by the Fluentd output plugin.', labels: [:worker_id,:tag,:oci_la_log_group_id,:oci_la_log_source_name,:oci_la_log_set,:error_code, :reason])
|
|
21
|
+
@records_posted = gauge.new(:oci_la_fluentd_output_plugin_records_post_success, docstring: 'Number of records posted by the OCI Logging Analytics Fluentd output plugin.', labels: [:worker_id,:tag,:oci_la_log_group_id,:oci_la_log_source_name,:oci_la_log_set])
|
|
22
|
+
|
|
24
23
|
histogram = Prometheus::Client::Histogram
|
|
25
|
-
@chunk_time_to_receive = histogram.new(:oci_la_fluentd_output_plugin_chunk_time_to_receive, docstring: 'Average time taken by Fluentd to deliver the collected records from Input plugin to OCI Logging Analytics output plugin.', labels: [:tag])
|
|
26
|
-
@chunk_time_to_upload = histogram.new(:oci_la_fluentd_output_plugin_chunk_time_to_post, docstring: 'Average time taken for posting the received records to OCI Logging Analytics by the Fluentd output plugin.', labels: [:oci_la_log_group_id])
|
|
24
|
+
@chunk_time_to_receive = histogram.new(:oci_la_fluentd_output_plugin_chunk_time_to_receive, docstring: 'Average time taken by Fluentd to deliver the collected records from Input plugin to OCI Logging Analytics output plugin.', labels: [:worker_id,:tag])
|
|
25
|
+
@chunk_time_to_upload = histogram.new(:oci_la_fluentd_output_plugin_chunk_time_to_post, docstring: 'Average time taken for posting the received records to OCI Logging Analytics by the Fluentd output plugin.', labels: [:worker_id,:oci_la_log_group_id])
|
|
27
26
|
end
|
|
28
27
|
|
|
29
28
|
def registerMetrics
|
|
@@ -33,8 +32,6 @@ class PrometheusMetrics
|
|
|
33
32
|
registry.register(@records_invalid) unless registry.exist?('oci_la_fluentd_output_plugin_records_invalid')
|
|
34
33
|
registry.register(@records_error) unless registry.exist?('oci_la_fluentd_output_plugin_records_post_error')
|
|
35
34
|
registry.register(@records_posted) unless registry.exist?('oci_la_fluentd_output_plugin_records_post_success')
|
|
36
|
-
#registry.register(@bytes_received) unless registry.exist?('oci_la_bytes_received')
|
|
37
|
-
#registry.register(@bytes_posted) unless registry.exist?('oci_la_bytes_valid')
|
|
38
35
|
registry.register(@chunk_time_to_receive) unless registry.exist?('oci_la_fluentd_output_plugin_chunk_time_to_receive')
|
|
39
36
|
registry.register(@chunk_time_to_upload) unless registry.exist?('oci_la_fluentd_output_plugin_chunk_time_to_post')
|
|
40
37
|
end
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
require 'fluent/plugin/output'
|
|
5
5
|
require "benchmark"
|
|
6
6
|
require 'zip'
|
|
7
|
+
require 'yajl'
|
|
8
|
+
require 'yajl/json_gem'
|
|
7
9
|
|
|
8
10
|
require 'logger'
|
|
9
11
|
require_relative '../dto/logEventsJson'
|
|
@@ -75,6 +77,8 @@ module Fluent::Plugin
|
|
|
75
77
|
@@loganalytics_client = nil
|
|
76
78
|
@@prometheusMetrics = nil
|
|
77
79
|
@@logger_config_errors = []
|
|
80
|
+
@@worker_id = '0'
|
|
81
|
+
@@encoded_messages_count = 0
|
|
78
82
|
|
|
79
83
|
|
|
80
84
|
desc 'OCI Tenancy Namespace.'
|
|
@@ -92,7 +96,7 @@ module Fluent::Plugin
|
|
|
92
96
|
desc 'Payload zip File Location.'
|
|
93
97
|
config_param :zip_file_location, :string, :default => nil
|
|
94
98
|
desc 'The kubernetes_metadata_keys_mapping.'
|
|
95
|
-
config_param :kubernetes_metadata_keys_mapping, :hash, :default => {"container_name":"
|
|
99
|
+
config_param :kubernetes_metadata_keys_mapping, :hash, :default => {"container_name":"Container","namespace_name":"Namespace","pod_name":"Pod","container_image":"Container Image Name","host":"Node"}
|
|
96
100
|
|
|
97
101
|
|
|
98
102
|
#****************************************************************
|
|
@@ -146,7 +150,7 @@ module Fluent::Plugin
|
|
|
146
150
|
desc 'The number of threads of output plugins, which is used to write chunks in parallel.'
|
|
147
151
|
config_set_default :flush_thread_count, 1
|
|
148
152
|
desc 'The max size of each chunks: events will be written into chunks until the size of chunks become this size.'
|
|
149
|
-
config_set_default :chunk_limit_size,
|
|
153
|
+
config_set_default :chunk_limit_size, 4 * 1024 * 1024 # 4MB
|
|
150
154
|
desc 'The size limitation of this buffer plugin instance.'
|
|
151
155
|
config_set_default :total_limit_size, 5 * (1024**3) # 5GB
|
|
152
156
|
desc 'Flush interval'
|
|
@@ -170,67 +174,72 @@ module Fluent::Plugin
|
|
|
170
174
|
end
|
|
171
175
|
|
|
172
176
|
def initialize_logger()
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
logger_set_level(@plugin_log_level)
|
|
177
|
+
begin
|
|
178
|
+
filename = nil
|
|
179
|
+
is_default_log_location = false
|
|
180
|
+
if is_valid(@plugin_log_location)
|
|
181
|
+
filename = @plugin_log_location[-1] == '/' ? @plugin_log_location : @plugin_log_location +'/'
|
|
182
|
+
else
|
|
183
|
+
@@logger = log
|
|
184
|
+
return
|
|
185
|
+
end
|
|
186
|
+
if !is_valid_log_level(@plugin_log_level)
|
|
187
|
+
@plugin_log_level = @@default_log_level
|
|
188
|
+
end
|
|
189
|
+
oci_fluent_output_plugin_log = nil
|
|
190
|
+
if is_default_log_location
|
|
191
|
+
oci_fluent_output_plugin_log = 'oci-logging-analytics.log'
|
|
192
|
+
else
|
|
193
|
+
oci_fluent_output_plugin_log = filename+'oci-logging-analytics.log'
|
|
194
|
+
end
|
|
195
|
+
logger_config = nil
|
|
196
|
+
|
|
197
|
+
if is_valid_number_of_logs(@plugin_log_file_count) && is_valid_log_size(@plugin_log_file_size)
|
|
198
|
+
# When customer provided valid log_file_count and log_file_size.
|
|
199
|
+
# logger will rotate with max log_file_count with each file having max log_file_size.
|
|
200
|
+
# Older logs purged automatically.
|
|
201
|
+
@@logger = Logger.new(oci_fluent_output_plugin_log, @plugin_log_file_count, @@validated_log_size)
|
|
202
|
+
logger_config = 'USER_CONFIG'
|
|
203
|
+
elsif is_valid_log_rotation(@plugin_log_rotation)
|
|
204
|
+
# When customer provided only log_rotation.
|
|
205
|
+
# logger will create a new log based on log_rotation (new file everyday if the rotation is daily).
|
|
206
|
+
# This will create too many logs over a period of time as log purging is not done.
|
|
207
|
+
@@logger = Logger.new(oci_fluent_output_plugin_log, @plugin_log_rotation)
|
|
208
|
+
logger_config = 'FALLBACK_CONFIG'
|
|
209
|
+
else
|
|
210
|
+
# When customer provided invalid log config, default config is considered.
|
|
211
|
+
# logger will rotate with max default log_file_count with each file having max default log_file_size.
|
|
212
|
+
# Older logs purged automatically.
|
|
213
|
+
@@logger = Logger.new(oci_fluent_output_plugin_log, @@default_number_of_logs, @@default_log_size)
|
|
214
|
+
logger_config = 'DEFAULT_CONFIG'
|
|
215
|
+
end
|
|
213
216
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
217
|
+
logger_set_level(@plugin_log_level)
|
|
218
|
+
@@logger.info {"Initializing oci-logging-analytics plugin"}
|
|
219
|
+
if is_default_log_location
|
|
220
|
+
@@logger.info {"plugin_log_location is not specified. oci-logging-analytics.log will be generated under directory from where fluentd is executed."}
|
|
221
|
+
end
|
|
218
222
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
223
|
+
case logger_config
|
|
224
|
+
when 'USER_CONFIG'
|
|
225
|
+
@@logger.info {"Logger for oci-logging-analytics.log is initialized with config values log size: #{@plugin_log_file_size}, number of logs: #{@plugin_log_file_count}"}
|
|
226
|
+
when 'FALLBACK_CONFIG'
|
|
227
|
+
@@logger.info {"Logger for oci-logging-analytics.log is initialized with log rotation: #{@plugin_log_rotation}"}
|
|
228
|
+
when 'DEFAULT_CONFIG'
|
|
229
|
+
@@logger.info {"Logger for oci-logging-analytics.log is initialized with default config values log size: #{@@default_log_size}, number of logs: #{@@default_number_of_logs}"}
|
|
230
|
+
end
|
|
231
|
+
if @@logger_config_errors.length > 0
|
|
232
|
+
@@logger_config_errors. each {|logger_config_error|
|
|
233
|
+
@@logger.warn {"#{logger_config_error}"}
|
|
234
|
+
}
|
|
235
|
+
end
|
|
236
|
+
if is_valid_log_age(@plugin_log_age)
|
|
237
|
+
@@logger.warn {"'plugin_log_age' field is deprecated. Use 'plugin_log_file_size' and 'plugin_log_file_count' instead."}
|
|
238
|
+
end
|
|
239
|
+
rescue => ex
|
|
240
|
+
@@logger = log
|
|
241
|
+
@@logger.error {"Error while initializing logger:#{ex.inspect}"}
|
|
242
|
+
@@logger.info {"Redirecting oci logging analytics logs to STDOUT"}
|
|
234
243
|
end
|
|
235
244
|
end
|
|
236
245
|
|
|
@@ -241,11 +250,16 @@ module Fluent::Plugin
|
|
|
241
250
|
case @auth_type
|
|
242
251
|
when "InstancePrincipal"
|
|
243
252
|
instance_principals_signer = OCI::Auth::Signers::InstancePrincipalsSecurityTokenSigner.new
|
|
244
|
-
|
|
253
|
+
if is_valid(@endpoint)
|
|
254
|
+
@@loganalytics_client = OCI::LogAnalytics::LogAnalyticsClient.new(config: OCI::Config.new, endpoint: @endpoint, signer: instance_principals_signer)
|
|
255
|
+
@@logger.info {"loganalytics_client initialised with endpoint: #{@endpoint}"}
|
|
256
|
+
else
|
|
257
|
+
@@loganalytics_client = OCI::LogAnalytics::LogAnalyticsClient.new(config: OCI::Config.new, signer: instance_principals_signer)
|
|
258
|
+
end
|
|
245
259
|
when "ConfigFile"
|
|
246
260
|
my_config = OCI::ConfigFileLoader.load_config(config_file_location: @config_file_location, profile_name: @profile_name)
|
|
247
|
-
if is_valid(endpoint)
|
|
248
|
-
@@loganalytics_client = OCI::LogAnalytics::LogAnalyticsClient.new(config:my_config, endpoint
|
|
261
|
+
if is_valid(@endpoint)
|
|
262
|
+
@@loganalytics_client = OCI::LogAnalytics::LogAnalyticsClient.new(config: my_config, endpoint: @endpoint)
|
|
249
263
|
@@logger.info {"loganalytics_client initialised with endpoint: #{@endpoint}"}
|
|
250
264
|
else
|
|
251
265
|
@@loganalytics_client = OCI::LogAnalytics::LogAnalyticsClient.new(config:my_config)
|
|
@@ -275,8 +289,8 @@ module Fluent::Plugin
|
|
|
275
289
|
initialize_logger
|
|
276
290
|
|
|
277
291
|
initialize_loganalytics_client
|
|
278
|
-
|
|
279
|
-
raise Fluent::ConfigError, "Error in config file : Buffer plugin must be of @type file." unless buffer_config['@type'] == 'file'
|
|
292
|
+
#@@logger.error {"Error in config file : Buffer plugin must be of @type file."} unless buffer_config['@type'] == 'file'
|
|
293
|
+
#raise Fluent::ConfigError, "Error in config file : Buffer plugin must be of @type file." unless buffer_config['@type'] == 'file'
|
|
280
294
|
|
|
281
295
|
is_mandatory_fields_valid,invalid_field_name = mandatory_field_validator
|
|
282
296
|
if !is_mandatory_fields_valid
|
|
@@ -288,8 +302,8 @@ module Fluent::Plugin
|
|
|
288
302
|
unless conf.elements(name: 'buffer').empty?
|
|
289
303
|
buffer_conf = conf.elements(name: 'buffer').first
|
|
290
304
|
chunk_limit_size_from_conf = buffer_conf['chunk_limit_size']
|
|
291
|
-
unless chunk_limit_size_from_conf.nil?
|
|
292
|
-
|
|
305
|
+
unless chunk_limit_size_from_conf.nil? && buffer_config['@type'] != 'file'
|
|
306
|
+
@@logger.debug "chunk limit size as per the configuration file is #{chunk_limit_size_from_conf}"
|
|
293
307
|
case chunk_limit_size_from_conf.to_s
|
|
294
308
|
when /([0-9]+)k/i
|
|
295
309
|
chunk_limit_size_bytes = $~[1].to_i * 1024
|
|
@@ -299,13 +313,13 @@ module Fluent::Plugin
|
|
|
299
313
|
chunk_limit_size_bytes = $~[1].to_i * (1024 ** 3)
|
|
300
314
|
when /([0-9]+)t/i
|
|
301
315
|
chunk_limit_size_bytes = $~[1].to_i * (1024 ** 4)
|
|
302
|
-
else
|
|
303
|
-
raise Fluent::ConfigError, "error parsing chunk_limit_size"
|
|
316
|
+
#else
|
|
317
|
+
#raise Fluent::ConfigError, "error parsing chunk_limit_size"
|
|
304
318
|
end
|
|
305
319
|
|
|
306
|
-
|
|
307
|
-
if !chunk_limit_size_bytes.between?(1048576,
|
|
308
|
-
raise Fluent::ConfigError, "chunk_limit_size must be between 1MB and
|
|
320
|
+
@@logger.debug "chunk limit size in bytes as per the configuration file is #{chunk_limit_size_bytes}"
|
|
321
|
+
if chunk_limit_size_bytes != nil && !chunk_limit_size_bytes.between?(1048576, 4194304)
|
|
322
|
+
raise Fluent::ConfigError, "chunk_limit_size must be between 1MB and 4MB"
|
|
309
323
|
end
|
|
310
324
|
end
|
|
311
325
|
end
|
|
@@ -577,7 +591,7 @@ module Fluent::Plugin
|
|
|
577
591
|
kubernetes_metadata.each do |key, value|
|
|
578
592
|
if kubernetes_metadata_keys_mapping.has_key?(key)
|
|
579
593
|
if !is_valid(oci_la_metadata[kubernetes_metadata_keys_mapping[key]])
|
|
580
|
-
oci_la_metadata[kubernetes_metadata_keys_mapping[key]] = json_message_handler(value)
|
|
594
|
+
oci_la_metadata[kubernetes_metadata_keys_mapping[key]] = json_message_handler(key, value)
|
|
581
595
|
end
|
|
582
596
|
end
|
|
583
597
|
end
|
|
@@ -588,14 +602,21 @@ module Fluent::Plugin
|
|
|
588
602
|
return oci_la_metadata
|
|
589
603
|
end
|
|
590
604
|
|
|
591
|
-
def json_message_handler(message)
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
605
|
+
def json_message_handler(key, message)
|
|
606
|
+
begin
|
|
607
|
+
if !is_valid(message)
|
|
608
|
+
return nil
|
|
609
|
+
end
|
|
610
|
+
if message.is_a?(Hash)
|
|
611
|
+
return Yajl.dump(message) #JSON.generate(message)
|
|
612
|
+
end
|
|
613
|
+
return message
|
|
614
|
+
rescue => ex
|
|
615
|
+
@@logger.error {"Error occured while generating json for
|
|
616
|
+
field: #{key}
|
|
617
|
+
exception : #{ex}"}
|
|
618
|
+
return nil
|
|
619
|
+
end
|
|
599
620
|
end
|
|
600
621
|
|
|
601
622
|
def group_by_logGroupId(chunk)
|
|
@@ -624,6 +645,10 @@ module Fluent::Plugin
|
|
|
624
645
|
if !record.nil?
|
|
625
646
|
begin
|
|
626
647
|
record_hash = record.keys.map {|x| [x,true]}.to_h
|
|
648
|
+
if record_hash.has_key?("worker_id") && is_valid(record["worker_id"])
|
|
649
|
+
metricsLabels.worker_id = record["worker_id"]||= '0'
|
|
650
|
+
@@worker_id = record["worker_id"]||= '0'
|
|
651
|
+
end
|
|
627
652
|
is_tag_exists = false
|
|
628
653
|
if record_hash.has_key?("tag") && is_valid(record["tag"])
|
|
629
654
|
is_tag_exists = true
|
|
@@ -702,22 +727,23 @@ module Fluent::Plugin
|
|
|
702
727
|
if record["oci_la_log_set"] != nil
|
|
703
728
|
metricsLabels.logSet = record["oci_la_log_set"]
|
|
704
729
|
end
|
|
730
|
+
record["message"] = json_message_handler("message", record["message"])
|
|
731
|
+
|
|
732
|
+
|
|
705
733
|
#This will check for null or empty messages and only that record will be ignored.
|
|
706
734
|
if !is_valid(record["message"])
|
|
707
735
|
metricsLabels.invalid_reason = OutOracleOCILogAnalytics::METRICS_INVALID_REASON_MESSAGE
|
|
708
736
|
if is_tag_exists
|
|
709
|
-
@@logger.warn {"'message' field has empty value, Skipping records associated with tag : #{record["tag"]}."}
|
|
710
737
|
if invalid_records_per_tag.has_key?(record["tag"])
|
|
711
738
|
invalid_records_per_tag[record["tag"]] += 1
|
|
712
739
|
else
|
|
713
740
|
invalid_records_per_tag[record["tag"]] = 1
|
|
741
|
+
@@logger.warn {"'message' field is empty or encoded, Skipping records associated with tag : #{record["tag"]}."}
|
|
714
742
|
end
|
|
715
743
|
else
|
|
716
|
-
@@logger.warn {"'message' field
|
|
744
|
+
@@logger.warn {"'message' field is empty or encoded, Skipping record."}
|
|
717
745
|
end
|
|
718
746
|
next
|
|
719
|
-
else
|
|
720
|
-
record["message"] = json_message_handler(record["message"])
|
|
721
747
|
end
|
|
722
748
|
|
|
723
749
|
if record_hash.has_key?("kubernetes")
|
|
@@ -773,7 +799,7 @@ module Fluent::Plugin
|
|
|
773
799
|
|
|
774
800
|
tag_metrics_set.each do |tag,metricsLabels|
|
|
775
801
|
latency_avg = (metricsLabels.latency / metricsLabels.records_per_tag).round(3)
|
|
776
|
-
@@prometheusMetrics.chunk_time_to_receive.observe(latency_avg, labels: { tag: tag})
|
|
802
|
+
@@prometheusMetrics.chunk_time_to_receive.observe(latency_avg, labels: { worker_id: metricsLabels.worker_id, tag: tag})
|
|
777
803
|
end
|
|
778
804
|
|
|
779
805
|
lrpes_for_logGroupId = {}
|
|
@@ -827,17 +853,20 @@ module Fluent::Plugin
|
|
|
827
853
|
logGroup_metrics_map[metricsLabels.logGroupId] = metricsLabels_array
|
|
828
854
|
end
|
|
829
855
|
|
|
830
|
-
@@prometheusMetrics.records_received.set(value.to_i, labels: {
|
|
856
|
+
@@prometheusMetrics.records_received.set(value.to_i, labels: { worker_id: metricsLabels.worker_id,
|
|
857
|
+
tag: key,
|
|
831
858
|
oci_la_log_group_id: metricsLabels.logGroupId,
|
|
832
859
|
oci_la_log_source_name: metricsLabels.logSourceName,
|
|
833
860
|
oci_la_log_set: metricsLabels.logSet})
|
|
834
861
|
|
|
835
|
-
@@prometheusMetrics.records_invalid.set(dropped_messages, labels: {
|
|
862
|
+
@@prometheusMetrics.records_invalid.set(dropped_messages, labels: { worker_id: metricsLabels.worker_id,
|
|
863
|
+
tag: key,
|
|
836
864
|
oci_la_log_group_id: metricsLabels.logGroupId,
|
|
837
865
|
oci_la_log_source_name: metricsLabels.logSourceName,
|
|
838
866
|
oci_la_log_set: metricsLabels.logSet,
|
|
839
867
|
reason: metricsLabels.invalid_reason})
|
|
840
|
-
@@prometheusMetrics.records_valid.set(valid_messages, labels: {
|
|
868
|
+
@@prometheusMetrics.records_valid.set(valid_messages, labels: { worker_id: metricsLabels.worker_id,
|
|
869
|
+
tag: key,
|
|
841
870
|
oci_la_log_group_id: metricsLabels.logGroupId,
|
|
842
871
|
oci_la_log_source_name: metricsLabels.logSourceName,
|
|
843
872
|
oci_la_log_set: metricsLabels.logSet})
|
|
@@ -875,7 +904,7 @@ module Fluent::Plugin
|
|
|
875
904
|
end
|
|
876
905
|
end
|
|
877
906
|
}.real.round(3)
|
|
878
|
-
@@prometheusMetrics.chunk_time_to_upload.observe(chunk_upload_time_taken, labels: { oci_la_log_group_id: oci_la_log_group_id})
|
|
907
|
+
@@prometheusMetrics.chunk_time_to_upload.observe(chunk_upload_time_taken, labels: { worker_id: @@worker_id, oci_la_log_group_id: oci_la_log_group_id})
|
|
879
908
|
|
|
880
909
|
end
|
|
881
910
|
ensure
|
|
@@ -956,7 +985,7 @@ module Fluent::Plugin
|
|
|
956
985
|
@@logger.debug {"Added entry #{nextEntry} for oci_la_log_set #{oci_la_log_set} into the zip."}
|
|
957
986
|
zos.put_next_entry(nextEntry)
|
|
958
987
|
logEventsJsonFinal = LogEventsJson.new(oci_la_global_metadata,lrpes_for_logEvents)
|
|
959
|
-
zos.write logEventsJsonFinal.to_hash
|
|
988
|
+
zos.write Yajl.dump(logEventsJsonFinal.to_hash)
|
|
960
989
|
end
|
|
961
990
|
}
|
|
962
991
|
zippedstream.rewind
|
|
@@ -1002,13 +1031,15 @@ module Fluent::Plugin
|
|
|
1002
1031
|
opts)
|
|
1003
1032
|
if !response.nil? && response.status == 200 then
|
|
1004
1033
|
headers = response.headers
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1034
|
+
if metricsLabels_array != nil
|
|
1035
|
+
metricsLabels_array.each { |metricsLabels|
|
|
1036
|
+
@@prometheusMetrics.records_posted.set(metricsLabels.records_valid, labels: { worker_id: metricsLabels.worker_id,
|
|
1037
|
+
tag: metricsLabels.tag,
|
|
1038
|
+
oci_la_log_group_id: metricsLabels.logGroupId,
|
|
1039
|
+
oci_la_log_source_name: metricsLabels.logSourceName,
|
|
1040
|
+
oci_la_log_set: metricsLabels.logSet})
|
|
1041
|
+
}
|
|
1042
|
+
end
|
|
1012
1043
|
|
|
1013
1044
|
#zippedstream.rewind #reposition buffer pointer to the beginning
|
|
1014
1045
|
#zipfile = zippedstream&.sysread&.dup
|
|
@@ -1087,9 +1118,10 @@ module Fluent::Plugin
|
|
|
1087
1118
|
error_reason = ex
|
|
1088
1119
|
@@logger.error {"oci upload exception : Error while uploading the payload. #{ex}"}
|
|
1089
1120
|
ensure
|
|
1090
|
-
if error_reason != nil
|
|
1121
|
+
if error_reason != nil && metricsLabels_array != nil
|
|
1091
1122
|
metricsLabels_array.each { |metricsLabels|
|
|
1092
|
-
@@prometheusMetrics.records_error.set(metricsLabels.records_valid, labels: {
|
|
1123
|
+
@@prometheusMetrics.records_error.set(metricsLabels.records_valid, labels: {worker_id: metricsLabels.worker_id,
|
|
1124
|
+
tag: metricsLabels.tag,
|
|
1093
1125
|
oci_la_log_group_id: metricsLabels.logGroupId,
|
|
1094
1126
|
oci_la_log_source_name: metricsLabels.logSourceName,
|
|
1095
1127
|
oci_la_log_set: metricsLabels.logSet,
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fluent-plugin-oci-logging-analytics
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0.
|
|
4
|
+
version: 2.0.6
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Oracle
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date:
|
|
12
|
+
date: 2024-02-05 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: rake
|
|
@@ -93,14 +93,34 @@ dependencies:
|
|
|
93
93
|
requirements:
|
|
94
94
|
- - "~>"
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: 4.0
|
|
96
|
+
version: '4.0'
|
|
97
97
|
type: :runtime
|
|
98
98
|
prerelease: false
|
|
99
99
|
version_requirements: !ruby/object:Gem::Requirement
|
|
100
100
|
requirements:
|
|
101
101
|
- - "~>"
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: 4.0
|
|
103
|
+
version: '4.0'
|
|
104
|
+
- !ruby/object:Gem::Dependency
|
|
105
|
+
name: yajl-ruby
|
|
106
|
+
requirement: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - "~>"
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '1.4'
|
|
111
|
+
- - ">="
|
|
112
|
+
- !ruby/object:Gem::Version
|
|
113
|
+
version: 1.4.3
|
|
114
|
+
type: :runtime
|
|
115
|
+
prerelease: false
|
|
116
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
117
|
+
requirements:
|
|
118
|
+
- - "~>"
|
|
119
|
+
- !ruby/object:Gem::Version
|
|
120
|
+
version: '1.4'
|
|
121
|
+
- - ">="
|
|
122
|
+
- !ruby/object:Gem::Version
|
|
123
|
+
version: 1.4.3
|
|
104
124
|
description: OCI Logging Analytics Fluentd output plugin for ingesting the collected
|
|
105
125
|
log events to OCI Logging Analytics.
|
|
106
126
|
email:
|
|
@@ -136,8 +156,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
136
156
|
- !ruby/object:Gem::Version
|
|
137
157
|
version: '0'
|
|
138
158
|
requirements: []
|
|
139
|
-
|
|
140
|
-
rubygems_version: 2.6.13
|
|
159
|
+
rubygems_version: 3.0.3.1
|
|
141
160
|
signing_key:
|
|
142
161
|
specification_version: 4
|
|
143
162
|
summary: Fluentd output plugin for OCI Logging Analytics.
|