sensu-plugins-edgelab 1.10.3 → 1.11.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: 6a82c42fb8be37b72cc7fbd4faa96ee607b34a54
4
- data.tar.gz: c4cc209effa6992adef23b68630b898f3013d0cb
3
+ metadata.gz: 65bffec0812ae4c22e5d344085da0eadfa107f0f
4
+ data.tar.gz: 146ff01074cfe98675c1c956e6127b2d256e6573
5
5
  SHA512:
6
- metadata.gz: 3bfffa17dffaedc3bf59e3295a14cd29c8246773d57cbaedf7865eeba4a77f8e7f427685a04312998df8869f0d9f992ed2abde530a5406082d675c77652227b6
7
- data.tar.gz: d079e587377d35eb515d7be653f94cd5fccd5ecb6c9d5e29165d9ad31adc029ee0567fd22866783d8330101057307a3c2f1f769f18ed15c8a26007ed9999136f
6
+ metadata.gz: 50b60a1b64c359ae8943ba0b3d9f4934dbf35eca0da752192e96d3d293655acd0a00dcd240eb2da123b9aacf527839b94f0e53a0e53f3aa8f103a5c61407a1f4
7
+ data.tar.gz: 8971788448f2961564ff9187909fd67e82372602d3c81e453689633679e8e29254b6ef17939ee2234942e6fbb92b19da74ee393142fc8537d06b084ffc521ab5
@@ -0,0 +1,144 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # Check Logstash pipeline to Elasticsearch
4
+ # ===
5
+ #
6
+ # DESCRIPTION:
7
+ # This plugin sends a message to Logstash and check if it arrives correctly in
8
+ # Elasticsearch.
9
+ #
10
+ # PLATFORMS:
11
+ # Linux
12
+ #
13
+ # DEPENDENCIES:
14
+ # gem: sensu-plugin
15
+ # gem: rest-client
16
+ #
17
+ # LICENSE:
18
+ # Copyright 2017 Jonathan Ballet <jballet@edgelab.ch>
19
+ #
20
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
21
+ # for details.
22
+
23
+ require 'sensu-plugin/check/cli'
24
+ require 'rest-client'
25
+
26
+ require 'digest'
27
+ require 'json'
28
+ require 'socket'
29
+ require 'time'
30
+ require 'timeout'
31
+
32
+ class CheckLogstashPipeline < Sensu::Plugin::Check::CLI
33
+ option :duration_warning,
34
+ description: 'Warn if lookup time greater than TIME',
35
+ short: '-w TIME',
36
+ long: '--warning TIME',
37
+ proc: proc(&:to_i),
38
+ default: 15
39
+
40
+ option :duration_critical,
41
+ description: 'Error if lookup time greater than TIME',
42
+ short: '-c TIME',
43
+ long: '--critical TIME',
44
+ proc: proc(&:to_i),
45
+ default: 40
46
+
47
+ option :logstash_host,
48
+ description: 'Logstash hostname',
49
+ long: '--logstash-host HOSTNAME',
50
+ default: 'json-tcp.logstash.service.consul'
51
+
52
+ option :logstash_port,
53
+ description: 'Logstash TCP port',
54
+ long: '--logstash-port PORTT',
55
+ proc: proc(&:to_i),
56
+ default: 10_515
57
+
58
+ option :elasticsearch_url,
59
+ description: 'Elasticsearch URL',
60
+ long: '--elasticsearch URL',
61
+ default: 'http://elasticsearch.service.consul:9200'
62
+
63
+ option :timeout,
64
+ description: 'Timeout waiting for the event to show up in Elasticsearch',
65
+ short: '-t TIME',
66
+ long: '--timeout TIME',
67
+ proc: proc(&:to_i),
68
+ default: 60
69
+
70
+ option :elaticsearch_request_interval,
71
+ description: 'Duration to wait between each Elasticsearch request',
72
+ short: '-i TIME',
73
+ long: '--interval TIME',
74
+ proc: proc(&:to_i),
75
+ default: 2
76
+
77
+ def run
78
+ sent_at = Time.now
79
+ message = Digest::SHA256.hexdigest sent_at.to_i.to_s
80
+
81
+ msg = {
82
+ service: {
83
+ name: 'logstash-check'
84
+ },
85
+ message: message,
86
+ sent_at: sent_at.iso8601(10)
87
+ }
88
+
89
+ socket = TCPSocket.new(config[:logstash_host],
90
+ config[:logstash_port])
91
+ socket.puts(JSON.generate(msg))
92
+ socket.close
93
+
94
+ msearch1 = {index: ["logstash-*"]}
95
+ msearch2 = {
96
+ size: 5,
97
+ query: {
98
+ bool: {
99
+ must: [
100
+ { query_string: { query: message } },
101
+ {
102
+ range: {
103
+ "@timestamp": {
104
+ gte: sent_at.to_i,
105
+ lte: sent_at.to_i + config[:timeout],
106
+ format: 'epoch_second'
107
+ }
108
+ }
109
+ }
110
+ ]
111
+ }
112
+ }
113
+ }
114
+
115
+ body = "#{JSON.generate(msearch1)}\n#{JSON.generate(msearch2)}\n"
116
+ url = "#{config[:elasticsearch_url]}/_msearch"
117
+
118
+ tries = 0
119
+ found = 0
120
+
121
+ while Time.now.to_i - sent_at.to_i < config[:timeout]
122
+ sleep config[:elaticsearch_request_interval]
123
+ tries += 1
124
+ response = RestClient.post(url, body)
125
+ found = JSON.parse(response)['responses'][0]['hits']['total']
126
+ break if found > 0
127
+ end
128
+
129
+ duration = Time.now.to_i - sent_at.to_i
130
+
131
+ if found <= 0
132
+ critical "Event #{message} NOT found"
133
+ end
134
+
135
+ msg = "Event found (duration=#{duration}s, requests=#{tries}, results=#{found})"
136
+ if duration > config[:duration_critical]
137
+ critical msg
138
+ elsif duration > config[:duration_warning]
139
+ warning msg
140
+ else
141
+ ok msg
142
+ end
143
+ end
144
+ end
@@ -37,7 +37,7 @@ class CheckRabbitMQQueuesSynchronised < Sensu::Plugin::RabbitMQ::Check
37
37
  queues = get_queues config
38
38
 
39
39
  queues.each do |q|
40
- next unless q.key?("slave_nodes")
40
+ next unless q.key?('slave_nodes')
41
41
 
42
42
  nb_slaves = q['slave_nodes'].count
43
43
  next unless nb_slaves != 0
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu-plugins-edgelab
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.3
4
+ version: 1.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Edgelab
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-02 00:00:00.000000000 Z
11
+ date: 2017-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sensu-plugin
@@ -167,23 +167,25 @@ dependencies:
167
167
  description: Sensu plugins developed by Edgelab
168
168
  email:
169
169
  executables:
170
- - metrics-aws-elb.rb
171
- - metrics-swarm-cluster.rb
170
+ - metrics-aws-asg.rb
172
171
  - metrics-redis-key-pattern.rb
173
- - metrics-es-indices.rb
174
172
  - check-apt-expired-keys.rb
175
173
  - check-swarm-cluster.rb
176
- - metrics-aws-rds.rb
177
- - metrics-aws-asg.rb
174
+ - metrics-aws-elb.rb
178
175
  - check-consul-services.rb
179
- - check-rabbitmq-queues-synchronised.rb
176
+ - metrics-aws-rds.rb
177
+ - metrics-es-indices.rb
180
178
  - check-nomad-leader.rb
179
+ - metrics-swarm-cluster.rb
180
+ - check-logstash-pipeline.rb
181
+ - check-rabbitmq-queues-synchronised.rb
181
182
  - check-nomad-jobs.rb
182
183
  extensions: []
183
184
  extra_rdoc_files: []
184
185
  files:
185
186
  - bin/check-apt-expired-keys.rb
186
187
  - bin/check-consul-services.rb
188
+ - bin/check-logstash-pipeline.rb
187
189
  - bin/check-nomad-jobs.rb
188
190
  - bin/check-nomad-leader.rb
189
191
  - bin/check-rabbitmq-queues-synchronised.rb