fluent-plugin-oci-logging-analytics 2.0.5 → 2.0.7
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/fluent/dto/logEvents.rb +6 -5
- data/lib/fluent/dto/logEventsJson.rb +2 -2
- data/lib/fluent/enums/source.rb +7 -0
- data/lib/fluent/metrics/metricsLabels.rb +6 -2
- data/lib/fluent/metrics/prometheusMetrics.rb +4 -1
- data/lib/fluent/plugin/out_oci-logging-analytics.rb +73 -10
- data/lib/fluent/version/version.rb +8 -0
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5b41804c02cd5e1dd39efc4c600f043cbed2a90972aabc39671c830fedcafe67
|
4
|
+
data.tar.gz: 24fc404d3f0f4d06f2e9f2167d7bc4fff337a235f9671e7e024ce71763750cb8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a779a1971cabf78edf2c0b14ae6ba06235ce4113fe0ded3b264d626baba6c7f82f3aabdcb029890cb52697b2b01ae119691c7412e7920c79ada71ce8ed060fff
|
7
|
+
data.tar.gz: ef679bc249d8d16bc12a447f158c19faea8425c98170aecfbd7053da7d4081876f2b830f7c59dcef50e4abb9422d8e2cac30e91c16bffc4cf8e33072f931fe9c
|
data/lib/fluent/dto/logEvents.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
## Copyright (c) 2021,
|
1
|
+
## Copyright (c) 2021, 2024 Oracle and/or its affiliates.
|
2
2
|
## The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
3
3
|
|
4
4
|
class LogEvents
|
5
|
-
attr_accessor :entityId, :entityType, :logSourceName, :logPath, :logRecords , :metadata
|
5
|
+
attr_accessor :entityId, :entityType, :logSourceName, :logPath, :logRecords , :metadata, :timezone
|
6
6
|
def initialize(lrpe_key, fluentd_records)
|
7
|
-
@metadata, @entityId, @entityType, @logSourceName, @logPath = lrpe_key
|
7
|
+
@metadata, @entityId, @entityType, @logSourceName, @logPath, @timezone = lrpe_key
|
8
8
|
@logRecords = fluentd_records.map{ |record|
|
9
9
|
record['message']
|
10
10
|
}
|
@@ -17,8 +17,9 @@ class LogEvents
|
|
17
17
|
entityType: @entityType,
|
18
18
|
logSourceName: @logSourceName,
|
19
19
|
logPath: @logPath,
|
20
|
-
logRecords: @logRecords
|
20
|
+
logRecords: @logRecords,
|
21
|
+
timezone:@timezone
|
21
22
|
}.compact
|
22
23
|
end
|
23
|
-
|
24
|
+
|
24
25
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
## Copyright (c) 2021,
|
1
|
+
## Copyright (c) 2021, 2024 Oracle and/or its affiliates.
|
2
2
|
## The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
3
3
|
|
4
4
|
require_relative './logEvents'
|
@@ -20,5 +20,5 @@ class LogEventsJson
|
|
20
20
|
end
|
21
21
|
}.compact
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
end
|
@@ -1,5 +1,8 @@
|
|
1
|
+
## Copyright (c) 2021, 2024 Oracle and/or its affiliates.
|
2
|
+
## The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
3
|
+
|
1
4
|
class MetricsLabels
|
2
|
-
attr_accessor :worker_id, :tag, :logGroupId, :logSourceName, :logSet, :invalid_reason, :records_valid, :records_per_tag, :latency
|
5
|
+
attr_accessor :worker_id, :tag, :logGroupId, :logSourceName, :logSet, :invalid_reason, :records_valid, :records_per_tag, :latency,:timezone
|
3
6
|
def initialize
|
4
7
|
@worker_id = nil
|
5
8
|
@tag = nil
|
@@ -10,5 +13,6 @@ class MetricsLabels
|
|
10
13
|
@records_valid = 0
|
11
14
|
@records_per_tag = 0
|
12
15
|
@latency = 0
|
16
|
+
@timezone = nil
|
13
17
|
end
|
14
|
-
end
|
18
|
+
end
|
@@ -1,3 +1,6 @@
|
|
1
|
+
## Copyright (c) 2021, 2024 Oracle and/or its affiliates.
|
2
|
+
## The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
3
|
+
|
1
4
|
require 'prometheus/client'
|
2
5
|
require 'prometheus/client/registry'
|
3
6
|
require 'prometheus/client/gauge'
|
@@ -35,4 +38,4 @@ class PrometheusMetrics
|
|
35
38
|
registry.register(@chunk_time_to_receive) unless registry.exist?('oci_la_fluentd_output_plugin_chunk_time_to_receive')
|
36
39
|
registry.register(@chunk_time_to_upload) unless registry.exist?('oci_la_fluentd_output_plugin_chunk_time_to_post')
|
37
40
|
end
|
38
|
-
end
|
41
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
## Copyright (c) 2021,
|
1
|
+
## Copyright (c) 2021, 2024 Oracle and/or its affiliates.
|
2
2
|
## The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
3
3
|
|
4
4
|
require 'fluent/plugin/output'
|
@@ -7,11 +7,13 @@ require 'zip'
|
|
7
7
|
require 'yajl'
|
8
8
|
require 'yajl/json_gem'
|
9
9
|
|
10
|
+
# require 'tzinfo'
|
10
11
|
require 'logger'
|
11
12
|
require_relative '../dto/logEventsJson'
|
12
13
|
require_relative '../dto/logEvents'
|
13
14
|
require_relative '../metrics/prometheusMetrics'
|
14
15
|
require_relative '../metrics/metricsLabels'
|
16
|
+
require_relative '../enums/source'
|
15
17
|
|
16
18
|
# Import only specific OCI modules to improve load times and reduce the memory requirements.
|
17
19
|
require 'oci/auth/auth'
|
@@ -36,7 +38,6 @@ require 'oci/version'
|
|
36
38
|
require 'oci/waiter'
|
37
39
|
require 'oci/retry/retry'
|
38
40
|
require 'oci/object_storage/object_storage'
|
39
|
-
|
40
41
|
module OCI
|
41
42
|
class << self
|
42
43
|
attr_accessor :sdk_name
|
@@ -97,7 +98,8 @@ module Fluent::Plugin
|
|
97
98
|
config_param :zip_file_location, :string, :default => nil
|
98
99
|
desc 'The kubernetes_metadata_keys_mapping.'
|
99
100
|
config_param :kubernetes_metadata_keys_mapping, :hash, :default => {"container_name":"Container","namespace_name":"Namespace","pod_name":"Pod","container_image":"Container Image Name","host":"Node"}
|
100
|
-
|
101
|
+
desc 'opc-meta-properties'
|
102
|
+
config_param :collection_source, :string, :default => Source::FLUENTD
|
101
103
|
|
102
104
|
#****************************************************************
|
103
105
|
desc 'The http proxy to be used.'
|
@@ -250,11 +252,24 @@ module Fluent::Plugin
|
|
250
252
|
case @auth_type
|
251
253
|
when "InstancePrincipal"
|
252
254
|
instance_principals_signer = OCI::Auth::Signers::InstancePrincipalsSecurityTokenSigner.new
|
253
|
-
|
255
|
+
if is_valid(@endpoint)
|
256
|
+
@@loganalytics_client = OCI::LogAnalytics::LogAnalyticsClient.new(config: OCI::Config.new, endpoint: @endpoint, signer: instance_principals_signer)
|
257
|
+
@@logger.info {"loganalytics_client initialised with endpoint: #{@endpoint}"}
|
258
|
+
else
|
259
|
+
@@loganalytics_client = OCI::LogAnalytics::LogAnalyticsClient.new(config: OCI::Config.new, signer: instance_principals_signer)
|
260
|
+
end
|
261
|
+
when "WorkloadIdentity"
|
262
|
+
workload_identity_signer = OCI::Auth::Signers::oke_workload_resource_principal_signer
|
263
|
+
if is_valid(@endpoint)
|
264
|
+
@@loganalytics_client = OCI::LogAnalytics::LogAnalyticsClient.new(config: OCI::Config.new, endpoint: @endpoint, signer: workload_identity_signer)
|
265
|
+
@@logger.info {"loganalytics_client initialised with endpoint: #{@endpoint}"}
|
266
|
+
else
|
267
|
+
@@loganalytics_client = OCI::LogAnalytics::LogAnalyticsClient.new(config: OCI::Config.new, signer: workload_identity_signer)
|
268
|
+
end
|
254
269
|
when "ConfigFile"
|
255
270
|
my_config = OCI::ConfigFileLoader.load_config(config_file_location: @config_file_location, profile_name: @profile_name)
|
256
|
-
if is_valid(endpoint)
|
257
|
-
@@loganalytics_client = OCI::LogAnalytics::LogAnalyticsClient.new(config:my_config, endpoint
|
271
|
+
if is_valid(@endpoint)
|
272
|
+
@@loganalytics_client = OCI::LogAnalytics::LogAnalyticsClient.new(config: my_config, endpoint: @endpoint)
|
258
273
|
@@logger.info {"loganalytics_client initialised with endpoint: #{@endpoint}"}
|
259
274
|
else
|
260
275
|
@@loganalytics_client = OCI::LogAnalytics::LogAnalyticsClient.new(config:my_config)
|
@@ -623,6 +638,8 @@ module Fluent::Plugin
|
|
623
638
|
latency = 0
|
624
639
|
records_per_tag = 0
|
625
640
|
|
641
|
+
|
642
|
+
|
626
643
|
tag_metrics_set = Hash.new
|
627
644
|
logGroup_labels_set = Hash.new
|
628
645
|
|
@@ -632,8 +649,8 @@ module Fluent::Plugin
|
|
632
649
|
tags_per_logGroupId = Hash.new
|
633
650
|
tag_logSet_map = Hash.new
|
634
651
|
tag_metadata_map = Hash.new
|
652
|
+
timezoneValuesByTag = Hash.new
|
635
653
|
incoming_records = 0
|
636
|
-
|
637
654
|
chunk.each do |time, record|
|
638
655
|
incoming_records += 1
|
639
656
|
metricsLabels = MetricsLabels.new
|
@@ -717,6 +734,8 @@ module Fluent::Plugin
|
|
717
734
|
end
|
718
735
|
next
|
719
736
|
end
|
737
|
+
|
738
|
+
# metricsLabels.timezone = record["oci_la_timezone"]
|
720
739
|
metricsLabels.logGroupId = record["oci_la_log_group_id"]
|
721
740
|
metricsLabels.logSourceName = record["oci_la_log_source_name"]
|
722
741
|
if record["oci_la_log_set"] != nil
|
@@ -765,6 +784,25 @@ module Fluent::Plugin
|
|
765
784
|
tags_per_logGroupId[record["oci_la_log_group_id"]] = record["tag"]
|
766
785
|
end
|
767
786
|
end
|
787
|
+
# validating the timezone field
|
788
|
+
if !timezoneValuesByTag.has_key?(record["tag"])
|
789
|
+
begin
|
790
|
+
timezoneIdentifier = record["oci_la_timezone"]
|
791
|
+
unless is_valid(timezoneIdentifier)
|
792
|
+
record["oci_la_timezone"] = nil
|
793
|
+
else
|
794
|
+
isTimezoneExist = timezone_exist? timezoneIdentifier
|
795
|
+
unless isTimezoneExist
|
796
|
+
@@logger.warn { "Invalid timezone '#{timezoneIdentifier}', using default UTC." }
|
797
|
+
record["oci_la_timezone"] = "UTC"
|
798
|
+
end
|
799
|
+
|
800
|
+
end
|
801
|
+
timezoneValuesByTag[record["tag"]] = record["oci_la_timezone"]
|
802
|
+
end
|
803
|
+
else
|
804
|
+
record["oci_la_timezone"] = timezoneValuesByTag[record["tag"]]
|
805
|
+
end
|
768
806
|
|
769
807
|
records << record
|
770
808
|
ensure
|
@@ -911,6 +949,14 @@ module Fluent::Plugin
|
|
911
949
|
end
|
912
950
|
end
|
913
951
|
end
|
952
|
+
def timezone_exist?(tz)
|
953
|
+
begin
|
954
|
+
TZInfo::Timezone.get(tz)
|
955
|
+
return true
|
956
|
+
rescue TZInfo::InvalidTimezoneIdentifier
|
957
|
+
return false
|
958
|
+
end
|
959
|
+
end
|
914
960
|
|
915
961
|
# Each oci_la_log_set will correspond to a separate file in the zip
|
916
962
|
# Only MAX_FILES_PER_ZIP files are allowed per zip.
|
@@ -953,6 +999,21 @@ module Fluent::Plugin
|
|
953
999
|
|
954
1000
|
# takes a fluentD chunk and converts it to an in-memory zipfile, populating metrics hash provided
|
955
1001
|
# Any exception raised is passed into the metrics hash, to be re-thrown from write()
|
1002
|
+
def getCollectionSource(input)
|
1003
|
+
collections_src = []
|
1004
|
+
if !is_valid input
|
1005
|
+
collections_src.unshift("source:#{Source::FLUENTD}")
|
1006
|
+
else
|
1007
|
+
if input == Source::FLUENTD.to_s or input == Source::KUBERNETES_SOLUTION.to_s
|
1008
|
+
collections_src.unshift("source:#{input}")
|
1009
|
+
else
|
1010
|
+
# source not define ! using default source 'fluentd'
|
1011
|
+
collections_src.unshift("source:#{Source::FLUENTD}")
|
1012
|
+
end
|
1013
|
+
end
|
1014
|
+
collections_src
|
1015
|
+
end
|
1016
|
+
|
956
1017
|
def get_zipped_stream(oci_la_log_group_id,oci_la_global_metadata,records_per_logSet_map)
|
957
1018
|
begin
|
958
1019
|
current, = Time.now
|
@@ -965,8 +1026,9 @@ module Fluent::Plugin
|
|
965
1026
|
record['oci_la_metadata'],
|
966
1027
|
record['oci_la_entity_id'],
|
967
1028
|
record['oci_la_entity_type'],
|
968
|
-
record['oci_la_log_source_name']
|
969
|
-
record['oci_la_log_path']
|
1029
|
+
record['oci_la_log_source_name'],
|
1030
|
+
record['oci_la_log_path'],
|
1031
|
+
record['oci_la_timezone']
|
970
1032
|
]}.map { |lrpe_key, records_per_lrpe|
|
971
1033
|
number_of_records += records_per_lrpe.length
|
972
1034
|
LogEvents.new(lrpe_key, records_per_lrpe)
|
@@ -1016,9 +1078,10 @@ module Fluent::Plugin
|
|
1016
1078
|
# upload zipped stream to oci
|
1017
1079
|
def upload_to_oci(oci_la_log_group_id, number_of_records, zippedstream, metricsLabels_array)
|
1018
1080
|
begin
|
1081
|
+
collection_src_prop = getCollectionSource @collection_source
|
1019
1082
|
error_reason = nil
|
1020
1083
|
error_code = nil
|
1021
|
-
opts = {payload_type: "ZIP"}
|
1084
|
+
opts = { payload_type: "ZIP", opc_meta_properties:collection_src_prop}
|
1022
1085
|
|
1023
1086
|
response = @@loganalytics_client.upload_log_events_file(namespace_name=@namespace,
|
1024
1087
|
logGroupId=oci_la_log_group_id ,
|
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.7
|
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-10-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -93,14 +93,14 @@ 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
104
|
- !ruby/object:Gem::Dependency
|
105
105
|
name: yajl-ruby
|
106
106
|
requirement: !ruby/object:Gem::Requirement
|
@@ -131,9 +131,11 @@ extra_rdoc_files: []
|
|
131
131
|
files:
|
132
132
|
- lib/fluent/dto/logEvents.rb
|
133
133
|
- lib/fluent/dto/logEventsJson.rb
|
134
|
+
- lib/fluent/enums/source.rb
|
134
135
|
- lib/fluent/metrics/metricsLabels.rb
|
135
136
|
- lib/fluent/metrics/prometheusMetrics.rb
|
136
137
|
- lib/fluent/plugin/out_oci-logging-analytics.rb
|
138
|
+
- lib/fluent/version/version.rb
|
137
139
|
homepage:
|
138
140
|
licenses:
|
139
141
|
- UPL-1.0
|
@@ -156,7 +158,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
156
158
|
- !ruby/object:Gem::Version
|
157
159
|
version: '0'
|
158
160
|
requirements: []
|
159
|
-
rubygems_version: 3.0.3
|
161
|
+
rubygems_version: 3.0.3.1
|
160
162
|
signing_key:
|
161
163
|
specification_version: 4
|
162
164
|
summary: Fluentd output plugin for OCI Logging Analytics.
|