sensu-extensions-proc-net-snmp 0.0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c931bf5cd14ebbe38f928543b3f0f395c0e90e19
4
+ data.tar.gz: 03c54773b5f05e54f4f75ce8fb879f7a7e8ec461
5
+ SHA512:
6
+ metadata.gz: 9a80c662426d03045ed76985d3a4c48b0ad037fe5dcccced36785cd77f8f468135afce6cdf369f0ee0910967a96057c929f7c4cc5d827552dec74fb9dd9fc4b6
7
+ data.tar.gz: f8c6db980c4ecf8ac8303dd5d72ae2a8dd2abe80818267d0b8eeeb91640c77dd26cc25620db97dae4218aab30320146ac715b607513bdd58b8851a4f71b6c604
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ /vendor/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -0,0 +1 @@
1
+ 2.3.3
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.3.3
5
+ before_install: gem install bundler -v 1.13.6
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2017 Mitsutoshi Aoe
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,146 @@
1
+ # Sensu /proc/net/snmp metrics extension
2
+
3
+ This check extension collects metrics in `/proc/net/snmp` on Linux and format them in the Graphite plaintext format. Sensu can send the collected metrics to Graphite or another TSDB as as InfluxDB.
4
+
5
+ ## Installation
6
+
7
+ On a Sensu client machine:
8
+
9
+ ```
10
+ sensu-install -e proc-net-snmp:0.0.1
11
+ ```
12
+
13
+ Edit `/etc/sensu/conf.d/extensions.json` to load it:
14
+
15
+ ```json
16
+ {
17
+ "extensions": {
18
+ "proc_net_snmp": {
19
+ "version": "0.0.1"
20
+ }
21
+ }
22
+ }
23
+ ```
24
+ or
25
+ ```json
26
+ {
27
+ "extensions": {
28
+ "proc_net_snmp": {
29
+ "gem": "sensu-extensions-proc-net-snmp"
30
+ }
31
+ }
32
+ }
33
+ ```
34
+
35
+ Then restart the Sensu client:
36
+ ```
37
+ sudo service sensu-client restart
38
+ ```
39
+
40
+ ## Configuration
41
+
42
+ Edit `/etc/sensu/conf.d/proc_net_snmp.json` to change its configuration:
43
+ ```json
44
+ {
45
+ "proc_net_snmp": {
46
+ "interval": 60,
47
+ "handler": "graphite",
48
+ "add_client_prefix": true,
49
+ "path_prefix": "proc.net.snmp",
50
+ "prefix_at_start": true
51
+ }
52
+ }
53
+ ```
54
+ and these are the default values.
55
+
56
+ ## Example output
57
+
58
+ ```
59
+ com.sensuapp.demo.proc.net.snmp.ip.forwarding 1 1484531211
60
+ com.sensuapp.demo.proc.net.snmp.ip.defaultttl 64 1484531211
61
+ com.sensuapp.demo.proc.net.snmp.ip.inreceives 7224779 1484531211
62
+ com.sensuapp.demo.proc.net.snmp.ip.inhdrerrors 0 1484531211
63
+ com.sensuapp.demo.proc.net.snmp.ip.inaddrerrors 0 1484531211
64
+ com.sensuapp.demo.proc.net.snmp.ip.forwdatagrams 1650817 1484531211
65
+ com.sensuapp.demo.proc.net.snmp.ip.inunknownprotos 0 1484531211
66
+ com.sensuapp.demo.proc.net.snmp.ip.indiscards 0 1484531211
67
+ com.sensuapp.demo.proc.net.snmp.ip.indelivers 5573961 1484531211
68
+ com.sensuapp.demo.proc.net.snmp.ip.outrequests 5287993 1484531211
69
+ com.sensuapp.demo.proc.net.snmp.ip.outdiscards 44 1484531211
70
+ com.sensuapp.demo.proc.net.snmp.ip.outnoroutes 0 1484531211
71
+ com.sensuapp.demo.proc.net.snmp.ip.reasmtimeout 0 1484531211
72
+ com.sensuapp.demo.proc.net.snmp.ip.reasmreqds 0 1484531211
73
+ com.sensuapp.demo.proc.net.snmp.ip.reasmoks 0 1484531211
74
+ com.sensuapp.demo.proc.net.snmp.ip.reasmfails 0 1484531211
75
+ com.sensuapp.demo.proc.net.snmp.ip.fragoks 0 1484531211
76
+ com.sensuapp.demo.proc.net.snmp.ip.fragfails 0 1484531211
77
+ com.sensuapp.demo.proc.net.snmp.ip.fragcreates 0 1484531211
78
+ com.sensuapp.demo.proc.net.snmp.icmp.inmsgs 170 1484531211
79
+ com.sensuapp.demo.proc.net.snmp.icmp.inerrors 0 1484531211
80
+ com.sensuapp.demo.proc.net.snmp.icmp.incsumerrors 0 1484531211
81
+ com.sensuapp.demo.proc.net.snmp.icmp.indestunreachs 131 1484531211
82
+ com.sensuapp.demo.proc.net.snmp.icmp.intimeexcds 0 1484531211
83
+ com.sensuapp.demo.proc.net.snmp.icmp.inparmprobs 0 1484531211
84
+ com.sensuapp.demo.proc.net.snmp.icmp.insrcquenchs 0 1484531211
85
+ com.sensuapp.demo.proc.net.snmp.icmp.inredirects 0 1484531211
86
+ com.sensuapp.demo.proc.net.snmp.icmp.inechos 0 1484531211
87
+ com.sensuapp.demo.proc.net.snmp.icmp.inechoreps 39 1484531211
88
+ com.sensuapp.demo.proc.net.snmp.icmp.intimestamps 0 1484531211
89
+ com.sensuapp.demo.proc.net.snmp.icmp.intimestampreps 0 1484531211
90
+ com.sensuapp.demo.proc.net.snmp.icmp.inaddrmasks 0 1484531211
91
+ com.sensuapp.demo.proc.net.snmp.icmp.inaddrmaskreps 0 1484531211
92
+ com.sensuapp.demo.proc.net.snmp.icmp.outmsgs 372 1484531211
93
+ com.sensuapp.demo.proc.net.snmp.icmp.outerrors 0 1484531211
94
+ com.sensuapp.demo.proc.net.snmp.icmp.outdestunreachs 225 1484531211
95
+ com.sensuapp.demo.proc.net.snmp.icmp.outtimeexcds 0 1484531211
96
+ com.sensuapp.demo.proc.net.snmp.icmp.outparmprobs 0 1484531211
97
+ com.sensuapp.demo.proc.net.snmp.icmp.outsrcquenchs 0 1484531211
98
+ com.sensuapp.demo.proc.net.snmp.icmp.outredirects 0 1484531211
99
+ com.sensuapp.demo.proc.net.snmp.icmp.outechos 147 1484531211
100
+ com.sensuapp.demo.proc.net.snmp.icmp.outechoreps 0 1484531211
101
+ com.sensuapp.demo.proc.net.snmp.icmp.outtimestamps 0 1484531211
102
+ com.sensuapp.demo.proc.net.snmp.icmp.outtimestampreps 0 1484531211
103
+ com.sensuapp.demo.proc.net.snmp.icmp.outaddrmasks 0 1484531211
104
+ com.sensuapp.demo.proc.net.snmp.icmp.outaddrmaskreps 0 1484531211
105
+ com.sensuapp.demo.proc.net.snmp.icmpmsg.intype0 39 1484531211
106
+ com.sensuapp.demo.proc.net.snmp.icmpmsg.intype3 131 1484531211
107
+ com.sensuapp.demo.proc.net.snmp.icmpmsg.outtype3 225 1484531211
108
+ com.sensuapp.demo.proc.net.snmp.icmpmsg.outtype8 147 1484531211
109
+ com.sensuapp.demo.proc.net.snmp.tcp.rtoalgorithm 1 1484531211
110
+ com.sensuapp.demo.proc.net.snmp.tcp.rtomin 200 1484531211
111
+ com.sensuapp.demo.proc.net.snmp.tcp.rtomax 120000 1484531211
112
+ com.sensuapp.demo.proc.net.snmp.tcp.maxconn -1 1484531211
113
+ com.sensuapp.demo.proc.net.snmp.tcp.activeopens 73115 1484531211
114
+ com.sensuapp.demo.proc.net.snmp.tcp.passiveopens 21 1484531211
115
+ com.sensuapp.demo.proc.net.snmp.tcp.attemptfails 33777 1484531211
116
+ com.sensuapp.demo.proc.net.snmp.tcp.estabresets 18421 1484531211
117
+ com.sensuapp.demo.proc.net.snmp.tcp.currestab 22 1484531211
118
+ com.sensuapp.demo.proc.net.snmp.tcp.insegs 5086735 1484531211
119
+ com.sensuapp.demo.proc.net.snmp.tcp.outsegs 3427799 1484531211
120
+ com.sensuapp.demo.proc.net.snmp.tcp.retranssegs 199 1484531211
121
+ com.sensuapp.demo.proc.net.snmp.tcp.inerrs 120 1484531211
122
+ com.sensuapp.demo.proc.net.snmp.tcp.outrsts 81584 1484531211
123
+ com.sensuapp.demo.proc.net.snmp.tcp.incsumerrors 0 1484531211
124
+ com.sensuapp.demo.proc.net.snmp.udp.indatagrams 587790 1484531211
125
+ com.sensuapp.demo.proc.net.snmp.udp.noports 217 1484531211
126
+ com.sensuapp.demo.proc.net.snmp.udp.inerrors 0 1484531211
127
+ com.sensuapp.demo.proc.net.snmp.udp.outdatagrams 268892 1484531211
128
+ com.sensuapp.demo.proc.net.snmp.udp.rcvbuferrors 0 1484531211
129
+ com.sensuapp.demo.proc.net.snmp.udp.sndbuferrors 0 1484531211
130
+ com.sensuapp.demo.proc.net.snmp.udp.incsumerrors 0 1484531211
131
+ com.sensuapp.demo.proc.net.snmp.udplite.indatagrams 0 1484531211
132
+ com.sensuapp.demo.proc.net.snmp.udplite.noports 0 1484531211
133
+ com.sensuapp.demo.proc.net.snmp.udplite.inerrors 0 1484531211
134
+ com.sensuapp.demo.proc.net.snmp.udplite.outdatagrams 0 1484531211
135
+ com.sensuapp.demo.proc.net.snmp.udplite.rcvbuferrors 0 1484531211
136
+ com.sensuapp.demo.proc.net.snmp.udplite.sndbuferrors 0 1484531211
137
+ com.sensuapp.demo.proc.net.snmp.udplite.incsumerrors 0 1484531211
138
+ ```
139
+
140
+ ## Contributing
141
+
142
+ Bug reports and pull requests are welcome on GitHub at https://github.com/maoe/sensu-extensions-proc-net-snmp.
143
+
144
+ ## License
145
+
146
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,114 @@
1
+ require 'sensu/extension'
2
+ require 'set'
3
+
4
+ module Sensu
5
+ module Extension
6
+ class ProcNetSNMP < Check
7
+ def name
8
+ 'proc_net_snmp'
9
+ end
10
+
11
+ def description
12
+ 'collects metrics in /proc/net/snmp, using the graphite plain-text format'
13
+ end
14
+
15
+ def definition
16
+ {
17
+ type: 'metric',
18
+ name: name,
19
+ interval: options[:interval],
20
+ standalone: true,
21
+ handler: options[:handler]
22
+ }
23
+ end
24
+
25
+ def post_init
26
+ @metrics = []
27
+ end
28
+
29
+ def run
30
+ @metrics = []
31
+ proc_net_snmp_metrics do
32
+ yield flush_metrics, 0
33
+ end
34
+ end
35
+
36
+ private
37
+
38
+ def options
39
+ return @options if @options
40
+ @options = {
41
+ interval: 10,
42
+ handler: 'graphite',
43
+ add_client_prefix: true,
44
+ path_prefix: 'proc.net.snmp',
45
+ prefix_at_start: true
46
+ }
47
+ if settings && settings[:proc_net_snmp].is_a?(Hash)
48
+ @options.merge!(settings[:proc_net_snmp])
49
+ end
50
+ @options
51
+ end
52
+
53
+ def flush_metrics
54
+ metrics = @metrics.join("\n") + "\n"
55
+ @metrics = []
56
+ metrics
57
+ end
58
+
59
+ def add_metric(*args)
60
+ value = args.pop
61
+ path = []
62
+ path << options[:path_prefix] if options[:prefix_at_start]
63
+ path << settings[:client][:name] if options[:add_client_prefix]
64
+ path << options[:path_prefix] unless options[:prefix_at_start]
65
+ path = (path + args).join('.')
66
+ @metrics << [path, value, Time.now.to_i].join(' ')
67
+ end
68
+
69
+ def read_file(file_path, chunk_size = nil)
70
+ content = ''
71
+ File.open(file_path, 'r') do |file|
72
+ read_chunk = proc do
73
+ content << file.read(chunk_size)
74
+ # #YELLOW
75
+ unless file.eof? # rubocop:disable UnlessElse
76
+ EM.next_tick(read_chunk)
77
+ else
78
+ yield content
79
+ end
80
+ end
81
+ read_chunk.call
82
+ end
83
+ end
84
+
85
+ def proc_net_snmp_metrics
86
+ read_file('/proc/net/snmp') do |file|
87
+ protos = Set.new
88
+ metrics = []
89
+ file.each_line do |line|
90
+ proto, data = line.scan(/^([^:]+):\s+(.+)$/).first
91
+ fields = data.nil? ? [] : data.split(/\s+/)
92
+ if protos.member?(proto)
93
+ begin
94
+ values = fields.map {|s| Integer(s) }
95
+ rescue ArgumentError => e
96
+ next
97
+ end
98
+ else
99
+ protos << proto
100
+ metrics = fields
101
+ values = []
102
+ end
103
+ unless values.empty?
104
+ metrics.zip(values) do |metric, value|
105
+ add_metric(proto.downcase, metric.downcase, value)
106
+ end
107
+ end
108
+ end
109
+ yield
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = "sensu-extensions-proc-net-snmp"
5
+ spec.version = "0.0.1"
6
+ spec.authors = ["Mitsutoshi Aoe"]
7
+ spec.email = ["maoe@foldr.in"]
8
+
9
+ spec.summary = %q{Collect metrics in /proc/net/snmp}
10
+ spec.description = %q{Collect metrics in /proc/net/snmp}
11
+ spec.homepage = "http://github.com/maoe/sensu-extensions-proc-net-snmp"
12
+ spec.license = "MIT"
13
+
14
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
15
+ f.match(%r{^(test|spec|features)/})
16
+ end
17
+ spec.bindir = "exe"
18
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "sensu-extension"
22
+
23
+ spec.add_development_dependency "bundler", "~> 1.13"
24
+ spec.add_development_dependency "rake", "~> 10.0"
25
+ spec.add_development_dependency "rspec", "~> 3.0"
26
+ spec.add_development_dependency "sensu-logger"
27
+ spec.add_development_dependency "sensu-settings"
28
+ spec.add_development_dependency "eventmachine"
29
+ end
metadata ADDED
@@ -0,0 +1,152 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sensu-extensions-proc-net-snmp
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Mitsutoshi Aoe
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2017-01-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sensu-extension
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.13'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.13'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: sensu-logger
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: sensu-settings
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: eventmachine
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Collect metrics in /proc/net/snmp
112
+ email:
113
+ - maoe@foldr.in
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".gitignore"
119
+ - ".rspec"
120
+ - ".ruby-version"
121
+ - ".travis.yml"
122
+ - Gemfile
123
+ - LICENSE.txt
124
+ - README.md
125
+ - Rakefile
126
+ - lib/sensu/extensions/proc-net-snmp.rb
127
+ - sensu-extensions-proc-net-snmp.gemspec
128
+ homepage: http://github.com/maoe/sensu-extensions-proc-net-snmp
129
+ licenses:
130
+ - MIT
131
+ metadata: {}
132
+ post_install_message:
133
+ rdoc_options: []
134
+ require_paths:
135
+ - lib
136
+ required_ruby_version: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ required_rubygems_version: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ requirements: []
147
+ rubyforge_project:
148
+ rubygems_version: 2.5.2
149
+ signing_key:
150
+ specification_version: 4
151
+ summary: Collect metrics in /proc/net/snmp
152
+ test_files: []