fluent-plugin-jfrog-metrics 0.1.0 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +7 -4
- data/Gemfile.lock +24 -6
- data/README.md +14 -4
- data/fluent-plugin-jfrog-metrics.gemspec +5 -5
- data/lib/fluent/plugin/in_jfrog_metrics.rb +10 -4
- data/lib/fluent/plugin/metrics_helper.rb +51 -6
- metadata +12 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 35d89c89f714cfeab9228b18f16d1933f8b38074b7df8806a4bc195125c3c69b
|
4
|
+
data.tar.gz: f10912f41f6bfc0afd9fa0834a89d2773019c9d2ba556d2867d5197240181569
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b0a8f44d52302a02a854626901a925da9f0b94d1b594b9c3fb1fd933d20fd68b34a8275628699f196718f219c681d6bcfaf78639861ae80c8d70001a3cf209b
|
7
|
+
data.tar.gz: a3d33863e73d03fe8658e17fd380c5635827b740bac955ede041560c85d879c6662f188c03555962a1e6e879b660c54a1d17687682587f3652b72b7c2a48d6c9
|
data/Gemfile
CHANGED
@@ -1,8 +1,11 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
source 'https://rubygems.org'
|
2
4
|
|
3
5
|
gemspec
|
4
6
|
|
5
7
|
group :test do
|
6
|
-
gem
|
7
|
-
gem
|
8
|
-
|
8
|
+
gem 'minitest'
|
9
|
+
gem 'minitest-reporters', '>= 0.5.0'
|
10
|
+
gem 'rest-client', '>= 2.1.0'
|
11
|
+
end
|
data/Gemfile.lock
CHANGED
@@ -11,30 +11,44 @@ GEM
|
|
11
11
|
builder (3.2.4)
|
12
12
|
concurrent-ruby (1.1.9)
|
13
13
|
cool.io (1.7.1)
|
14
|
-
|
14
|
+
domain_name (0.5.20190701)
|
15
|
+
unf (>= 0.0.5, < 1.0.0)
|
16
|
+
fluentd (1.14.5)
|
15
17
|
bundler
|
16
18
|
cool.io (>= 1.4.5, < 2.0.0)
|
17
|
-
http_parser.rb (>= 0.5.1, < 0.
|
19
|
+
http_parser.rb (>= 0.5.1, < 0.9.0)
|
18
20
|
msgpack (>= 1.3.1, < 2.0.0)
|
19
|
-
serverengine (>= 2.2.
|
21
|
+
serverengine (>= 2.2.5, < 3.0.0)
|
20
22
|
sigdump (~> 0.2.2)
|
21
23
|
strptime (>= 0.2.4, < 1.0.0)
|
22
24
|
tzinfo (>= 1.0, < 3.0)
|
23
25
|
tzinfo-data (~> 1.0)
|
24
26
|
webrick (>= 1.4.2, < 1.8.0)
|
25
27
|
yajl-ruby (~> 1.0)
|
26
|
-
|
28
|
+
http-accept (1.7.0)
|
29
|
+
http-cookie (1.0.4)
|
30
|
+
domain_name (~> 0.5)
|
31
|
+
http_parser.rb (0.8.0)
|
32
|
+
mime-types (3.4.1)
|
33
|
+
mime-types-data (~> 3.2015)
|
34
|
+
mime-types-data (3.2021.1115)
|
27
35
|
minitest (5.14.4)
|
28
36
|
minitest-reporters (1.4.3)
|
29
37
|
ansi
|
30
38
|
builder
|
31
39
|
minitest (>= 5.0)
|
32
40
|
ruby-progressbar
|
33
|
-
msgpack (1.4.
|
41
|
+
msgpack (1.4.5)
|
42
|
+
netrc (0.11.0)
|
34
43
|
power_assert (2.0.1)
|
35
44
|
rake (12.3.3)
|
45
|
+
rest-client (2.1.0)
|
46
|
+
http-accept (>= 1.7.0, < 2.0)
|
47
|
+
http-cookie (>= 1.0.2, < 2.0)
|
48
|
+
mime-types (>= 1.16, < 4.0)
|
49
|
+
netrc (~> 0.8)
|
36
50
|
ruby-progressbar (1.11.0)
|
37
|
-
serverengine (2.2.
|
51
|
+
serverengine (2.2.5)
|
38
52
|
sigdump (~> 0.2.2)
|
39
53
|
sigdump (0.2.4)
|
40
54
|
strptime (0.2.5)
|
@@ -44,6 +58,9 @@ GEM
|
|
44
58
|
concurrent-ruby (~> 1.0)
|
45
59
|
tzinfo-data (1.2021.5)
|
46
60
|
tzinfo (>= 1.0.0)
|
61
|
+
unf (0.1.4)
|
62
|
+
unf_ext
|
63
|
+
unf_ext (0.0.8)
|
47
64
|
webrick (1.7.0)
|
48
65
|
yajl-ruby (1.4.1)
|
49
66
|
|
@@ -56,6 +73,7 @@ DEPENDENCIES
|
|
56
73
|
minitest
|
57
74
|
minitest-reporters (>= 0.5.0)
|
58
75
|
rake (~> 12.0)
|
76
|
+
rest-client (>= 2.1.0)
|
59
77
|
test-unit (~> 3.0)
|
60
78
|
|
61
79
|
BUNDLED WITH
|
data/README.md
CHANGED
@@ -73,14 +73,24 @@ wget https://raw.githubusercontent.com/jfrog/metrics/master/splunk/splunk_metric
|
|
73
73
|
|
74
74
|
#### Configuration parameters
|
75
75
|
Integration is done by setting up Xray. Obtain JPD url and access token for API. Configure the source directive parameters specified below
|
76
|
-
* **tag** (string) (required): The value is the tag assigned to the generated
|
77
|
-
* **jpd_url** (string) (required): JPD url required to pull
|
78
|
-
* **apikey** (string) (required): API Key is the [Artifactory API Key](https://www.jfrog.com/confluence/display/JFROG/User+Profile#UserProfile-APIKey) for authentication
|
76
|
+
* **tag** (string) (required): The value is the tag assigned to the generated metrics.
|
77
|
+
* **jpd_url** (string) (required): JPD url required to pull metrics, (note - if deployed on K8s use the localhost and port number combination per sidecar)
|
79
78
|
* **username** (string) (required): USER is the Artifactory username for authentication
|
79
|
+
* **apikey** (string) (required if token is not used, do refer Note section for specifics): API Key is the [Artifactory API Key](https://www.jfrog.com/confluence/display/JFROG/User+Profile#UserProfile-APIKey) for authentication
|
80
|
+
* **token** (string) (required if apikey is not used, do refer Note section for specifics): Admin token is the [Artifactory Scoped Tokens](https://www.jfrog.com/confluence/display/JFROG/Access+Tokens#AccessTokens-GeneratingAdminTokens) for authentication
|
80
81
|
* **metric_prefix** (string) (required): This values pulls the specific metrics. Values can be - jfrog.artifactory, jfrog.xray
|
81
82
|
* **interval** (integer) (optional): Wait interval between pulling new events
|
82
83
|
* Default value: `60`
|
83
|
-
|
84
|
+
* **common_jpd** (true / false) (optional): This flag should be set as true only for non-kubernetes installations or installations where JPD base URL is same to access both Artifactory and Xray,
|
85
|
+
* ex: https://sample_base_url/artifactory or https://sample_base_url/xray
|
86
|
+
* Default value: false
|
87
|
+
|
88
|
+
Note:
|
89
|
+
|
90
|
+
* For Artifactory v7.4 and below only API Key must be used,
|
91
|
+
* For Artifactory v7.4 to 7.29 either Token or API Key can be used,
|
92
|
+
* For Artifactory v7.30 and above token only must be used.
|
93
|
+
|
84
94
|
## Copyright
|
85
95
|
* Copyright(c) 2020 - JFrog
|
86
96
|
* License
|
@@ -3,12 +3,12 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |spec|
|
5
5
|
spec.name = 'fluent-plugin-jfrog-metrics'
|
6
|
-
spec.version = '0.1.
|
7
|
-
spec.authors = ['MahithaB, VasukiN']
|
8
|
-
spec.email = ['
|
6
|
+
spec.version = '0.1.2'
|
7
|
+
spec.authors = ['MahithaB, VasukiN, GiriR']
|
8
|
+
spec.email = ['cpe-support@jfrog.com']
|
9
9
|
|
10
|
-
spec.summary = %q{Fluentd Plugin for converting
|
11
|
-
spec.description = %q{Fluentd Plugin for converting
|
10
|
+
spec.summary = %q{Fluentd Plugin for converting JFrog Artifactory, Xray generated metrics (Prometheus Exposition Format) to target observability platform format (Splunk HEC)}
|
11
|
+
spec.description = %q{Fluentd Plugin for converting JFrog Artifactory, Xray generated metrics (Prometheus Exposition Format) to target observability platform format (Splunk HEC)}
|
12
12
|
spec.homepage = 'https://github.com/jfrog/jfrog-fluentd-plugins/tree/main/fluent-plugin-jfrog-metrics'
|
13
13
|
spec.license = 'Apache-2.0'
|
14
14
|
|
@@ -32,8 +32,10 @@ module Fluent
|
|
32
32
|
config_param :jpd_url, :string, default: ''
|
33
33
|
config_param :username, :string, default: ''
|
34
34
|
config_param :apikey, :string, default: ''
|
35
|
+
config_param :token, :string, default: ''
|
35
36
|
config_param :interval, :time, default: 10
|
36
37
|
config_param :metric_prefix, :string, default: ''
|
38
|
+
config_param :common_jpd, :bool, default: false
|
37
39
|
|
38
40
|
# `configure` is called before `start`.
|
39
41
|
# 'conf' is a `Hash` that includes the configuration parameters.
|
@@ -42,11 +44,11 @@ module Fluent
|
|
42
44
|
super
|
43
45
|
raise Fluent::ConfigError, 'Must define the tag for metrics data.' if @tag == ''
|
44
46
|
|
45
|
-
raise Fluent::ConfigError, 'Must define the jpd_url to scrape metrics' if @jpd_url == ''
|
47
|
+
raise Fluent::ConfigError, 'Must define the jpd_url to scrape metrics.' if @jpd_url == ''
|
46
48
|
|
47
|
-
raise Fluent::ConfigError, 'Must define the username for authentication' if @username == ''
|
49
|
+
raise Fluent::ConfigError, 'Must define the username for authentication.' if @username == ''
|
48
50
|
|
49
|
-
raise Fluent::ConfigError, 'Must define the apikey
|
51
|
+
raise Fluent::ConfigError, 'Must define the apikey or token for authentication.' if @token == '' && @apikey == ''
|
50
52
|
|
51
53
|
raise Fluent::ConfigError, 'Must define the interval to use for gathering the metrics.' if @interval == ''
|
52
54
|
|
@@ -77,8 +79,12 @@ module Fluent
|
|
77
79
|
|
78
80
|
def do_execute
|
79
81
|
puts('Executing metrics collection')
|
80
|
-
metrics_helper = MetricsHelper.new(@metric_prefix, @jpd_url, @username, @apikey)
|
82
|
+
metrics_helper = MetricsHelper.new(@metric_prefix, @jpd_url, @username, @apikey, @token, @common_jpd)
|
81
83
|
platform_metrics = metrics_helper.get_metrics
|
84
|
+
additional_metrics = metrics_helper.get_additional_metrics
|
85
|
+
if !additional_metrics.nil? && additional_metrics != ''
|
86
|
+
platform_metrics += additional_metrics.to_s
|
87
|
+
end
|
82
88
|
parser = MetricsParser.new(@metric_prefix, router, @tag)
|
83
89
|
parser.emit_parsed_metrics(platform_metrics)
|
84
90
|
end
|
@@ -1,12 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'rest-client'
|
3
4
|
|
4
5
|
class MetricsHelper
|
5
|
-
|
6
|
+
@@obs_endpoint_exists = false
|
7
|
+
|
8
|
+
def initialize(metric_prefix, jpd_url, username, apikey, token, common_jpd)
|
6
9
|
@metric_prefix = metric_prefix
|
7
10
|
@jpd_url = jpd_url
|
8
11
|
@username = username
|
9
12
|
@apikey = apikey
|
13
|
+
@token = token
|
14
|
+
@common_jpd = common_jpd
|
10
15
|
end
|
11
16
|
|
12
17
|
def get_metrics
|
@@ -19,22 +24,62 @@ class MetricsHelper
|
|
19
24
|
else
|
20
25
|
"#{@jpd_url}/artifactory/api/v1/metrics"
|
21
26
|
end
|
22
|
-
|
27
|
+
if !@token.nil? && @token != ''
|
28
|
+
execute_rest_call(url, @username, nil, @token, false, true)
|
29
|
+
elsif !@apikey.nil? && @apikey != ''
|
30
|
+
execute_rest_call(url, @username, @apikey, nil, false, false)
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
def get_additional_metrics
|
36
|
+
if (@metric_prefix == 'jfrog.artifactory' || @common_jpd == false) && !@token.nil? && @token != ''
|
37
|
+
puts 'Executing additional metrics collection'
|
38
|
+
url = "#{@jpd_url}/observability/api/v1/metrics"
|
39
|
+
check_endpoint(url, @token) if @@obs_endpoint_exists == nil? || !@@obs_endpoint_exists
|
40
|
+
execute_rest_call(url, @username, nil, @token, true, true) if @@obs_endpoint_exists
|
41
|
+
end
|
23
42
|
end
|
24
43
|
|
25
|
-
def
|
44
|
+
def check_endpoint(url, token)
|
26
45
|
response = RestClient::Request.new(
|
27
46
|
method: :get,
|
28
47
|
url: url,
|
29
|
-
|
30
|
-
password: password
|
48
|
+
headers: { Authorization: "Bearer #{token}" }
|
31
49
|
).execute do |response, request, result|
|
50
|
+
@@obs_endpoint_exists = true if response.code == 200
|
51
|
+
puts "#{url} exists? -> #{@@obs_endpoint_exists}, storing the result for next executions"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def execute_rest_call(url, user, password, token, ignore_exception, use_token)
|
56
|
+
request = if use_token == true
|
57
|
+
RestClient::Request.new(
|
58
|
+
method: :get,
|
59
|
+
url: url,
|
60
|
+
headers: { Authorization: "Bearer #{token}" }
|
61
|
+
)
|
62
|
+
else
|
63
|
+
RestClient::Request.new(
|
64
|
+
method: :get,
|
65
|
+
url: url,
|
66
|
+
user: user,
|
67
|
+
password: password
|
68
|
+
)
|
69
|
+
end
|
70
|
+
|
71
|
+
request.execute do |response, request, result|
|
32
72
|
case response.code
|
33
73
|
when 200
|
34
74
|
return response.body
|
35
75
|
else
|
36
|
-
|
76
|
+
if ignore_exception == true
|
77
|
+
return ''
|
78
|
+
else
|
79
|
+
raise Fluent::ConfigError, 'Cannot fetch #{@metric_prefix} metrics'
|
80
|
+
end
|
37
81
|
end
|
38
82
|
end
|
39
83
|
end
|
84
|
+
|
40
85
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-jfrog-metrics
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- MahithaB, VasukiN
|
8
|
-
autorequire:
|
7
|
+
- MahithaB, VasukiN, GiriR
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -72,10 +72,10 @@ dependencies:
|
|
72
72
|
- - "<"
|
73
73
|
- !ruby/object:Gem::Version
|
74
74
|
version: '2'
|
75
|
-
description: Fluentd Plugin for converting
|
76
|
-
|
75
|
+
description: Fluentd Plugin for converting JFrog Artifactory, Xray generated metrics
|
76
|
+
(Prometheus Exposition Format) to target observability platform format (Splunk HEC)
|
77
77
|
email:
|
78
|
-
-
|
78
|
+
- cpe-support@jfrog.com
|
79
79
|
executables: []
|
80
80
|
extensions: []
|
81
81
|
extra_rdoc_files: []
|
@@ -103,7 +103,7 @@ homepage: https://github.com/jfrog/jfrog-fluentd-plugins/tree/main/fluent-plugin
|
|
103
103
|
licenses:
|
104
104
|
- Apache-2.0
|
105
105
|
metadata: {}
|
106
|
-
post_install_message:
|
106
|
+
post_install_message:
|
107
107
|
rdoc_options: []
|
108
108
|
require_paths:
|
109
109
|
- lib
|
@@ -118,11 +118,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
118
|
- !ruby/object:Gem::Version
|
119
119
|
version: '0'
|
120
120
|
requirements: []
|
121
|
-
rubygems_version: 3.
|
122
|
-
signing_key:
|
121
|
+
rubygems_version: 3.1.6
|
122
|
+
signing_key:
|
123
123
|
specification_version: 4
|
124
|
-
summary: Fluentd Plugin for converting
|
125
|
-
|
124
|
+
summary: Fluentd Plugin for converting JFrog Artifactory, Xray generated metrics (Prometheus
|
125
|
+
Exposition Format) to target observability platform format (Splunk HEC)
|
126
126
|
test_files:
|
127
127
|
- spec/fixtures/files/creds.rb
|
128
128
|
- spec/fixtures/files/sample_artifactory_metrics.txt
|