prometheus-config-builder 0.0.23 → 0.0.24
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/prometheus-config-builder/scrape_ecs.rb +57 -13
- data/prometheus-config-builder.gemspec +1 -1
- data/test/configdiscovery.rb +6 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d2392214707785f6cec2a5975bb50bb8e24aba5e
|
4
|
+
data.tar.gz: c29b371d512400b7fd46b15380661644086d3240
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6faeb1c97c1957c54a9c6e7c549d6dd57bc88e4c306c6a750e39f77c2948e7e62672996a6d41343576e2cf4d158954e05ded3f1ac92e51e64c12dd74080613ef
|
7
|
+
data.tar.gz: df4322978d2d8bf3bb7563e6f8e9603fe92f771bf31777aa59aa032a0269e173fb6cb9d411ea53328991145b8180f68197398ff6e65fc0c38226cc706a222b8a
|
@@ -6,6 +6,46 @@ module PrometheusConfigBuilder
|
|
6
6
|
class ScrapeConfigECS
|
7
7
|
extend PrometheusConfigBuilderLogger
|
8
8
|
|
9
|
+
# Map of different roles to ecs clients. use get_client() to obtain them
|
10
|
+
@@ecs = {}
|
11
|
+
|
12
|
+
def self.get_client(region, assume_role=nil)
|
13
|
+
|
14
|
+
name = "default"
|
15
|
+
|
16
|
+
if assume_role == nil
|
17
|
+
client = @@ecs[name]
|
18
|
+
if client == nil
|
19
|
+
client = Aws::ECS::Client.new({
|
20
|
+
region: region
|
21
|
+
})
|
22
|
+
@@ecs[name] = client
|
23
|
+
end
|
24
|
+
return client
|
25
|
+
end
|
26
|
+
|
27
|
+
role_arn = assume_role["role_arn"]
|
28
|
+
if !role_arn
|
29
|
+
raise ArgumentError.new("role_arn not found inside assume_role config structure")
|
30
|
+
end
|
31
|
+
role_session_name = (assume_role["role_session_name"] or "prometheus-scrape-ecs")
|
32
|
+
|
33
|
+
name = region + "/" + role_arn + "/" + role_session_name
|
34
|
+
|
35
|
+
logger.info("Using sts:AssumeRole on #{role_arn}")
|
36
|
+
role_credentials = Aws::AssumeRoleCredentials.new(
|
37
|
+
client: Aws::STS::Client.new({
|
38
|
+
region: region
|
39
|
+
}),
|
40
|
+
role_arn: role_arn,
|
41
|
+
role_session_name: role_session_name
|
42
|
+
)
|
43
|
+
|
44
|
+
client = Aws::ECS::Client.new(credentials: role_credentials)
|
45
|
+
@@ecs[name] = client
|
46
|
+
return client
|
47
|
+
end
|
48
|
+
|
9
49
|
def self.handle(basename, config, dst_prefix)
|
10
50
|
|
11
51
|
x = $VERBOSE
|
@@ -15,15 +55,21 @@ module PrometheusConfigBuilder
|
|
15
55
|
if !config["region"]
|
16
56
|
logger.warn("File #{basename}: the scrape_configs of type:ecs-tasks doesn't have \"region\" field set. Ignoring!")
|
17
57
|
return nil
|
58
|
+
end
|
59
|
+
|
60
|
+
region = (config["region"] or "us-east-1")
|
61
|
+
assume_role = config["assume_role"]
|
18
62
|
|
63
|
+
begin
|
64
|
+
client = get_client(region, assume_role)
|
65
|
+
rescue ArgumentError => e
|
66
|
+
logger.warn("File #{basename}: the scrape_configs of type:ecs-tasks had invalid arguments: #{e}")
|
67
|
+
return nil
|
19
68
|
end
|
20
69
|
|
21
|
-
@@ecs = Aws::ECS::Client.new({
|
22
|
-
region:config["region"]
|
23
|
-
})
|
24
70
|
$VERBOSE = x
|
25
|
-
tasks = get_tasks(config["cluster"], config["service"])
|
26
|
-
endpoints = get_task_endpoints(config["cluster"], tasks, config["labels"], config["metrics_port"])
|
71
|
+
tasks = get_tasks(client, config["cluster"], config["service"])
|
72
|
+
endpoints = get_task_endpoints(client, config["cluster"], tasks, config["labels"], config["metrics_port"])
|
27
73
|
|
28
74
|
if !config["job_name"]
|
29
75
|
logger.warn("File #{basename}: the scrape_configs of type:ecs-tasks doesn't have \"job_name\" field set. Ignoring!")
|
@@ -31,8 +77,8 @@ module PrometheusConfigBuilder
|
|
31
77
|
end
|
32
78
|
|
33
79
|
file = File.expand_path(dst_prefix + "_" + config["job_name"] + ".json")
|
34
|
-
File.open(file, "w") do |
|
35
|
-
|
80
|
+
File.open(file, "w") do |f|
|
81
|
+
f.write(endpoints.to_json)
|
36
82
|
end
|
37
83
|
|
38
84
|
# Make copy of the settings and remove our custom properties from it.
|
@@ -54,7 +100,7 @@ module PrometheusConfigBuilder
|
|
54
100
|
return settings
|
55
101
|
end
|
56
102
|
|
57
|
-
def self.get_tasks(cluster, service_name)
|
103
|
+
def self.get_tasks(client, cluster, service_name)
|
58
104
|
tasks = []
|
59
105
|
last_result = Aws::ECS::Types::ListTasksResponse.new
|
60
106
|
last_result.next_token = nil
|
@@ -65,7 +111,7 @@ module PrometheusConfigBuilder
|
|
65
111
|
service_name: service_name,
|
66
112
|
next_token: last_result.next_token
|
67
113
|
}
|
68
|
-
last_result =
|
114
|
+
last_result = client.list_tasks(options)
|
69
115
|
if last_result && last_result.task_arns
|
70
116
|
tasks.push(*last_result.task_arns)
|
71
117
|
end
|
@@ -80,7 +126,7 @@ module PrometheusConfigBuilder
|
|
80
126
|
return tasks
|
81
127
|
end
|
82
128
|
|
83
|
-
def self.get_task_endpoints(cluster, tasks, common_labels, metrics_port)
|
129
|
+
def self.get_task_endpoints(client, cluster, tasks, common_labels, metrics_port)
|
84
130
|
endpoints = []
|
85
131
|
if tasks.length == 0
|
86
132
|
return []
|
@@ -93,7 +139,7 @@ module PrometheusConfigBuilder
|
|
93
139
|
cluster: cluster,
|
94
140
|
tasks: task_chunk,
|
95
141
|
}
|
96
|
-
result =
|
142
|
+
result = client.describe_tasks(options)
|
97
143
|
if result && result.tasks
|
98
144
|
result.tasks.each do |task|
|
99
145
|
# FIXME: This assumes somewhat on the ip structure.
|
@@ -126,7 +172,5 @@ module PrometheusConfigBuilder
|
|
126
172
|
return endpoints
|
127
173
|
end
|
128
174
|
|
129
|
-
|
130
|
-
|
131
175
|
end
|
132
176
|
end
|
data/test/configdiscovery.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prometheus-config-builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.24
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Juho Mäkinen juho.makinen@gmail.com
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-02-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|