sensu-plugins-logstash 1.0.0 → 1.1.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: a64df7f519c8ab4e45b2f1bed59fc4c53ef75753
4
- data.tar.gz: 7bb91d51758f6cc94e299f8a171d650a9a38db3b
3
+ metadata.gz: 4a2d687c679ae0fe582beb5778e4db2f4e12bf62
4
+ data.tar.gz: 272f841956109a14fd161b0023836422eb10f78a
5
5
  SHA512:
6
- metadata.gz: 801106e014033c2148f6b2fc763085a6a78a18613795645682285625d47ba75cd971fd142cf1bf8e884e8399d862ee97957edd1d8fbf503c89b178321191955c
7
- data.tar.gz: 7fac7d112439bd6b4661876e4fa36fc5285e528e3e86d85587d43a85981b107090d893832a24f77ff2965d60a2e8a422ea20097b716613a352212a27441d87d9
6
+ metadata.gz: d238bf0b47db82d88f16b00b0c158f317b8f6e232e11226989f0ffedc83a1122d334e33a59bfb141b26c807b22aa12f146a12641b71a90f64d1a767b3cb5b782
7
+ data.tar.gz: a5cfddbd9c76a97c2d10aefcb8692534ae42df199fab04e0e6b9d7e1d6bb5148186fe108c1499ac90b9b68e765d5b1480940925cec0d865ad0d9213b10034da8
data/CHANGELOG.md CHANGED
@@ -4,6 +4,12 @@ This project adheres to [Semantic Versioning](http://semver.org/).
4
4
  This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachangelog.com/)
5
5
 
6
6
  ## [Unreleased]
7
+
8
+ ## [1.1.0] - 2017-07-27
9
+ ## Added
10
+ - test with ruby 2.4 as sensu now ships with it. (@majormoses)
11
+ - metrics-logstash-node.rb: new check to collect metrics via the logstash api (@runningman84)
12
+
7
13
  ## [1.0.0] - 2017-05-29
8
14
  ### Added
9
15
  - testing on ruby 2.3
@@ -40,7 +46,8 @@ This CHANGELOG follows the format listed at [Keep A Changelog](http://keepachang
40
46
  ### Added
41
47
  - initial release
42
48
 
43
- [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-logstash/compare/1.0.0...HEAD
49
+ [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-logstash/compare/1.1.0...HEAD
50
+ [1.1.0]: https://github.com/sensu-plugins/sensu-plugins-logstash/compare/1.0.0...1.1.0
44
51
  [1.0.0]: https://github.com/sensu-plugins/sensu-plugins-logstash/compare/0.1.1...1.0.0
45
52
  [0.1.1]: https://github.com/sensu-plugins/sensu-plugins-logstash/compare/0.1.0...0.1.1
46
53
  [0.1.0]: https://github.com/sensu-plugins/sensu-plugins-logstash/compare/0.0.4...0.1.0
@@ -0,0 +1,145 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # logstash-node-metrics
4
+ #
5
+ # DESCRIPTION:
6
+ # This plugin uses the Logstash API to collect metrics, producing a JSON
7
+ # document which is outputted to STDOUT. An exit status of 0 indicates
8
+ # the plugin has successfully collected and produced.
9
+ #
10
+ # OUTPUT:
11
+ # metric data
12
+ #
13
+ # PLATFORMS:
14
+ # Linux
15
+ #
16
+ # DEPENDENCIES:
17
+ # gem: sensu-plugin
18
+ # gem: rest-client
19
+ #
20
+ # USAGE:
21
+ # #YELLOW
22
+ #
23
+ # NOTES:
24
+ #
25
+ # LICENSE:
26
+ # Copyright 2011 Sonian, Inc <chefs@sonian.net>
27
+ # Copyright 2016 Philipp Hellmich <phil@hellmi.de>
28
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
29
+ # for details.
30
+ #
31
+
32
+ require 'sensu-plugin/metric/cli'
33
+ require 'rest-client'
34
+ require 'json'
35
+ require 'base64'
36
+
37
+ #
38
+ # ES Node Metrics
39
+ #
40
+ class ESMetrics < Sensu::Plugin::Metric::CLI::Graphite
41
+ option :scheme,
42
+ description: 'Metric naming scheme, text to prepend to queue_name.metric',
43
+ short: '-s SCHEME',
44
+ long: '--scheme SCHEME',
45
+ default: "#{Socket.gethostname}.logstash"
46
+
47
+ option :host,
48
+ description: 'Elasticsearch server host.',
49
+ short: '-h HOST',
50
+ long: '--host HOST',
51
+ default: 'localhost'
52
+
53
+ option :port,
54
+ description: 'Elasticsearch port',
55
+ short: '-p PORT',
56
+ long: '--port PORT',
57
+ proc: proc(&:to_i),
58
+ default: 9600
59
+
60
+ option :user,
61
+ description: 'Elasticsearch User',
62
+ short: '-u USER',
63
+ long: '--user USER'
64
+
65
+ option :password,
66
+ description: 'Elasticsearch Password',
67
+ short: '-P PASS',
68
+ long: '--password PASS'
69
+
70
+ option :https,
71
+ description: 'Enables HTTPS',
72
+ short: '-e',
73
+ long: '--https'
74
+
75
+ def get_es_resource(resource)
76
+ headers = {}
77
+ if config[:user] && config[:password]
78
+ auth = 'Basic ' + Base64.encode64("#{config[:user]}:#{config[:password]}").chomp
79
+ headers = { 'Authorization' => auth }
80
+ end
81
+
82
+ protocol = if config[:https]
83
+ 'https'
84
+ else
85
+ 'http'
86
+ end
87
+
88
+ r = RestClient::Resource.new("#{protocol}://#{config[:host]}:#{config[:port]}#{resource}", timeout: config[:timeout], headers: headers)
89
+ JSON.parse(r.get)
90
+ rescue Errno::ECONNREFUSED
91
+ warning 'Connection refused'
92
+ rescue RestClient::RequestTimeout
93
+ warning 'Connection timed out'
94
+ end
95
+
96
+ def run # rubocop:disable Metrics/AbcSize
97
+ stats = get_es_resource('/_node/stats')
98
+
99
+ timestamp = Time.now.to_i
100
+ node = stats
101
+
102
+ metrics = {}
103
+ metrics['jvm.threads.count'] = node['jvm']['threads']['count']
104
+ metrics['jvm.mem.heap_used_in_bytes'] = node['jvm']['mem']['heap_used_in_bytes']
105
+ metrics['jvm.mem.heap_used_percent'] = node['jvm']['mem']['heap_used_percent']
106
+ metrics['jvm.mem.non_heap_used_in_bytes'] = node['jvm']['mem']['non_heap_used_in_bytes']
107
+ metrics['jvm.gc.collectors.old.collection_time_in_millis'] = node['jvm']['gc']['collectors']['old']['collection_time_in_millis']
108
+ metrics['jvm.gc.collectors.young.collection_time_in_millis'] = node['jvm']['gc']['collectors']['young']['collection_time_in_millis']
109
+ metrics['jvm.gc.collectors.old.collection_count'] = node['jvm']['gc']['collectors']['old']['collection_count']
110
+ metrics['jvm.gc.collectors.young.collection_count'] = node['jvm']['gc']['collectors']['young']['collection_count']
111
+
112
+ metrics['process.open_file_descriptors'] = node['process']['open_file_descriptors']
113
+ metrics['process.peak_open_file_descriptors'] = node['process']['peak_open_file_descriptors']
114
+ metrics['process.max_file_descriptors'] = node['process']['max_file_descriptors']
115
+
116
+ node['pipeline']['events'].each do |key, value|
117
+ metrics["pipeline.events.#{key}"] = value
118
+ end
119
+
120
+ node['pipeline']['plugins']['inputs'].each do |item|
121
+ item['events'] = {} unless item.key?('events')
122
+ metrics["pipeline.plugins.inputs.#{item['id']}.events.in"] = item['events']['in'].to_i || 0
123
+ metrics["pipeline.plugins.inputs.#{item['id']}.events.out"] = item['events']['out'].to_i || 0
124
+ end
125
+
126
+ node['pipeline']['plugins']['filters'].each do |item|
127
+ item['events'] = {} unless item.key?('events')
128
+ metrics["pipeline.plugins.filters.#{item['id']}.events.in"] = item['events']['in'].to_i || 0
129
+ metrics["pipeline.plugins.filters.#{item['id']}.events.out"] = item['events']['out'].to_i || 0
130
+ metrics["pipeline.plugins.filters.#{item['id']}.events.duration_in_millis"] = item['events']['duration_in_millis'].to_i || 0
131
+ metrics["pipeline.plugins.filters.#{item['id']}.matches"] = item['matches'].to_i if item.key?('matches')
132
+ end
133
+
134
+ node['pipeline']['plugins']['outputs'].each do |item|
135
+ item['events'] = {} unless item.key?('events')
136
+ metrics["pipeline.plugins.outputs.#{item['id']}.events.in"] = item['events']['in'].to_i || 0
137
+ metrics["pipeline.plugins.outputs.#{item['id']}.events.out"] = item['events']['out'].to_i || 0
138
+ end
139
+
140
+ metrics.each do |k, v|
141
+ output([config[:scheme], k].join('.'), v, timestamp)
142
+ end
143
+ ok
144
+ end
145
+ end
@@ -1,7 +1,7 @@
1
1
  module SensuPluginsLogstash
2
2
  module Version
3
3
  MAJOR = 1
4
- MINOR = 0
4
+ MINOR = 1
5
5
  PATCH = 0
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-logstash
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.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-05-29 00:00:00.000000000 Z
11
+ date: 2017-07-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -185,6 +185,7 @@ description: |-
185
185
  email: "<sensu-users@googlegroups.com>"
186
186
  executables:
187
187
  - handler-logstash.rb
188
+ - metrics-logstash-node.rb
188
189
  extensions: []
189
190
  extra_rdoc_files: []
190
191
  files:
@@ -192,6 +193,7 @@ files:
192
193
  - LICENSE
193
194
  - README.md
194
195
  - bin/handler-logstash.rb
196
+ - bin/metrics-logstash-node.rb
195
197
  - lib/sensu-plugins-logstash.rb
196
198
  - lib/sensu-plugins-logstash/version.rb
197
199
  homepage: https://github.com/sensu-plugins/sensu-plugins-logstash