prometheus-config-builder 0.0.39 → 0.0.41
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/README.md +6 -0
- data/bin/prometheus-config-builder +27 -1
- data/lib/prometheus-config-builder/prometheus-config-builder.rb +25 -5
- data/prometheus-config-builder.gemspec +3 -1
- metadata +37 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3574ad59107c1c4fc456b503ff1bc457910fc03726415ac13a6e2c0758dff438
|
4
|
+
data.tar.gz: 46a9834fa8b808557b034494509af311492beb3b187f253fe6f6bc285e3d5058
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 758050db5fa1ae8674fce4edeb778024f33e345240359b9ca8de5cb5b04a30b12a3c96fb6f35469425fcb22204523841e52f1d6e263531d9e6546f1f395c72b3
|
7
|
+
data.tar.gz: 1114ab1112acfeac569b950c939b1c9627783aeb3222380e88aa02b0fb3591d5d0dab4ef928acb4fb606d188063cdae30563403319b5f1fe915d41e8fb985096
|
data/README.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
## Making changes.
|
2
|
+
|
3
|
+
The `master` banch lives in git.supercell.com/services/prometheus-config-builder and is mirrored as read-only branch to github.com/supercell/prometheus-config-builder
|
4
|
+
|
5
|
+
The releases must be done by juho.arenius as the public gem is under his account.
|
6
|
+
|
1
7
|
|
2
8
|
## Description
|
3
9
|
|
@@ -7,6 +7,7 @@ require 'optparse'
|
|
7
7
|
require 'pp'
|
8
8
|
require 'yaml'
|
9
9
|
require 'json'
|
10
|
+
require 'httparty'
|
10
11
|
require 'prometheus_exporter'
|
11
12
|
require 'prometheus_exporter/client'
|
12
13
|
require 'prometheus_exporter/server'
|
@@ -18,6 +19,7 @@ require 'prometheus-config-builder'
|
|
18
19
|
|
19
20
|
config = {}
|
20
21
|
config[:paths] ||= []
|
22
|
+
config[:bucket_region] ||= ''
|
21
23
|
config[:root] ||= 'test/data'
|
22
24
|
config[:every] = 60
|
23
25
|
config[:pgrep] = nil
|
@@ -34,6 +36,9 @@ op = OptionParser.new do |o|
|
|
34
36
|
o.on('--path=[PATH]', 'Directory or S3 location for individual config yaml files. Can be set multiple times') do |arg|
|
35
37
|
config[:paths] << arg
|
36
38
|
end
|
39
|
+
o.on('--bucket_region=[BUCKET_REGION]', 'Ther region where the s3 bucket exists') do |arg|
|
40
|
+
config[:bucket_region] << arg
|
41
|
+
end
|
37
42
|
o.on('--http PORT', Integer,
|
38
43
|
'Port to listen on for http for Prometheus /metrics api') do |port|
|
39
44
|
abort 'Invalid port' if port < 1 || port > 65535
|
@@ -48,6 +53,9 @@ op = OptionParser.new do |o|
|
|
48
53
|
o.on('--pgrep=[string]', 'pgrep -f [string] for finding Prometheus process for SIGHUP') do |str|
|
49
54
|
config[:pgrep] = str
|
50
55
|
end
|
56
|
+
o.on('--reload-url=[string]', 'Prometheus config reload endpoint') do |str|
|
57
|
+
config[:reload_url] = str
|
58
|
+
end
|
51
59
|
o.on('--addlog=[FILE]', 'addlog -f [FILE] Log additionally to this file') do |str|
|
52
60
|
config[:addlog] = str
|
53
61
|
end
|
@@ -60,6 +68,7 @@ end
|
|
60
68
|
|
61
69
|
abort "You need to set --prometheus-src" if !config[:prometheus_src]
|
62
70
|
abort "You need to set --dst-dir" if !config[:dst_dir]
|
71
|
+
abort "You need to set either --pgrep or --reload-url, not both" if config[:pgrep] && config[:reload_url]
|
63
72
|
|
64
73
|
if config[:addlog]
|
65
74
|
filelog = File.open(config[:addlog], 'w')
|
@@ -98,7 +107,7 @@ config[:paths].each do |path|
|
|
98
107
|
log.info("Adding path #{path} to config discovery list")
|
99
108
|
builder.add_path(path)
|
100
109
|
end
|
101
|
-
|
110
|
+
builder.add_bucket_region(config[:bucket_region])
|
102
111
|
|
103
112
|
loop do
|
104
113
|
starting = Time.now
|
@@ -133,8 +142,25 @@ loop do
|
|
133
142
|
rescue Exception => e
|
134
143
|
log.warn("Unable to send SIGHUP signal to Prometheus: #{e}")
|
135
144
|
puts e.backtrace
|
145
|
+
error_count.increment
|
136
146
|
end
|
137
147
|
|
148
|
+
begin
|
149
|
+
if something_changed && config[:reload_url] != nil
|
150
|
+
log.info("Sending reload request to Prometheus at #{config[:reload_url]}")
|
151
|
+
response = HTTParty.post(config[:reload_url])
|
152
|
+
|
153
|
+
if response.code != 200
|
154
|
+
log.warn("Prometheus returned #{response.code} when reloading config. Response body: #{response.body}")
|
155
|
+
error_count.increment
|
156
|
+
end
|
157
|
+
end
|
158
|
+
rescue HTTParty::Error => e
|
159
|
+
log.warn("Unable to send reload request to Prometheus: #{e}")
|
160
|
+
puts e.backtrace
|
161
|
+
error_count.increment
|
162
|
+
end
|
163
|
+
|
138
164
|
log.info("Sleeping for #{config[:every]} second and starting then again.")
|
139
165
|
if log.level == Logger::INFO
|
140
166
|
log.info("Setting log level to WARN for the rest of the program execution. Use -v to overwrite this.")
|
@@ -72,6 +72,11 @@ module PrometheusConfigBuilder
|
|
72
72
|
def get_scrape_configs(dst_prefix)
|
73
73
|
configs = []
|
74
74
|
|
75
|
+
if !@data.key?('scrape_configs')
|
76
|
+
logger.debug("File #{dst_prefix} does not contain any scrape configs.")
|
77
|
+
return []
|
78
|
+
end
|
79
|
+
|
75
80
|
@data['scrape_configs'].each do |config|
|
76
81
|
case config["type"]
|
77
82
|
when "passthrough"
|
@@ -103,7 +108,7 @@ module PrometheusConfigBuilder
|
|
103
108
|
|
104
109
|
class ConfigDiscover
|
105
110
|
include PrometheusConfigBuilderLogger
|
106
|
-
def discover(glob)
|
111
|
+
def discover(glob, bucket_region)
|
107
112
|
|
108
113
|
files = []
|
109
114
|
if m = glob.match(/s3:\/\/([^\/]+)\/(.*)/)
|
@@ -113,7 +118,13 @@ module PrometheusConfigBuilder
|
|
113
118
|
x = $VERBOSE
|
114
119
|
$VERBOSE = nil
|
115
120
|
require 'aws-sdk'
|
116
|
-
s3 =
|
121
|
+
s3 = nil
|
122
|
+
if !bucket_region.empty?
|
123
|
+
logger.debug("bucket_region set as >#{bucket_region}<")
|
124
|
+
s3 = Aws::S3::Client.new(region: bucket_region)
|
125
|
+
else
|
126
|
+
s3 = Aws::S3::Client.new
|
127
|
+
end
|
117
128
|
$VERBOSE = x
|
118
129
|
key = []
|
119
130
|
resp = s3.list_objects_v2({
|
@@ -210,8 +221,11 @@ module PrometheusConfigBuilder
|
|
210
221
|
labels[:runbook_url] = file.runbook_url if file.runbook_url
|
211
222
|
begin
|
212
223
|
configs = file.get_scrape_configs(scrape_files_dir + "/" + File.basename(file.basename, ".*"))
|
213
|
-
|
214
|
-
|
224
|
+
if configs.length > 0
|
225
|
+
puts "Generated data for file #{scrape_files_dir + "/" + File.basename(file.basename, ".*")}"
|
226
|
+
data["scrape_configs"].push(*configs)
|
227
|
+
$config_file_status.observe(1, labels)
|
228
|
+
end
|
215
229
|
rescue Exception => e
|
216
230
|
logger.error("Unable to get scrape configs correctly from file #{file.source}. Error: #{e}")
|
217
231
|
$config_file_status.observe(0, labels)
|
@@ -252,6 +266,7 @@ module PrometheusConfigBuilder
|
|
252
266
|
|
253
267
|
@discoverer = ConfigDiscover.new
|
254
268
|
@paths = []
|
269
|
+
@bucket_region = ""
|
255
270
|
@last_hash = ""
|
256
271
|
|
257
272
|
@@config_files = PrometheusExporter::Client.default.register(:gauge, "prometheusconfigbuilder_config_files", "Number of found config files")
|
@@ -262,12 +277,17 @@ module PrometheusConfigBuilder
|
|
262
277
|
@paths << path
|
263
278
|
end
|
264
279
|
|
280
|
+
def add_bucket_region(bucket_region)
|
281
|
+
@bucket_region << bucket_region
|
282
|
+
end
|
283
|
+
|
265
284
|
def write_out
|
266
285
|
hash = ""
|
267
286
|
cfs = ConfigFiles.new(@prometheus_src)
|
287
|
+
bucket_region = @bucket_region
|
268
288
|
files = []
|
269
289
|
@paths.each do |path|
|
270
|
-
found_files = @discoverer.discover(path)
|
290
|
+
found_files = @discoverer.discover(path, bucket_region)
|
271
291
|
logger.info("Found #{found_files.length} files from path #{path}")
|
272
292
|
files.push(*found_files)
|
273
293
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = 'prometheus-config-builder'
|
6
|
-
s.version = '0.0.
|
6
|
+
s.version = '0.0.41'
|
7
7
|
s.date = Time.now
|
8
8
|
|
9
9
|
s.summary = %q{Template based config generation}
|
@@ -16,11 +16,13 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.required_ruby_version = '>= 2.0.0'
|
17
17
|
|
18
18
|
s.add_dependency 'aws-sdk', '~> 3'
|
19
|
+
s.add_dependency 'httparty', '~> 0.17.3'
|
19
20
|
s.add_dependency 'prometheus_exporter', '>= 0.4.13'
|
20
21
|
|
21
22
|
s.add_development_dependency 'rubygems-tasks', '~> 0.2'
|
22
23
|
s.add_development_dependency 'minitest', '~> 5.4'
|
23
24
|
s.add_development_dependency 'minitest-reporters'
|
24
25
|
s.add_development_dependency 'rake', '~> 12.3.3'
|
26
|
+
s.add_development_dependency 'yard', '~> 0.9.5'
|
25
27
|
|
26
28
|
end
|
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.41
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Juho Mäkinen juho.makinen@gmail.com
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-05-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: httparty
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.17.3
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.17.3
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: prometheus_exporter
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,8 +108,22 @@ dependencies:
|
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: 12.3.3
|
97
|
-
|
98
|
-
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: yard
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 0.9.5
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 0.9.5
|
125
|
+
description:
|
126
|
+
email:
|
99
127
|
executables:
|
100
128
|
- prometheus-config-builder
|
101
129
|
extensions: []
|
@@ -118,10 +146,10 @@ files:
|
|
118
146
|
- test/data/test1.yaml
|
119
147
|
- test/data/test2.yaml
|
120
148
|
- test/test_helper.rb
|
121
|
-
homepage:
|
149
|
+
homepage:
|
122
150
|
licenses: []
|
123
151
|
metadata: {}
|
124
|
-
post_install_message:
|
152
|
+
post_install_message:
|
125
153
|
rdoc_options: []
|
126
154
|
require_paths:
|
127
155
|
- lib
|
@@ -136,8 +164,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
136
164
|
- !ruby/object:Gem::Version
|
137
165
|
version: '0'
|
138
166
|
requirements: []
|
139
|
-
rubygems_version: 3.3.
|
140
|
-
signing_key:
|
167
|
+
rubygems_version: 3.0.3.1
|
168
|
+
signing_key:
|
141
169
|
specification_version: 4
|
142
170
|
summary: Template based config generation
|
143
171
|
test_files:
|