sensu-plugins-elasticsearch 0.4.3 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MjBkODRkNWI2ZTRhODJmNzlhNzIyY2MxMjBmMjE0ZTNjMGE2YTQxMw==
4
+ YjkwYTFiOWMzYjAzMzY0OTNiZjE5ZDZkNWY3NTliNzJiMGU2NWQ4ZQ==
5
5
  data.tar.gz: !binary |-
6
- MzllOTFmNWNiNzJiM2UxNzRhYTE1ZDNmYWQ1MjM5MzMzNGU5YzUxMQ==
6
+ OWI1ZTYzMjU5NTM1MzljZDA5NTlkOTViYThiNzBlZDY0ODQ2NTA1Yg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- M2IzOWI4Y2NkNzJjNGZiNzIxYjY4ODJiZmFiNDczMzU0MzA3NjJkOGVmMzE0
10
- YWIyYTcyYzdlYWRiYWYyN2ExMmIyNzExZjkwMWM3M2U4YWE2YzRkYzJmMDAx
11
- OTczYWRhZTM3ZmMyZjMxOThhNDg5ZmM5NWFmYjEwYjQ5NTQ0ZjI=
9
+ MGNhNjRjZWEzZjQ2OTBlYjI5OTJjY2Y5YmFmOTc5ZTE2YjFhODNjYjc2OWMy
10
+ YmQ0OWMyZWRlMWJjYTMwODU2MzQxNjc3ZjFmYTI2ZTliODI1ODQxMmFmOGQz
11
+ ZDNkNjFkNTU5OTFhYjdiNWEzYjQ2NzAyMDc2MTIwNzAxNmMwODQ=
12
12
  data.tar.gz: !binary |-
13
- YzRjMGRkN2JhNzI4ODhmY2I0MmRjZTY4MjMxZDkyNzJlODkxODQyN2E2NGFj
14
- NmYyNjBkZThlZmNiZTc5YTcwY2Y2ZmZlYWRmOTFjMzIzYWM3ZjBjODRlNjU3
15
- NDllODUxZTg0ZjAzODRiYzIyM2RiZjFkZDAyNmRkNGQ1YWVhM2E=
13
+ MzYyODViMzE4OTExZGU1Y2RjMWJkY2UzNTVjMGZiY2Q1Y2QzNGJjZGY2NGQ0
14
+ YTRkOWEzNTA0MThkYzE5ZDI1NjNhOWM1YjAyMGQwNzk5MjQ3ZDAzMzY0N2I1
15
+ YTUzNDJhYTRmMTJlMDFiNzIzMjVmMGNkZTRjOGNlZjZkNDRiYmY=
data/CHANGELOG.md CHANGED
@@ -5,6 +5,15 @@ This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachang
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [0.5.3] - 2016-04-02
9
+ ### Added
10
+ - check-es-indexes (check for dup indexes) (Yieldbot)
11
+ - check-es-shard-allocation (check ElasticSearch shard allocation persistent and transient settings) (Yieldbot)
12
+ - Adding offset flag to allow specifying of a end time offset
13
+ - Adding custom timestamp field feature to check-es-query-count and check-es-query-exists
14
+ - Added support for https requests (OrbotixInc)
15
+
16
+
8
17
  ## [0.4.3] - 2016-02-22
9
18
  ### Fixed
10
19
  - metrics-es-heap.rb: Assignment of node from the stats variable happened before stats was assigned. Moved node assignment to be after stats assignment.
@@ -13,7 +22,7 @@ This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachang
13
22
  ### Added
14
23
  - metrics-es-cluster.rb: Added i/o cluster stats
15
24
 
16
- ## [0.4.1] - 2016-01-26
25
+ ## [0.4.1] - 2016-01-26
17
26
  ### Fixed
18
27
  - metrics-es-cluster.rb: Allow metrics to be gathered even if the cluster has zero documents. Also updated cache name for Elasticsearch 2.0+
19
28
  - metrics-es-node-graphite.rb: Update node stats for Elasticsearch 2.0+
@@ -76,8 +85,9 @@ This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachang
76
85
  ### Added
77
86
  - initial release
78
87
 
79
- [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-elasticsearch/compare/0.4.3...HEAD
80
- [0.4.2]: https://github.com/sensu-plugins/sensu-plugins-elasticsearch/compare/0.4.2...0.4.3
88
+ [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-elasticsearch/compare/0.5.3...HEAD
89
+ [0.5.3]: https://github.com/sensu-plugins/sensu-plugins-elasticsearch/compare/0.4.2...0.4.3
90
+ [0.4.3]: https://github.com/sensu-plugins/sensu-plugins-elasticsearch/compare/0.4.2...0.4.3
81
91
  [0.4.2]: https://github.com/sensu-plugins/sensu-plugins-elasticsearch/compare/0.4.1...0.4.2
82
92
  [0.4.1]: https://github.com/sensu-plugins/sensu-plugins-elasticsearch/compare/0.4.0...0.4.1
83
93
  [0.4.0]: https://github.com/sensu-plugins/sensu-plugins-elasticsearch/compare/0.3.2...0.4.0
data/README.md CHANGED
@@ -9,13 +9,15 @@
9
9
  ## Functionality
10
10
 
11
11
  ## Files
12
+ * /bin/check-es-circuit-breakers.rb
12
13
  * /bin/check-es-cluster-status.rb
13
14
  * /bin/check-es-file-descriptors.rb
14
15
  * /bin/check-es-heap.rb
16
+ * /bin/check-es-indexes.rb
15
17
  * /bin/check-es-node-status.rb
16
18
  * /bin/check-es-query-count.rb
17
19
  * /bin/check-es-query-exists.rb
18
- * /bin/check-es-circuit-breakers.rb
20
+ * /bin/check-es-shard-allocation
19
21
  * /bin/metrics-es-cluster.rb
20
22
  * /bin/metrics-es-node.rb
21
23
  * /bin/metrics-es-node-graphite.rb
@@ -64,13 +64,25 @@ class ESCircuitBreaker < Sensu::Plugin::Check::CLI
64
64
  short: '-P PASS',
65
65
  long: '--password PASS'
66
66
 
67
+ option :https,
68
+ description: 'Enables HTTPS',
69
+ short: '-e',
70
+ long: '--https'
71
+
67
72
  def get_es_resource(resource)
68
73
  headers = {}
69
74
  if config[:user] && config[:password]
70
75
  auth = 'Basic ' + Base64.encode64("#{config[:user]}:#{config[:password]}").chomp
71
76
  headers = { 'Authorization' => auth }
72
77
  end
73
- r = RestClient::Resource.new("http://#{config[:host]}:#{config[:port]}#{resource}", timeout: config[:timeout], headers: headers)
78
+
79
+ protocol = if config[:https]
80
+ 'https'
81
+ else
82
+ 'http'
83
+ end
84
+
85
+ r = RestClient::Resource.new("#{protocol}://#{config[:host]}:#{config[:port]}#{resource}", timeout: config[:timeout], headers: headers)
74
86
  JSON.parse(r.get)
75
87
  rescue Errno::ECONNREFUSED
76
88
  critical 'Connection refused'
@@ -78,13 +78,25 @@ class ESClusterStatus < Sensu::Plugin::Check::CLI
78
78
  short: '-P PASS',
79
79
  long: '--password PASS'
80
80
 
81
+ option :https,
82
+ description: 'Enables HTTPS',
83
+ short: '-e',
84
+ long: '--https'
85
+
81
86
  def get_es_resource(resource)
82
87
  headers = {}
83
88
  if config[:user] && config[:password]
84
89
  auth = 'Basic ' + Base64.encode64("#{config[:user]}:#{config[:password]}").chomp
85
90
  headers = { 'Authorization' => auth }
86
91
  end
87
- r = RestClient::Resource.new("http://#{config[:host]}:#{config[:port]}#{resource}", timeout: config[:timeout], headers: headers)
92
+
93
+ protocol = if config[:https]
94
+ 'https'
95
+ else
96
+ 'http'
97
+ end
98
+
99
+ r = RestClient::Resource.new("#{protocol}://#{config[:host]}:#{config[:port]}#{resource}", timeout: config[:timeout], headers: headers)
88
100
  JSON.parse(r.get)
89
101
  rescue Errno::ECONNREFUSED
90
102
  critical 'Connection refused'
@@ -77,13 +77,25 @@ class ESFileDescriptors < Sensu::Plugin::Check::CLI
77
77
  short: '-P PASS',
78
78
  long: '--password PASS'
79
79
 
80
+ option :https,
81
+ description: 'Enables HTTPS',
82
+ short: '-e',
83
+ long: '--https'
84
+
80
85
  def get_es_resource(resource)
81
86
  headers = {}
82
87
  if config[:user] && config[:password]
83
88
  auth = 'Basic ' + Base64.encode64("#{config[:user]}:#{config[:password]}").chomp
84
89
  headers = { 'Authorization' => auth }
85
90
  end
86
- r = RestClient::Resource.new("http://#{config[:host]}:#{config[:port]}#{resource}", timeout: config[:timeout], headers: headers)
91
+
92
+ protocol = if config[:https]
93
+ 'https'
94
+ else
95
+ 'http'
96
+ end
97
+
98
+ r = RestClient::Resource.new("#{protocol}://#{config[:host]}:#{config[:port]}#{resource}", timeout: config[:timeout], headers: headers)
87
99
  JSON.parse(r.get)
88
100
  rescue Errno::ECONNREFUSED
89
101
  warning 'Connection refused'
data/bin/check-es-heap.rb CHANGED
@@ -85,6 +85,11 @@ class ESHeap < Sensu::Plugin::Check::CLI
85
85
  short: '-W PASS',
86
86
  long: '--password PASS'
87
87
 
88
+ option :https,
89
+ description: 'Enables HTTPS',
90
+ short: '-e',
91
+ long: '--https'
92
+
88
93
  def acquire_es_version
89
94
  info = acquire_es_resource('/')
90
95
  info['version']['number']
@@ -96,7 +101,14 @@ class ESHeap < Sensu::Plugin::Check::CLI
96
101
  auth = 'Basic ' + Base64.encode64("#{config[:user]}:#{config[:password]}").chomp
97
102
  headers = { 'Authorization' => auth }
98
103
  end
99
- r = RestClient::Resource.new("http://#{config[:host]}:#{config[:port]}#{resource}", timeout: config[:timeout], headers: headers)
104
+
105
+ protocol = if config[:https]
106
+ 'https'
107
+ else
108
+ 'http'
109
+ end
110
+
111
+ r = RestClient::Resource.new("#{protocol}://#{config[:host]}:#{config[:port]}#{resource}", timeout: config[:timeout], headers: headers)
100
112
  JSON.parse(r.get)
101
113
  rescue Errno::ECONNREFUSED
102
114
  warning 'Connection refused'
@@ -0,0 +1,89 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # Check Elastic Search Indexes
4
+ # ===
5
+ #
6
+ # DESCRIPTION:
7
+ # This plugin will check a a node for dupe indexes
8
+ #
9
+ # OUTPUT:
10
+ # plain-text
11
+ #
12
+ # PLATFORMS:
13
+ # Linux
14
+ #
15
+ # DEPENDENCIES:
16
+ # gem: sensu-plugin
17
+ #
18
+ # needs usage
19
+ # USAGE:
20
+ #
21
+ # NOTES:
22
+ #
23
+ # LICENSE:
24
+ # Copyright 2014 Yieldbot, Inc <devops@yieldbot.com>
25
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
26
+ # for details.
27
+ #
28
+
29
+ require 'sensu-plugin/check/cli'
30
+
31
+ #
32
+ # == Check Elastic Search Cluster Index
33
+ #
34
+ class CheckESClusterIndex < Sensu::Plugin::Check::CLI
35
+ option :cluster,
36
+ description: 'Array of clusters to check',
37
+ short: '-C CLUSTER[,CLUSTER]',
38
+ long: '--cluster CLUSTER[,CLUSTER]',
39
+ proc: proc { |a| a.split(',') }
40
+
41
+ option :ignore,
42
+ description: 'Comma separated list of indexes to ignore',
43
+ short: '-i INDEX[,INDEX]',
44
+ long: '--ignore INDEX[,INDEX]',
45
+ proc: proc { |a| a.split(',') }
46
+
47
+ option :debug,
48
+ description: 'Debug',
49
+ short: '-d',
50
+ long: '--debug'
51
+
52
+ def run
53
+ # If only one cluster is given, no need to check the indexes
54
+ ok 'All indexes are unique' if config[:cluster].length == 1
55
+
56
+ port = ':9200'
57
+ cmd = '/_cat/indices?v | tail -n +2'
58
+
59
+ valid_index = {}
60
+ dupe_index = {}
61
+ config[:cluster].each do |u|
62
+ index_arr = `curl -s #{ u }#{ port }#{ cmd }`.split("\n")
63
+ index_arr.each do |t|
64
+ t = t.split[1]
65
+
66
+ # If the index is in the ignore list, go to the next one
67
+ next if config[:ignore].include? t
68
+
69
+ if valid_index.key?(t)
70
+ dupe_index[t] = [] unless dupe_index[t].is_a?(Array)
71
+ dupe_index[t] << u
72
+ dupe_index[t] << valid_index[t] unless dupe_index[t]
73
+ .include?(valid_index[t])
74
+ else
75
+ valid_index[t] = [] unless valid_index[t].is_a?(Array)
76
+ valid_index[t] << u
77
+ end
78
+ end
79
+ end
80
+
81
+ if dupe_index.count > 0
82
+ dupe_index.each do |k, v|
83
+ critical "#{k} is on #{v}"
84
+ end
85
+ else
86
+ ok 'All indexes are unique'
87
+ end
88
+ end
89
+ end
@@ -63,13 +63,25 @@ class ESNodeStatus < Sensu::Plugin::Check::CLI
63
63
  short: '-P PASS',
64
64
  long: '--password PASS'
65
65
 
66
+ option :https,
67
+ description: 'Enables HTTPS',
68
+ short: '-e',
69
+ long: '--https'
70
+
66
71
  def get_es_resource(resource)
67
72
  headers = {}
68
73
  if config[:user] && config[:password]
69
74
  auth = 'Basic ' + Base64.encode64("#{config[:user]}:#{config[:password]}").chomp
70
75
  headers = { 'Authorization' => auth }
71
76
  end
72
- r = RestClient::Resource.new("http://#{config[:host]}:#{config[:port]}#{resource}", timeout: config[:timeout], headers: headers)
77
+
78
+ protocol = if config[:https]
79
+ 'https'
80
+ else
81
+ 'http'
82
+ end
83
+
84
+ r = RestClient::Resource.new("#{protocol}://#{config[:host]}:#{config[:port]}#{resource}", timeout: config[:timeout], headers: headers)
73
85
  r.get
74
86
  rescue Errno::ECONNREFUSED
75
87
  critical 'Connection refused'
@@ -54,32 +54,43 @@ class ESQueryCount < Sensu::Plugin::Check::CLI
54
54
  description: 'Elasticsearch types to limit searches to, comma separated list.',
55
55
  long: '--types TYPES'
56
56
 
57
+ option :timestamp_field,
58
+ description: 'Field to use instead of @timestamp for query.',
59
+ long: '--timestamp-field FIELD_NAME',
60
+ default: '@timestamp'
61
+
62
+ option :offset,
63
+ description: 'Seconds before offset to end @timestamp against query.',
64
+ long: '--offset OFFSET',
65
+ proc: proc(&:to_i),
66
+ default: 0
67
+
57
68
  option :minutes_previous,
58
- description: 'Minutes before now to check @timestamp against query.',
69
+ description: 'Minutes before offset to check @timestamp against query.',
59
70
  long: '--minutes-previous MINUTES_PREVIOUS',
60
71
  proc: proc(&:to_i),
61
72
  default: 0
62
73
 
63
74
  option :hours_previous,
64
- description: 'Hours before now to check @timestamp against query.',
75
+ description: 'Hours before offset to check @timestamp against query.',
65
76
  long: '--hours-previous HOURS_PREVIOUS',
66
77
  proc: proc(&:to_i),
67
78
  default: 0
68
79
 
69
80
  option :days_previous,
70
- description: 'Days before now to check @timestamp against query.',
81
+ description: 'Days before offset to check @timestamp against query.',
71
82
  long: '--days-previous DAYS_PREVIOUS',
72
83
  proc: proc(&:to_i),
73
84
  default: 0
74
85
 
75
86
  option :weeks_previous,
76
- description: 'Weeks before now to check @timestamp against query.',
87
+ description: 'Weeks before offset to check @timestamp against query.',
77
88
  long: '--weeks-previous WEEKS_PREVIOUS',
78
89
  proc: proc(&:to_i),
79
90
  default: 0
80
91
 
81
92
  option :months_previous,
82
- description: 'Months before now to check @timestamp against query.',
93
+ description: 'Months before offset to check @timestamp against query.',
83
94
  long: '--months-previous MONTHS_PREVIOUS',
84
95
  proc: proc(&:to_i),
85
96
  default: 0
@@ -55,32 +55,43 @@ class ESQueryExists < Sensu::Plugin::Check::CLI
55
55
  description: 'Elasticsearch types to limit searches to, comma separated list.',
56
56
  long: '--types TYPES'
57
57
 
58
+ option :timestamp_field,
59
+ description: 'Field to use instead of @timestamp for query.',
60
+ long: '--timestamp_field FIELD_NAME',
61
+ default: '@timestamp'
62
+
63
+ option :offset,
64
+ description: 'Seconds before offset to end @timestamp against query.',
65
+ long: '--offset OFFSET',
66
+ proc: proc(&:to_i),
67
+ default: 0
68
+
58
69
  option :minutes_previous,
59
- description: 'Minutes before now to check @timestamp against query.',
70
+ description: 'Minutes before offset to check @timestamp against query.',
60
71
  long: '--minutes-previous MINUTES_PREVIOUS',
61
72
  proc: proc(&:to_i),
62
73
  default: 0
63
74
 
64
75
  option :hours_previous,
65
- description: 'Hours before now to check @timestamp against query.',
76
+ description: 'Hours before offset to check @timestamp against query.',
66
77
  long: '--hours-previous DAYS_PREVIOUS',
67
78
  proc: proc(&:to_i),
68
79
  default: 0
69
80
 
70
81
  option :days_previous,
71
- description: 'Days before now to check @timestamp against query.',
82
+ description: 'Days before offset to check @timestamp against query.',
72
83
  long: '--days-previous DAYS_PREVIOUS',
73
84
  proc: proc(&:to_i),
74
85
  default: 0
75
86
 
76
87
  option :weeks_previous,
77
- description: 'Weeks before now to check @timestamp against query.',
88
+ description: 'Weeks before offset to check @timestamp against query.',
78
89
  long: '--weeks-previous WEEKS_PREVIOUS',
79
90
  proc: proc(&:to_i),
80
91
  default: 0
81
92
 
82
93
  option :months_previous,
83
- description: 'Months before now to check @timestamp against query.',
94
+ description: 'Months before offset to check @timestamp against query.',
84
95
  long: '--months-previous MONTHS_PREVIOUS',
85
96
  proc: proc(&:to_i),
86
97
  default: 0
@@ -0,0 +1,96 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # Checks ElasticSearch shard allocation setting status
4
+ # ===
5
+ #
6
+ # DESCRIPTION:
7
+ # Checks the ElasticSearch shard allocation persistent and transient settings
8
+ # and will return status based on a difference in those settings.
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
+ #
22
+ # NOTES:
23
+ #
24
+ # LICENSE:
25
+ # Copyright 2014 Yieldbot, Inc <devops@yieldbot.com>
26
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
27
+ # for details.
28
+ #
29
+
30
+ require 'sensu-plugin/check/cli'
31
+ require 'rest-client'
32
+ require 'json'
33
+
34
+ #
35
+ # == Elastic Search Shard Allocation Status
36
+ #
37
+ class ESShardAllocationStatus < Sensu::Plugin::Check::CLI
38
+ option :scheme,
39
+ description: 'URI scheme',
40
+ long: '--scheme SCHEME',
41
+ default: 'http'
42
+
43
+ option :server,
44
+ description: 'Elasticsearch server',
45
+ short: '-s SERVER',
46
+ long: '--server SERVER',
47
+ default: 'localhost'
48
+
49
+ option :port,
50
+ description: 'Port',
51
+ short: '-p PORT',
52
+ long: '--port PORT',
53
+ default: '9200'
54
+
55
+ def get_es_resource(resource)
56
+ r = RestClient::Resource.new("#{config[:scheme]}://#{config[:server]}:#{config[:port]}/#{resource}", timeout: 45)
57
+ JSON.parse(r.get)
58
+ rescue Errno::ECONNREFUSED
59
+ warning 'Connection refused'
60
+ rescue RestClient::RequestTimeout
61
+ warning 'Connection timed out'
62
+ end
63
+
64
+ def master?
65
+ state = get_es_resource('/_cluster/state?filter_routing_table=true&filter_metadata=true&filter_indices=true&filter_blocks=true&filter_nodes=true')
66
+ local = get_es_resource('/_nodes/_local')
67
+ local['nodes'].keys.first == state['master_node']
68
+ end
69
+
70
+ def get_status(type)
71
+ settings = get_es_resource('/_cluster/settings')
72
+ # Get the status for the given type, or default to 'all'
73
+ # which is the ES default
74
+ begin
75
+ settings[type]['cluster']['routing']['allocation']['enable'].downcase
76
+ rescue
77
+ 'all'
78
+ end
79
+ end
80
+
81
+ def run
82
+ if master?
83
+ transient = get_status('transient')
84
+ persistent = get_status('persistent')
85
+
86
+ if transient == persistent
87
+ ok "Persistent and transient allocation match: #{persistent}"
88
+ else
89
+ critical "Persistent(#{persistent}) and transient(#{transient}) \
90
+ shard allocation do not match."
91
+ end
92
+ else
93
+ ok 'Not the master'
94
+ end
95
+ end
96
+ end
@@ -85,6 +85,11 @@ class ESClusterMetrics < Sensu::Plugin::Metric::CLI::Graphite
85
85
  short: '-P PASS',
86
86
  long: '--password PASS'
87
87
 
88
+ option :https,
89
+ description: 'Enables HTTPS',
90
+ short: '-e',
91
+ long: '--https'
92
+
88
93
  def acquire_es_version
89
94
  info = get_es_resource('/')
90
95
  info['version']['number']
@@ -96,7 +101,14 @@ class ESClusterMetrics < Sensu::Plugin::Metric::CLI::Graphite
96
101
  auth = 'Basic ' + Base64.encode64("#{config[:user]}:#{config[:password]}").chomp
97
102
  headers = { 'Authorization' => auth }
98
103
  end
99
- r = RestClient::Resource.new("http://#{config[:host]}:#{config[:port]}#{resource}", timeout: config[:timeout], headers: headers)
104
+
105
+ protocol = if config[:https]
106
+ 'https'
107
+ else
108
+ 'http'
109
+ end
110
+
111
+ r = RestClient::Resource.new("#{protocol}://#{config[:host]}:#{config[:port]}#{resource}", timeout: config[:timeout], headers: headers)
100
112
  JSON.parse(r.get)
101
113
  rescue Errno::ECONNREFUSED
102
114
  warning 'Connection refused'
@@ -110,13 +110,25 @@ class ESNodeGraphiteMetrics < Sensu::Plugin::Metric::CLI::Graphite
110
110
  short: '-P PASS',
111
111
  long: '--password PASS'
112
112
 
113
+ option :https,
114
+ description: 'Enables HTTPS',
115
+ short: '-e',
116
+ long: '--https'
117
+
113
118
  def get_es_resource(resource)
114
119
  headers = {}
115
120
  if config[:user] && config[:password]
116
121
  auth = 'Basic ' + Base64.encode64("#{config[:user]}:#{config[:password]}").chomp
117
122
  headers = { 'Authorization' => auth }
118
123
  end
119
- r = RestClient::Resource.new("http://#{config[:server]}:#{config[:port]}#{resource}?pretty", timeout: config[:timeout], headers: headers)
124
+
125
+ protocol = if config[:https]
126
+ 'https'
127
+ else
128
+ 'http'
129
+ end
130
+
131
+ r = RestClient::Resource.new("#{protocol}://#{config[:server]}:#{config[:port]}#{resource}?pretty", timeout: config[:timeout], headers: headers)
120
132
  JSON.parse(r.get)
121
133
  rescue Errno::ECONNREFUSED
122
134
  warning 'Connection refused'
@@ -66,6 +66,11 @@ class ESMetrics < Sensu::Plugin::Metric::CLI::Graphite
66
66
  short: '-P PASS',
67
67
  long: '--password PASS'
68
68
 
69
+ option :https,
70
+ description: 'Enables HTTPS',
71
+ short: '-e',
72
+ long: '--https'
73
+
69
74
  def acquire_es_version
70
75
  info = get_es_resource('/')
71
76
  info['version']['number']
@@ -77,7 +82,14 @@ class ESMetrics < Sensu::Plugin::Metric::CLI::Graphite
77
82
  auth = 'Basic ' + Base64.encode64("#{config[:user]}:#{config[:password]}").chomp
78
83
  headers = { 'Authorization' => auth }
79
84
  end
80
- r = RestClient::Resource.new("http://#{config[:host]}:#{config[:port]}#{resource}", timeout: config[:timeout], headers: headers)
85
+
86
+ protocol = if config[:https]
87
+ 'https'
88
+ else
89
+ 'http'
90
+ end
91
+
92
+ r = RestClient::Resource.new("#{protocol}://#{config[:host]}:#{config[:port]}#{resource}", timeout: config[:timeout], headers: headers)
81
93
  JSON.parse(r.get)
82
94
  rescue Errno::ECONNREFUSED
83
95
  warning 'Connection refused'
@@ -21,12 +21,13 @@ module ElasticsearchQuery
21
21
  super()
22
22
  end
23
23
 
24
- def indices
24
+ def indices(end_time)
25
25
  if !config[:index].nil?
26
26
  return config[:index]
27
27
  elsif !config[:date_index].nil?
28
28
  indices = []
29
- curr = Time.now.utc.to_i
29
+
30
+ curr = end_time.to_i
30
31
  start = curr
31
32
 
32
33
  if config[:minutes_previous] != 0
@@ -60,15 +61,17 @@ module ElasticsearchQuery
60
61
  end
61
62
 
62
63
  def build_request_options
64
+ end_time = (Time.now.utc - config[:offset])
63
65
  options = {
64
- index: indices,
66
+ index: indices(end_time),
65
67
  ignore_unavailable: true
66
68
  }
69
+
67
70
  if !config[:body].nil?
68
71
  options[:body] = config[:body]
69
72
  else
70
- es_date_filter = es_date_math_string
71
- unless es_date_filter.nil?
73
+ es_date_start = es_date_math_string end_time
74
+ unless es_date_start.nil?
72
75
  options[:body] = {
73
76
  'query' => {
74
77
  'filtered' => {
@@ -80,7 +83,10 @@ module ElasticsearchQuery
80
83
  },
81
84
  'filter' => {
82
85
  'range' => {
83
- '@timestamp' => { 'gt' => es_date_filter }
86
+ config[:timestamp_field] => {
87
+ 'gt' => es_date_start,
88
+ 'lt' => end_time.strftime('%Y-%m-%dT%H:%M:%S')
89
+ }
84
90
  }
85
91
  }
86
92
  }
@@ -94,7 +100,7 @@ module ElasticsearchQuery
94
100
  options
95
101
  end
96
102
 
97
- def es_date_math_string
103
+ def es_date_math_string(end_time)
98
104
  if config[:minutes_previous] == 0 && \
99
105
  config[:hours_previous] == 0 && \
100
106
  config[:days_previous] == 0 && \
@@ -102,22 +108,12 @@ module ElasticsearchQuery
102
108
  config[:months_previous] == 0
103
109
  return nil
104
110
  else
105
- es_math = "#{Time.now.utc.strftime '%Y-%m-%dT%H:%M:%S'}||"
106
- if config[:minutes_previous] != 0
107
- es_math += "-#{config[:minutes_previous]}m"
108
- end
109
- if config[:hours_previous] != 0
110
- es_math += "-#{config[:hours_previous]}h"
111
- end
112
- if config[:days_previous] != 0
113
- es_math += "-#{config[:days_previous]}d"
114
- end
115
- if config[:weeks_previous] != 0
116
- es_math += "-#{config[:weeks_previous]}w"
117
- end
118
- if config[:months_previous] != 0
119
- es_math += "-#{config[:months_previous]}M"
120
- end
111
+ es_math = "#{end_time.strftime '%Y-%m-%dT%H:%M:%S'}||"
112
+ es_math += "-#{config[:minutes_previous]}m" if config[:minutes_previous] != 0
113
+ es_math += "-#{config[:hours_previous]}h" if config[:hours_previous] != 0
114
+ es_math += "-#{config[:days_previous]}d" if config[:days_previous] != 0
115
+ es_math += "-#{config[:weeks_previous]}w" if config[:weeks_previous] != 0
116
+ es_math += "-#{config[:months_previous]}M" if config[:months_previous] != 0
121
117
  return es_math
122
118
  end
123
119
  end
@@ -1,7 +1,7 @@
1
1
  module SensuPluginsElasticsearch
2
2
  module Version
3
3
  MAJOR = 0
4
- MINOR = 4
4
+ MINOR = 5
5
5
  PATCH = 3
6
6
 
7
7
  VER_STRING = [MAJOR, MINOR, PATCH].compact.join('.')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu-plugins-elasticsearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.5.3
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: 2016-02-22 00:00:00.000000000 Z
11
+ date: 2016-04-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -187,9 +187,11 @@ executables:
187
187
  - check-es-cluster-status.rb
188
188
  - check-es-file-descriptors.rb
189
189
  - check-es-heap.rb
190
+ - check-es-indexes.rb
190
191
  - check-es-node-status.rb
191
192
  - check-es-query-count.rb
192
193
  - check-es-query-exists.rb
194
+ - check-es-shard-allocation-status.rb
193
195
  - metrics-es-cluster.rb
194
196
  - metrics-es-node-graphite.rb
195
197
  - metrics-es-node.rb
@@ -203,9 +205,11 @@ files:
203
205
  - bin/check-es-cluster-status.rb
204
206
  - bin/check-es-file-descriptors.rb
205
207
  - bin/check-es-heap.rb
208
+ - bin/check-es-indexes.rb
206
209
  - bin/check-es-node-status.rb
207
210
  - bin/check-es-query-count.rb
208
211
  - bin/check-es-query-exists.rb
212
+ - bin/check-es-shard-allocation-status.rb
209
213
  - bin/metrics-es-cluster.rb
210
214
  - bin/metrics-es-node-graphite.rb
211
215
  - bin/metrics-es-node.rb