sensu-plugins-elasticsearch 0.4.3 → 0.5.3

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,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