sensu-plugins-docker 1.3.1 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2a3931242d5ca4fe8b09b7aab0074f9e12ea485b
4
- data.tar.gz: 57f1c0887909436b3b29268b14f42e4b2cd416b7
3
+ metadata.gz: 0a0c669db204f3d8f22810459efda23ae2deb92e
4
+ data.tar.gz: cc6319e61a7c19d261ab14a3c368173b6a428f60
5
5
  SHA512:
6
- metadata.gz: 70317898990a8b5da33505d5eed11ef56989dc4d149d3cd0f9bc1d3395a0ab78a64cf8f96c1ce3c1d52bc8b4b02a72bf4770926d14096e23e8c0e80d51996b6e
7
- data.tar.gz: 5e4abf0bad63eb81dd88e87b87521ff3f6b3e12fd3bb8c7289bf6e2b5ad4c6f3efcccfb67685e635f32a0e191693418dacae2503ac7fb34ef3266dcda8e77261
6
+ metadata.gz: a8290f04f055c64d86316f0cb2a1739a26ef1b078b0384a53fae609d96aa6f93d82ab412ab1f3549d4cca7089db9ce1423d26e78bd26d9ec2261ea04a74d522a
7
+ data.tar.gz: 28d541dee490616f29e48ff003aac8c77e2b849a8a3c75d7a3f21e10fd642b488e9e570c786934ce2a422cc0312d6cddeff6350adab4dca31d55c83896fbbc3c
@@ -1,10 +1,18 @@
1
- #Change Log
1
+ # Change Log
2
2
  This project adheres to [Semantic Versioning](http://semver.org/).
3
3
 
4
4
  This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachangelog.com/)
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [1.4.0] - 2017-08-08
9
+ ### Added
10
+ - metrics-docker-info.rb: general information metrics from docker (@alcasim)
11
+ - metrics-docker-stats.rb: Added to include environment variables values as part of the metric. Added I/O stats option (@alcasim)
12
+
13
+ ### Added
14
+ - Ruby 2.4.1 testing
15
+
8
16
  ## [1.3.1] - 2017-06-12
9
17
  ### Fixed
10
18
  - check-container.rb: fixes to work with docker >= 1.17 (@israelriibeiro)
@@ -88,7 +96,8 @@ changes some options. Review your check commands before deploying this version.
88
96
  ### Added
89
97
  - initial release
90
98
 
91
- [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-docker/compare/1.3.1...HEAD
99
+ [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-docker/compare/1.4.0...HEAD
100
+ [1.4.0]: https://github.com/sensu-plugins/sensu-plugins-docker/compare/1.3.1...1.4.0
92
101
  [1.3.1]: https://github.com/sensu-plugins/sensu-plugins-docker/compare/1.3.0...1.3.1
93
102
  [1.3.0]: https://github.com/sensu-plugins/sensu-plugins-docker/compare/1.2.0...1.3.0
94
103
  [1.2.0]: https://github.com/sensu-plugins/sensu-plugins-docker/compare/1.1.5...1.2.0
data/README.md CHANGED
@@ -15,6 +15,7 @@ This check supports docker versions >= 1.18. Check docker-engine API for more in
15
15
  * check-docker-container.rb
16
16
  * metrics-docker-container.rb
17
17
  * metrics-docker-stats.rb
18
+ * metrics-docker-info.rb
18
19
 
19
20
  ## Usage
20
21
 
@@ -0,0 +1,91 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # metrics-docker-info
4
+ #
5
+ # DESCRIPTION:
6
+ #
7
+ # This check gather certain general stats from Docker (number of CPUs, number of containers, images...)
8
+ # Supports the stats feature of the docker remote api ( docker server 1.5 and newer )
9
+ # Supports connecting to docker remote API over Unix socket or TCP
10
+ # Based on metrics-docker-stats by @paulczar
11
+ #
12
+ #
13
+ # OUTPUT:
14
+ # metric-data
15
+ #
16
+ # PLATFORMS:
17
+ # Linux
18
+ #
19
+ # DEPENDENCIES:
20
+ # gem: sensu-plugin
21
+ #
22
+ # USAGE:
23
+ # Gather stats using unix socket:
24
+ # metrics-docker-info.rb -p unix -H /var/run/docker.sock
25
+ #
26
+ # Gather stats from localhost using TCP:
27
+ # metrics-docker-info.rb -p http -H localhost:2375
28
+ #
29
+ # See metrics-docker-info.rb --help for full usage flags
30
+ #
31
+ # NOTES:
32
+ #
33
+ # LICENSE:
34
+ # Copyright 2017 Alfonso Casimiro. Github @alcasim
35
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
36
+ # for details.
37
+ #
38
+
39
+ require 'sensu-plugin/metric/cli'
40
+ require 'socket'
41
+ require 'net_http_unix'
42
+ require 'json'
43
+
44
+ class DockerStatsMetrics < Sensu::Plugin::Metric::CLI::Graphite
45
+ option :scheme,
46
+ description: 'Metric naming scheme, text to prepend to metric',
47
+ short: '-s SCHEME',
48
+ long: '--scheme SCHEME',
49
+ default: "#{Socket.gethostname}.docker"
50
+
51
+ option :docker_host,
52
+ description: 'Docker socket to connect. TCP: "host:port" or Unix: "/path/to/docker.sock" (default: "127.0.0.1:2375")',
53
+ short: '-H DOCKER_HOST',
54
+ long: '--docker-host DOCKER_HOST',
55
+ default: '/var/run/docker.sock'
56
+
57
+ option :docker_protocol,
58
+ description: 'http or unix',
59
+ short: '-p PROTOCOL',
60
+ long: '--protocol PROTOCOL',
61
+ default: 'unix'
62
+
63
+ def run
64
+ @timestamp = Time.now.to_i
65
+ path = 'info'
66
+ infolist = docker_api(path)
67
+ filtered_list = infolist.select { |key, _value| key.match(/NCPU|NFd|Containers|Images|NGoroutines|NEventsListener|MemTotal/) }
68
+ filtered_list.each do |key, value|
69
+ output "#{config[:scheme]}.#{key}", value, @timestamp
70
+ end
71
+ ok
72
+ end
73
+
74
+ def docker_api(path)
75
+ if config[:docker_protocol] == 'unix'
76
+ session = NetX::HTTPUnix.new("unix://#{config[:docker_host]}")
77
+ request = Net::HTTP::Get.new "/#{path}"
78
+ else
79
+ uri = URI("#{config[:docker_protocol]}://#{config[:docker_host]}/#{path}")
80
+ session = Net::HTTP.new(uri.host, uri.port)
81
+ request = Net::HTTP::Get.new uri.request_uri
82
+ end
83
+
84
+ session.start do |http|
85
+ http.request request do |response|
86
+ response.value
87
+ return JSON.parse(response.read_body)
88
+ end
89
+ end
90
+ end
91
+ end
@@ -99,6 +99,18 @@ class DockerStatsMetrics < Sensu::Plugin::Metric::CLI::Graphite
99
99
  long: '--deliminator',
100
100
  default: '-'
101
101
 
102
+ option :environment_tags,
103
+ description: 'Name of environment variables on each container to be appended to metric name, separated by commas',
104
+ short: '-e ENVIRONMENT_VARIABLES',
105
+ long: '--environment-tags ENVIRONMENT_VARIABLES'
106
+
107
+ option :ioinfo,
108
+ description: 'enable IO Docker metrics',
109
+ short: '-i',
110
+ long: '--ioinfo',
111
+ boolean: true,
112
+ default: false
113
+
102
114
  def run
103
115
  @timestamp = Time.now.to_i
104
116
 
@@ -109,14 +121,17 @@ class DockerStatsMetrics < Sensu::Plugin::Metric::CLI::Graphite
109
121
  end
110
122
  list.each do |container|
111
123
  stats = container_stats(container)
124
+ scheme = ''
125
+ unless config[:environment_tags].nil?
126
+ scheme << container_tags(container)
127
+ end
112
128
  if config[:name_parts]
113
- scheme = ''
114
129
  config[:name_parts].split(',').each do |key|
115
130
  scheme << '.' unless scheme == ''
116
131
  scheme << container.split(config[:delim])[key.to_i]
117
132
  end
118
133
  else
119
- scheme = container
134
+ scheme << container
120
135
  end
121
136
  output_stats(scheme, stats)
122
137
  end
@@ -130,6 +145,11 @@ class DockerStatsMetrics < Sensu::Plugin::Metric::CLI::Graphite
130
145
  next if value.is_a?(Array)
131
146
  output "#{config[:scheme]}.#{container}.#{key}", value, @timestamp
132
147
  end
148
+ if config[:ioinfo]
149
+ blkio_stats(stats['blkio_stats']).each do |key, value|
150
+ output "#{config[:scheme]}.#{container}.#{key}", value, @timestamp
151
+ end
152
+ end
133
153
  end
134
154
 
135
155
  def docker_api(path)
@@ -171,4 +191,25 @@ class DockerStatsMetrics < Sensu::Plugin::Metric::CLI::Graphite
171
191
  path = "containers/#{container}/stats?stream=0"
172
192
  @stats = docker_api(path)
173
193
  end
194
+
195
+ def container_tags(container)
196
+ tags = ''
197
+ path = "containers/#{container}/json"
198
+ @inspect = docker_api(path)
199
+ tag_list = config[:environment_tags].split(',')
200
+ tag_list.each do |value|
201
+ tags << @inspect['Config']['Env'].select { |tag| tag.to_s.match(/#{value}=/) }.first.gsub(/#{value}=/, '') + '.'
202
+ end
203
+ tags
204
+ end
205
+
206
+ def blkio_stats(io_stats)
207
+ stats_out = {}
208
+ io_stats.each do |stats_type, stats_vals|
209
+ stats_vals.each do |value|
210
+ stats_out["#{stats_type}.#{value['op']}.#{value['major']}.#{value['minor']}"] = value['value']
211
+ end
212
+ end
213
+ stats_out
214
+ end
174
215
  end
@@ -1,8 +1,8 @@
1
1
  module SensuPluginsDocker
2
2
  module Version
3
3
  MAJOR = 1
4
- MINOR = 3
5
- PATCH = 1
4
+ MINOR = 4
5
+ PATCH = 0
6
6
 
7
7
  VER_STRING = [MAJOR, MINOR, PATCH].compact.join('.')
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu-plugins-docker
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sensu-Plugins and contributors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-13 00:00:00.000000000 Z
11
+ date: 2017-08-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: docker-api
@@ -201,6 +201,7 @@ email: "<sensu-users@googlegroups.com>"
201
201
  executables:
202
202
  - check-container-logs.rb
203
203
  - metrics-docker-container.rb
204
+ - metrics-docker-info.rb
204
205
  - metrics-docker-stats.rb
205
206
  - check-container.rb
206
207
  - check-docker-container.rb
@@ -214,6 +215,7 @@ files:
214
215
  - bin/check-container.rb
215
216
  - bin/check-docker-container.rb
216
217
  - bin/metrics-docker-container.rb
218
+ - bin/metrics-docker-info.rb
217
219
  - bin/metrics-docker-stats.rb
218
220
  - lib/sensu-plugins-docker.rb
219
221
  - lib/sensu-plugins-docker/client_helpers.rb