comap 1.0.0.pre.a → 1.0.0
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/CHANGELOG.md +7 -0
- data/Gemfile.lock +1 -1
- data/README.md +85 -1
- data/Rakefile +5 -1
- data/lib/comap.rb +4 -4
- data/lib/comap/app.rb +3 -3
- data/lib/comap/version.rb +1 -1
- data/recipes/build_comap.rb +1 -1
- data/recipes/launch_comap.rb +2 -5
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8b23f9e291fe03872cb3ef03ff0f00f659d80aee08457bb1fdcd9cb4e7c0260a
|
4
|
+
data.tar.gz: 7b959111f7c9eef215b443cd67b3496e9a16527d7cbc64eddbf37cc66a71f3dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dcc368e24710b48e06ee5b7e66f478b45c84d604ce2e86b3b071847484d52d905968ce9719b9d43b2f4bd88c86cbf5bcd9ce80c1ebdccdc0738936e672d1cb9f
|
7
|
+
data.tar.gz: 7581d6850ee0b40422698b9e9a4b6278c5fe60cdd8489742d2cc3137ded4b06cac28c1353086b01ee91f0edb14ef67681a05cd473276b376de257bc933550629
|
data/CHANGELOG.md
ADDED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,21 @@
|
|
1
1
|
COMAP
|
2
2
|
=====
|
3
3
|
|
4
|
-
Container Orchestrator Metrics Aggregator for Prometheus
|
4
|
+
Container Orchestrator Metrics Aggregator for Prometheus.
|
5
|
+
|
6
|
+
COMAP aggregates prometheus-formatted metrics from different instances of a
|
7
|
+
service in a Docker containers cluster environment (swarm mode) using Docker
|
8
|
+
API for service containers discovery.
|
9
|
+
|
10
|
+
By design, a single COMAP instance should monitor a single service.
|
11
|
+
|
12
|
+
It is best used within a container belonging to the same network as the
|
13
|
+
services it follows.
|
14
|
+
|
15
|
+
A *container* label is added to each metric with the original container name.
|
16
|
+
|
17
|
+
Aggregated metrics intended to be fetched as a target by Prometheus are exposed
|
18
|
+
on port 9417.
|
5
19
|
|
6
20
|
Installation
|
7
21
|
------------
|
@@ -23,6 +37,76 @@ Or install it yourself as:
|
|
23
37
|
Usage
|
24
38
|
-----
|
25
39
|
|
40
|
+
Launch COMAP as a Swarm service, specifying the service (specified by
|
41
|
+
service\_name and its internal port) to follow.
|
42
|
+
|
43
|
+
It need to access the docker socket of a manager. For a small cluster
|
44
|
+
containing managers only, it is possible to mount the docker socket as volume.
|
45
|
+
In other (most) case, it is recommended to use tls connection.
|
46
|
+
|
47
|
+
```bash
|
48
|
+
sdir=/run/secrets docker service create \
|
49
|
+
--network your_network \
|
50
|
+
--publish '9397:9397' \
|
51
|
+
--secret cert.pem --secret key.pem --secret ca.pem \
|
52
|
+
makeorg/comap \
|
53
|
+
-H manager -p 2376 \
|
54
|
+
-s client_cert=$sdir/cert.pem,client_key=$sdir/key.pem,ca_file=$sdir/ca.pem \
|
55
|
+
-n your_network service_name:port
|
56
|
+
```
|
57
|
+
|
58
|
+
If standalone or within your docker image:
|
59
|
+
```bash
|
60
|
+
Usage: comap [options] swarm_service
|
61
|
+
-H, --docker_host HOST Docker Engine API Host
|
62
|
+
(default: http://127.0.0.1)
|
63
|
+
-p, --docker_port PORT Docker Engine API Port (default: 2375)
|
64
|
+
-s, --docker_ssl k1=v1,k2=v2 Docker Engine API SSL (default: none)
|
65
|
+
-n, --docker_network NETWORK Docker swarm service network (default: none)
|
66
|
+
-m, --metrics_path Metrics path (default: none)
|
67
|
+
-h, --help Display this screen
|
68
|
+
```
|
69
|
+
|
70
|
+
Quickstart
|
71
|
+
-------------
|
72
|
+
|
73
|
+
[Kitchen](https://kitchen.ci/) is currently used during development for test
|
74
|
+
purpose. However, the kitchen test suite can be set up if you just want to
|
75
|
+
quickly see COMAP running :
|
76
|
+
|
77
|
+
$ kitchen converge
|
78
|
+
|
79
|
+
That should brings up a functional docker-in-docker swarm environment with a
|
80
|
+
manager/worker and a stand-alone consul. Configuration is automatically
|
81
|
+
handled with Chef and some
|
82
|
+
[Chef Platform cookbooks](https://gitlab.com/chef-platform/).
|
83
|
+
|
84
|
+
$ kitchen login comap-swarm-manager-centos-7
|
85
|
+
|
86
|
+
You can now play with the services running in the swarm :
|
87
|
+
|
88
|
+
|
89
|
+
A metrics service with two replicas exposing prometheus-formatted metrics
|
90
|
+
on 5678 port
|
91
|
+
|
92
|
+
|
93
|
+
[root@comap-swarm-manager-centos-7 /]# curl localhost:5678
|
94
|
+
# TYPE metrics_sample_seconds gauge
|
95
|
+
metrics_sample_seconds 42
|
96
|
+
# TYPE metrics_sample_2_seconds gauge
|
97
|
+
metrics_sample_2_seconds 24
|
98
|
+
|
99
|
+
A single COMAP service exposing aggregated metrics from previous service
|
100
|
+
on 9397 port
|
101
|
+
|
102
|
+
[root@comap-swarm-manager-centos-7 /]# curl localhost:9397
|
103
|
+
# TYPE metrics_sample_seconds gauge
|
104
|
+
metrics_sample_seconds{container="metrics.1"} 42
|
105
|
+
metrics_sample_seconds{container="metrics.2"} 42
|
106
|
+
# TYPE metrics_sample_2_seconds gauge
|
107
|
+
metrics_sample_2_seconds{container="metrics.1"} 24
|
108
|
+
metrics_sample_2_seconds{container="metrics.2"} 24
|
109
|
+
|
26
110
|
Development
|
27
111
|
-----------
|
28
112
|
|
data/Rakefile
CHANGED
@@ -26,7 +26,11 @@ task default: :spec
|
|
26
26
|
desc 'Prepare files directory for kitchen tests'
|
27
27
|
task kitchen: :build do
|
28
28
|
mkdir_p('files')
|
29
|
-
|
29
|
+
version = if COMAP::VERSION.include?('-')
|
30
|
+
COMAP::VERSION.split('-').insert(1, 'pre').join('.')
|
31
|
+
else COMAP::VERSION
|
32
|
+
end
|
33
|
+
cp("pkg/comap-#{version}.gem", 'files/comap.gem', preserve: false)
|
30
34
|
cp('Dockerfile', 'files/.', preserve: false)
|
31
35
|
end
|
32
36
|
CLEAN.include('files', 'pkg')
|
data/lib/comap.rb
CHANGED
@@ -43,20 +43,20 @@ module COMAP
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def add_docker_ssl_option(opts)
|
46
|
-
desc =
|
46
|
+
desc = 'Docker Engine API SSL (default: none)'
|
47
47
|
help = '--docker_ssl k1=v1,k2=v2'
|
48
48
|
opts.on('-s', help, desc) { |v| @config[:docker_ssl] = v }
|
49
49
|
end
|
50
50
|
|
51
51
|
def add_network_option(opts)
|
52
|
-
desc =
|
52
|
+
desc = 'Docker swarm service network (default: none)'
|
53
53
|
help = '--docker_network NETWORK'
|
54
54
|
opts.on('-n', help, desc) { |v| @config[:network] = v }
|
55
55
|
end
|
56
56
|
|
57
57
|
def add_metrics_path_option(opts)
|
58
58
|
desc = "Metrics path (default: #{@config[:metrics_path]})"
|
59
|
-
help = '--metrics_path'
|
59
|
+
help = '--metrics_path METRICS_PATH'
|
60
60
|
opts.on('-m', help, desc) { |v| @config[:metrics_path] = v }
|
61
61
|
end
|
62
62
|
|
@@ -93,7 +93,7 @@ module COMAP
|
|
93
93
|
}
|
94
94
|
parse_opts
|
95
95
|
app = COMAP::App.new(@config)
|
96
|
-
Rack::Server.start(app: app, Host: '0.0.0.0', Port:
|
96
|
+
Rack::Server.start(app: app, Host: '0.0.0.0', Port: 9397)
|
97
97
|
end
|
98
98
|
end
|
99
99
|
# rubocop:enable Metrics/MethodLength
|
data/lib/comap/app.rb
CHANGED
@@ -71,7 +71,7 @@ module COMAP
|
|
71
71
|
data.lines.each_with_object({}) do |value, hash|
|
72
72
|
next hash[value] = nil if value.start_with?('#')
|
73
73
|
(hash[hash.keys.last] ||= []) << add_label(value, "#{service}.#{slot}")
|
74
|
-
end
|
74
|
+
end.compact
|
75
75
|
end
|
76
76
|
|
77
77
|
def scrape_metrics(url, service)
|
@@ -85,7 +85,7 @@ module COMAP
|
|
85
85
|
|
86
86
|
def add_label(line, label)
|
87
87
|
replace = %(container="#{label}")
|
88
|
-
line.
|
88
|
+
line.sub(/ /, "{#{replace}} ").sub(/}{/, ',')
|
89
89
|
end
|
90
90
|
|
91
91
|
def containers(service)
|
@@ -103,7 +103,7 @@ module COMAP
|
|
103
103
|
'desired-state' => { 'running' => true }
|
104
104
|
}
|
105
105
|
@client.call('tasks', filters).keep_if do |task|
|
106
|
-
task['Status']['State'] == 'running'
|
106
|
+
task['Status']['State'] == 'running' if task.is_a?(Hash)
|
107
107
|
end
|
108
108
|
end
|
109
109
|
|
data/lib/comap/version.rb
CHANGED
data/recipes/build_comap.rb
CHANGED
data/recipes/launch_comap.rb
CHANGED
@@ -44,23 +44,20 @@ end
|
|
44
44
|
|
45
45
|
server = 'https://comap-swarm-manager-centos-7'
|
46
46
|
ssl = {
|
47
|
-
'verify' => false, # https://github.com/berkshelf/berkshelf/issues/1458
|
48
47
|
'client_cert' => '/run/secrets/cert.pem',
|
49
48
|
'client_key' => '/run/secrets/key.pem',
|
50
49
|
'ca_file' => '/run/secrets/ca.pem'
|
51
50
|
}
|
52
51
|
ssl_opt = ssl.map { |k, v| "#{k}=#{v}" }.join(',')
|
53
|
-
puts "-H #{server} -p 2376 -s #{ssl_opt} -n kitchen metrics:5678"
|
54
52
|
|
55
|
-
# TODO: give options as an array in docker-platform
|
56
53
|
docker_platform_service 'comap' do
|
57
54
|
options(
|
58
55
|
mode: 'replicated',
|
59
56
|
network: 'kitchen',
|
60
|
-
publish: '
|
57
|
+
publish: '9397:9397',
|
61
58
|
secret: %w[cert.pem key.pem ca.pem]
|
62
59
|
)
|
63
|
-
image 'makeorg/comap'
|
60
|
+
image 'makeorg/comap-for-kitchen-test'
|
64
61
|
command "-H #{server} -p 2376 -s #{ssl_opt} -n kitchen metrics:5678"
|
65
62
|
action :create
|
66
63
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: comap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sylvain Arrambourg
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-02-
|
12
|
+
date: 2018-02-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -138,6 +138,7 @@ files:
|
|
138
138
|
- ".ruby-version"
|
139
139
|
- ".travis.yml"
|
140
140
|
- Berksfile
|
141
|
+
- CHANGELOG.md
|
141
142
|
- CONTRIBUTING.md
|
142
143
|
- Dockerfile
|
143
144
|
- Gemfile
|
@@ -171,9 +172,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
171
172
|
version: '0'
|
172
173
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
173
174
|
requirements:
|
174
|
-
- - "
|
175
|
+
- - ">="
|
175
176
|
- !ruby/object:Gem::Version
|
176
|
-
version:
|
177
|
+
version: '0'
|
177
178
|
requirements: []
|
178
179
|
rubyforge_project:
|
179
180
|
rubygems_version: 2.7.3
|