sensu-plugins-elasticsearch 0.2.0 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 688a6c3a44c0b90345fcfb6d3a4e557300ecc2ed
4
- data.tar.gz: fcc7ae8b297550825127dd780ac5311785ba5aa9
3
+ metadata.gz: df9596b9f751d85dd0f774ad4d356b41dfa3cb16
4
+ data.tar.gz: 80c0c997e2b2cf195e3062794e5c19c1d8175c4b
5
5
  SHA512:
6
- metadata.gz: 4a904263acfbd9efa5749f33375b18de707800711bff06644b0913fc5ae9e1ea3f61bad2a7f6e90f3f37d7a3ee3305eb572f759856fb3c60972f940dd4f105dd
7
- data.tar.gz: 521346128d10b9fe848100f96584174c86976b3f907cffcf0d77e083f6f518769dbf0da9be6ab2e93fd168ef4076967df9500fddc5ac39032f2ffdc9439deabb
6
+ metadata.gz: 042ccabd49cc993b4d114bd8e287b3a534f493c83067fe7f6274517a42f867ae248fb82480741c5455388e6ace45f626c0726b5a7e89e3148935ecf69a773f4f
7
+ data.tar.gz: db0f1701b0f3a1008b5a9d1cc319967351c5e86906d6683a8a7a964d9fef8362e8e36a3dfb81054c6895532ec6944e7550823953269b7a53a9a791de6e8931cf
Binary file
data.tar.gz.sig CHANGED
@@ -1,2 +1 @@
1
- 8H e�1M��h<��(z3�[к��Xms�+R%��G��+\�OZ�,$1ov���"j_�ۛ�߇E琧�PQ��ka�۱��?V�.۽�G�pt���kX(Qf8��.}t.���u-�KOcv�lghtK,��H��U��u
2
- � -����/������X��z%���h1vF�A^oD�t�ӓ
1
+ K��rv��\�&a^��h�D���O2����X�t��G������qө��IN3�'S���C���Ό�n�����ň Eb#�����:|3��f�г����Sw�&|*9�<�&4,���4'#���3���@�ྐྵ�jk�>0�;4�`#�?���Y΢t��!q>>u� w{̹�ac��g�������2v��U/F����E梊=��5?q����� ݁l?�� 镂��j�D& �j� �NUq
@@ -3,7 +3,15 @@ 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
- ## [Unreleased][unreleased]
6
+ ## Unreleased
7
+
8
+ ## [0.3.0] - 2015-11-18
9
+ ### Changed
10
+ - Update metrics-es-node-graphite.rb, check-es-node-status.rb, and check-es-file-descriptors.rb for Elasticsearch 2.0
11
+ - Update elasticsearch gem to 1.0.14
12
+
13
+ ### Added
14
+ - Add check-es-circuit-breakers.rb, to alert when circuit breakers have been tripped
7
15
 
8
16
  ## [0.2.0] - 2015-10-15
9
17
  ### Changed
data/README.md CHANGED
@@ -1,11 +1,11 @@
1
1
  ## Sensu-Plugins-elasticsearch
2
2
 
3
- [ ![Build Status](https://travis-ci.org/sensu-plugins/sensu-plugins-elasticsearch.svg?branch=master)](https://travis-ci.org/sensu-plugins/sensu-plugins-elasticsearch)
3
+ [![Build Status](https://travis-ci.org/sensu-plugins/sensu-plugins-elasticsearch.svg?branch=master)](https://travis-ci.org/sensu-plugins/sensu-plugins-elasticsearch)
4
4
  [![Gem Version](https://badge.fury.io/rb/sensu-plugins-elasticsearch.svg)](http://badge.fury.io/rb/sensu-plugins-elasticsearch)
5
5
  [![Code Climate](https://codeclimate.com/github/sensu-plugins/sensu-plugins-elasticsearch/badges/gpa.svg)](https://codeclimate.com/github/sensu-plugins/sensu-plugins-elasticsearch)
6
6
  [![Test Coverage](https://codeclimate.com/github/sensu-plugins/sensu-plugins-elasticsearch/badges/coverage.svg)](https://codeclimate.com/github/sensu-plugins/sensu-plugins-elasticsearch)
7
7
  [![Dependency Status](https://gemnasium.com/sensu-plugins/sensu-plugins-elasticsearch.svg)](https://gemnasium.com/sensu-plugins/sensu-plugins-elasticsearch)
8
- [ ![Codeship Status for sensu-plugins/sensu-plugins-elasticsearch](https://codeship.com/projects/926f1e90-db39-0132-e370-5ad94843e341/status?branch=master)](https://codeship.com/projects/79569)
8
+ [![Codeship Status for sensu-plugins/sensu-plugins-elasticsearch](https://codeship.com/projects/926f1e90-db39-0132-e370-5ad94843e341/status?branch=master)](https://codeship.com/projects/79569)
9
9
 
10
10
  ## Functionality
11
11
 
@@ -16,6 +16,7 @@
16
16
  * /bin/check-es-node-status.rb
17
17
  * /bin/check-es-query-count.rb
18
18
  * /bin/check-es-query-exists.rb
19
+ * /bin/check-es-circuit-breakers.rb
19
20
  * /bin/metrics-es-cluster.rb
20
21
  * /bin/metrics-es-node.rb
21
22
  * /bin/metrics-es-node-graphite.rb
@@ -0,0 +1,113 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # check-es-circuit-breakers
4
+ #
5
+ # DESCRIPTION:
6
+ # This plugin checks whether the ElasticSearch circuit breakers have been tripped,
7
+ # using the node stats API.
8
+ # Works with ES 0.9x and ES 1.x
9
+ #
10
+ # OUTPUT:
11
+ # plain text
12
+ #
13
+ # PLATFORMS:
14
+ # Linux
15
+ #
16
+ # DEPENDENCIES:
17
+ # gem: sensu-plugin
18
+ # gem: rest-client
19
+ #
20
+ # USAGE:
21
+ # check-es-circuit-breakers --help
22
+ #
23
+ # NOTES:
24
+ #
25
+ # LICENSE:
26
+ # Copyright 2012 Sonian, Inc <chefs@sonian.net>
27
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
28
+ # for details.
29
+ #
30
+
31
+ require 'sensu-plugin/check/cli'
32
+ require 'rest-client'
33
+ require 'json'
34
+ require 'base64'
35
+
36
+ class ESCircuitBreaker < Sensu::Plugin::Check::CLI
37
+ option :host,
38
+ description: 'Elasticsearch host',
39
+ short: '-h HOST',
40
+ long: '--host HOST',
41
+ default: 'localhost'
42
+
43
+ option :port,
44
+ description: 'Elasticsearch port',
45
+ short: '-p PORT',
46
+ long: '--port PORT',
47
+ proc: proc(&:to_i),
48
+ default: 9200
49
+
50
+ option :timeout,
51
+ description: 'Sets the connection timeout for REST client',
52
+ short: '-t SECS',
53
+ long: '--timeout SECS',
54
+ proc: proc(&:to_i),
55
+ default: 30
56
+
57
+ option :user,
58
+ description: 'Elasticsearch User',
59
+ short: '-u USER',
60
+ long: '--user USER'
61
+
62
+ option :password,
63
+ description: 'Elasticsearch Password',
64
+ short: '-P PASS',
65
+ long: '--password PASS'
66
+
67
+ def get_es_resource(resource)
68
+ headers = {}
69
+ if config[:user] && config[:password]
70
+ auth = 'Basic ' + Base64.encode64("#{config[:user]}:#{config[:password]}").chomp
71
+ headers = { 'Authorization' => auth }
72
+ end
73
+ r = RestClient::Resource.new("http://#{config[:host]}:#{config[:port]}#{resource}", timeout: config[:timeout], headers: headers)
74
+ JSON.parse(r.get)
75
+ rescue Errno::ECONNREFUSED
76
+ critical 'Connection refused'
77
+ rescue RestClient::RequestTimeout
78
+ critical 'Connection timed out'
79
+ rescue Errno::ECONNRESET
80
+ critical 'Connection reset by peer'
81
+ end
82
+
83
+ def breaker_status
84
+ breakers = {}
85
+ status = get_es_resource('/_nodes/stats/breaker')
86
+ status['nodes'].each_pair do |_node, stat|
87
+ host = stat['host']
88
+ breakers[host] = {}
89
+ breakers[host]['breakers'] = []
90
+ stat.each_pair do |key, val|
91
+ if key == 'breakers'
92
+ val.each_pair do |bk, bv|
93
+ if bv['tripped'] != 0
94
+ breakers[host]['breakers'] << bk
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
100
+ breakers
101
+ end
102
+
103
+ def run
104
+ breakers = breaker_status
105
+ tripped = false
106
+ breakers.each_pair { |_k, v| tripped = true unless v['breakers'].empty? }
107
+ if tripped
108
+ critical "Circuit Breakers: #{breakers.each_pair { |k, _v| k }} trippped!"
109
+ else
110
+ ok 'All circuit breakers okay'
111
+ end
112
+ end
113
+ end
@@ -91,6 +91,11 @@ class ESFileDescriptors < Sensu::Plugin::Check::CLI
91
91
  warning 'Connection timed out'
92
92
  end
93
93
 
94
+ def acquire_es_version
95
+ info = get_es_resource('/')
96
+ info['version']['number']
97
+ end
98
+
94
99
  def acquire_open_fds
95
100
  stats = get_es_resource('/_nodes/_local/stats?process=true')
96
101
  begin
@@ -102,7 +107,11 @@ class ESFileDescriptors < Sensu::Plugin::Check::CLI
102
107
  end
103
108
 
104
109
  def acquire_max_fds
105
- info = get_es_resource('/_nodes/_local?process=true')
110
+ if Gem::Version.new(acquire_es_version) >= Gem::Version.new('2.0.0')
111
+ info = get_es_resource('/_nodes/_local/stats?process=true')
112
+ else
113
+ info = get_es_resource('/_nodes/_local?process=true')
114
+ end
106
115
  begin
107
116
  keys = info['nodes'].keys
108
117
  info['nodes'][keys[0]]['process']['max_file_descriptors'].to_i
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # DESCRIPTION:
6
6
  # This plugin checks the ElasticSearch node status, using its API.
7
- # Works with ES 0.9x and ES 1.x
7
+ # Works with ES 0.9x, ES 1.x, and ES 2.x
8
8
  #
9
9
  # OUTPUT:
10
10
  # plain text
@@ -70,7 +70,7 @@ class ESNodeStatus < Sensu::Plugin::Check::CLI
70
70
  headers = { 'Authorization' => auth }
71
71
  end
72
72
  r = RestClient::Resource.new("http://#{config[:host]}:#{config[:port]}#{resource}", timeout: config[:timeout], headers: headers)
73
- JSON.parse(r.get)
73
+ r.get
74
74
  rescue Errno::ECONNREFUSED
75
75
  critical 'Connection refused'
76
76
  rescue RestClient::RequestTimeout
@@ -80,8 +80,8 @@ class ESNodeStatus < Sensu::Plugin::Check::CLI
80
80
  end
81
81
 
82
82
  def acquire_status
83
- health = get_es_resource('/')
84
- health['status'].to_i
83
+ status = get_es_resource('/').code
84
+ status
85
85
  end
86
86
 
87
87
  def run
@@ -154,7 +154,7 @@ class ESNodeGraphiteMetrics < Sensu::Plugin::Metric::CLI::Graphite
154
154
  ].join('&')
155
155
  end
156
156
 
157
- if Gem::Version.new(acquire_es_version) >= Gem::Version.new('1.0.0')
157
+ if es_version >= Gem::Version.new('1.0.0')
158
158
  stats = get_es_resource("/_nodes/_local/stats?#{stats_query_string}")
159
159
  else
160
160
  stats = get_es_resource("/_cluster/nodes/_local/stats?#{stats_query_string}")
@@ -166,13 +166,17 @@ class ESNodeGraphiteMetrics < Sensu::Plugin::Metric::CLI::Graphite
166
166
  metrics = {}
167
167
 
168
168
  if os_stat
169
- metrics['os.load_average'] = node['os']['load_average'][0]
170
- metrics['os.load_average.1'] = node['os']['load_average'][0]
171
- metrics['os.load_average.5'] = node['os']['load_average'][1]
172
- metrics['os.load_average.15'] = node['os']['load_average'][2]
169
+ if es_version >= Gem::Version.new('2.0.0')
170
+ metrics['os.load_average'] = node['os']['load_average']
171
+ else
172
+ metrics['os.load_average'] = node['os']['load_average'][0]
173
+ metrics['os.load_average.1'] = node['os']['load_average'][0]
174
+ metrics['os.load_average.5'] = node['os']['load_average'][1]
175
+ metrics['os.load_average.15'] = node['os']['load_average'][2]
176
+ end
173
177
  metrics['os.mem.free_in_bytes'] = node['os']['mem']['free_in_bytes']
174
178
  # ... Process uptime in millis?
175
- metrics['os.uptime'] = node['os']['uptime_in_millis']
179
+ metrics['os.uptime'] = node['os']['uptime_in_millis'] if node['os']['uptime_in_millis']
176
180
  end
177
181
 
178
182
  if process_stats
@@ -205,6 +209,7 @@ class ESNodeGraphiteMetrics < Sensu::Plugin::Metric::CLI::Graphite
205
209
 
206
210
  metrics['jvm.threads.count'] = node['jvm']['threads']['count']
207
211
  metrics['jvm.threads.peak_count'] = node['jvm']['threads']['peak_count']
212
+ metrics['jvm.uptime'] = node['jvm']['uptime_in_millis']
208
213
  end
209
214
 
210
215
  node['indices'].each do |type, index|
@@ -226,18 +231,20 @@ class ESNodeGraphiteMetrics < Sensu::Plugin::Metric::CLI::Graphite
226
231
  metrics['http.current_open'] = node['http']['current_open']
227
232
  metrics['http.total_opened'] = node['http']['total_opened']
228
233
 
229
- metrics['network.tcp.active_opens'] = node['network']['tcp']['active_opens']
230
- metrics['network.tcp.passive_opens'] = node['network']['tcp']['passive_opens']
234
+ if node['network']
235
+ metrics['network.tcp.active_opens'] = node['network']['tcp']['active_opens']
236
+ metrics['network.tcp.passive_opens'] = node['network']['tcp']['passive_opens']
231
237
 
232
- metrics['network.tcp.in_segs'] = node['network']['tcp']['in_segs']
233
- metrics['network.tcp.out_segs'] = node['network']['tcp']['out_segs']
234
- metrics['network.tcp.retrans_segs'] = node['network']['tcp']['retrans_segs']
235
- metrics['network.tcp.attempt_fails'] = node['network']['tcp']['attempt_fails']
236
- metrics['network.tcp.in_errs'] = node['network']['tcp']['in_errs']
237
- metrics['network.tcp.out_rsts'] = node['network']['tcp']['out_rsts']
238
+ metrics['network.tcp.in_segs'] = node['network']['tcp']['in_segs']
239
+ metrics['network.tcp.out_segs'] = node['network']['tcp']['out_segs']
240
+ metrics['network.tcp.retrans_segs'] = node['network']['tcp']['retrans_segs']
241
+ metrics['network.tcp.attempt_fails'] = node['network']['tcp']['attempt_fails']
242
+ metrics['network.tcp.in_errs'] = node['network']['tcp']['in_errs']
243
+ metrics['network.tcp.out_rsts'] = node['network']['tcp']['out_rsts']
238
244
 
239
- metrics['network.tcp.curr_estab'] = node['network']['tcp']['curr_estab']
240
- metrics['network.tcp.estab_resets'] = node['network']['tcp']['estab_resets']
245
+ metrics['network.tcp.curr_estab'] = node['network']['tcp']['curr_estab']
246
+ metrics['network.tcp.estab_resets'] = node['network']['tcp']['estab_resets']
247
+ end
241
248
 
242
249
  if tp_stats
243
250
  node['thread_pool'].each do |pool, stat|
@@ -1,7 +1,7 @@
1
1
  module SensuPluginsElasticsearch
2
2
  module Version
3
3
  MAJOR = 0
4
- MINOR = 2
4
+ MINOR = 3
5
5
  PATCH = 0
6
6
 
7
7
  VER_STRING = [MAJOR, MINOR, PATCH].compact.join('.')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu-plugins-elasticsearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sensu Plugins and contributors
@@ -30,7 +30,7 @@ cert_chain:
30
30
  8sHuVruarogxxKPBzlL2is4EUb6oN/RdpGx2l4254+nyR+abg//Ed27Ym0PkB4lk
31
31
  HP0m8WSjZmFr109pE/sVsM5jtOCvogyujQOjNVGN4gz1wwPr
32
32
  -----END CERTIFICATE-----
33
- date: 2015-10-16 00:00:00.000000000 Z
33
+ date: 2015-11-19 00:00:00.000000000 Z
34
34
  dependencies:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: rest-client
@@ -52,14 +52,14 @@ dependencies:
52
52
  requirements:
53
53
  - - '='
54
54
  - !ruby/object:Gem::Version
55
- version: 1.0.12
55
+ version: 1.0.14
56
56
  type: :runtime
57
57
  prerelease: false
58
58
  version_requirements: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - '='
61
61
  - !ruby/object:Gem::Version
62
- version: 1.0.12
62
+ version: 1.0.14
63
63
  - !ruby/object:Gem::Dependency
64
64
  name: sensu-plugin
65
65
  requirement: !ruby/object:Gem::Requirement
@@ -215,12 +215,14 @@ executables:
215
215
  - check-es-heap.rb
216
216
  - check-es-file-descriptors.rb
217
217
  - check-es-cluster-status.rb
218
+ - check-es-circuit-breakers.rb
218
219
  extensions: []
219
220
  extra_rdoc_files: []
220
221
  files:
221
222
  - CHANGELOG.md
222
223
  - LICENSE
223
224
  - README.md
225
+ - bin/check-es-circuit-breakers.rb
224
226
  - bin/check-es-cluster-status.rb
225
227
  - bin/check-es-file-descriptors.rb
226
228
  - bin/check-es-heap.rb
@@ -238,7 +240,7 @@ homepage: https://github.com/sensu-plugins/sensu-plugins-elasticsearch
238
240
  licenses:
239
241
  - MIT
240
242
  metadata:
241
- maintainer: "@mattyjones"
243
+ maintainer: sensu-plugin
242
244
  development_status: active
243
245
  production_status: unstable - testing recommended
244
246
  release_draft: 'false'
metadata.gz.sig CHANGED
@@ -1 +1,4 @@
1
- ��&ILH��k 98�V��1ۑ��eZv�Q�]�%�Q~�]�G#�H�֋���f1ws���.^�c�4���“sA�3���ƝUأ���VG���CS* F����
1
+ +{
2
+ �v�0�G*��o�!���\-:Q`������{kK��PTp��,v�oj��z��\�R�����s������iݺ��]?��+{��~?Xځ���hCi��t��m�>����5�I����M$i9t�
3
+ N���f���CG�g)?E�����`Na�'V�D��ii`�>��x����uS�Yo�:,�p�m���1�����c�,^ �u$
4
+ nHM���R�z����A����U:ZqLpȑ;����I����